Big performance improvement! Added Caddyfile, using Caddy's file server to serve large files instead of PHP
This commit is contained in:
parent
92362efd47
commit
10502157a3
4 changed files with 73 additions and 3 deletions
38
Caddyfile
Normal file
38
Caddyfile
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
frankenphp {
|
||||||
|
num_threads {$FRANKENPHP_NUM_THREADS:8}
|
||||||
|
max_threads {$FRANKENPHP_MAX_THREADS:16}
|
||||||
|
}
|
||||||
|
|
||||||
|
servers {
|
||||||
|
trusted_proxies static private_ranges
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{$FREAX_SITE_ADDR::9000} {
|
||||||
|
root * {$FREAX_DOCROOT:/home/user/freax-media}
|
||||||
|
|
||||||
|
encode zstd gzip
|
||||||
|
|
||||||
|
@static path /assets/* /freaxlogo.png
|
||||||
|
handle @static {
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_path /media/* {
|
||||||
|
@allowed_media path_regexp allowed_media (?i).*\.(mp4|mkv|avi|mov|wmv|flv|webm|m4v|mp3|wav|ogg|flac|m4a|aac|wma|opus)$
|
||||||
|
handle @allowed_media {
|
||||||
|
root * {$FREAX_MEDIA_ROOT:/__FREAX_MEDIA_ROOT_NOT_SET__}
|
||||||
|
forward_auth {$FREAX_AUTH_UPSTREAM:127.0.0.1:9000} {
|
||||||
|
uri /authz_media.php
|
||||||
|
}
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
|
||||||
|
respond "Forbidden" 403
|
||||||
|
}
|
||||||
|
|
||||||
|
php_server
|
||||||
|
file_server
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -475,6 +475,17 @@ function navigateToPlayback(path) {
|
||||||
window.location.href = `index.php?${params.toString()}`;
|
window.location.href = `index.php?${params.toString()}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildMediaStreamUrl(path) {
|
||||||
|
const normalized = String(path || '').replace(/\\/g, '/');
|
||||||
|
const encodedPath = normalized
|
||||||
|
.split('/')
|
||||||
|
.filter(Boolean)
|
||||||
|
.map(part => encodeURIComponent(part))
|
||||||
|
.join('/');
|
||||||
|
|
||||||
|
return `/media/${encodedPath}`;
|
||||||
|
}
|
||||||
|
|
||||||
function playFile(path, name) {
|
function playFile(path, name) {
|
||||||
const container = $('playerContainer');
|
const container = $('playerContainer');
|
||||||
const ext = path.toLowerCase().split('.').pop();
|
const ext = path.toLowerCase().split('.').pop();
|
||||||
|
|
@ -483,7 +494,7 @@ function playFile(path, name) {
|
||||||
const media = document.createElement(isVideo ? 'video' : 'audio');
|
const media = document.createElement(isVideo ? 'video' : 'audio');
|
||||||
media.controls = true;
|
media.controls = true;
|
||||||
media.autoplay = true;
|
media.autoplay = true;
|
||||||
media.src = `serve_media.php?file=${encodeURIComponent(path)}`;
|
media.src = buildMediaStreamUrl(path);
|
||||||
|
|
||||||
media.addEventListener('error', () => {
|
media.addEventListener('error', () => {
|
||||||
container.innerHTML = `
|
container.innerHTML = `
|
||||||
|
|
|
||||||
8
authz_media.php
Normal file
8
authz_media.php
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
require_once __DIR__ . '/auth.php';
|
||||||
|
|
||||||
|
require_auth(false);
|
||||||
|
http_response_code(204);
|
||||||
|
exit;
|
||||||
|
|
@ -148,7 +148,20 @@ if [[ -n "$DOCROOT" ]]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Using PHP runner: $PHP_RUNNER"
|
echo "Using PHP runner: $PHP_RUNNER"
|
||||||
echo "Starting frankenphp on :$PORT"
|
export FREAX_DOCROOT="$(pwd)"
|
||||||
|
export FREAX_SITE_ADDR=":$PORT"
|
||||||
|
if [[ -n "${MEDIA_ROOT:-}" && -d "${MEDIA_ROOT}" ]]; then
|
||||||
|
export FREAX_MEDIA_ROOT="$(cd "$MEDIA_ROOT" && pwd -P)"
|
||||||
|
else
|
||||||
|
export FREAX_MEDIA_ROOT="/__FREAX_MEDIA_ROOT_NOT_SET__"
|
||||||
|
fi
|
||||||
|
export FREAX_AUTH_UPSTREAM="127.0.0.1:$PORT"
|
||||||
|
|
||||||
|
echo "Starting frankenphp with Caddyfile"
|
||||||
|
echo "FREAX_SITE_ADDR=$FREAX_SITE_ADDR"
|
||||||
|
echo "FREAX_DOCROOT=$FREAX_DOCROOT"
|
||||||
|
echo "FREAX_MEDIA_ROOT=$FREAX_MEDIA_ROOT"
|
||||||
|
echo "FREAX_AUTH_UPSTREAM=$FREAX_AUTH_UPSTREAM"
|
||||||
echo "MEDIA_USER=$MEDIA_USER"
|
echo "MEDIA_USER=$MEDIA_USER"
|
||||||
echo "MEDIA_PASS_HASH set (bcrypt)"
|
echo "MEDIA_PASS_HASH set (bcrypt)"
|
||||||
if [[ -n "${MEDIA_ROOT:-}" ]]; then
|
if [[ -n "${MEDIA_ROOT:-}" ]]; then
|
||||||
|
|
@ -199,6 +212,6 @@ CACHE_LOOP_PID=$!
|
||||||
|
|
||||||
trap cleanup EXIT INT TERM
|
trap cleanup EXIT INT TERM
|
||||||
|
|
||||||
frankenphp php-server --listen ":$PORT" &
|
frankenphp run --config "$(pwd)/Caddyfile" --adapter caddyfile &
|
||||||
SERVER_PID=$!
|
SERVER_PID=$!
|
||||||
wait "$SERVER_PID"
|
wait "$SERVER_PID"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue