From 43b97024c97dd2c13c70ad5ab8df77a35cc4acd0 Mon Sep 17 00:00:00 2001 From: Daniel Neto Date: Wed, 14 May 2025 21:30:56 -0300 Subject: [PATCH] Refactor PHP configuration script and optimize Memcached settings in Docker setup --- Dockerfile | 45 ++++++++++++++++++++++++++++--------- docker-compose.yml | 17 +++++++++----- view/managerVideos_body.php | 2 +- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index d251bc0370..8a97671d46 100644 --- a/Dockerfile +++ b/Dockerfile @@ -127,17 +127,40 @@ RUN dos2unix /usr/local/bin/docker-entrypoint && \ chmod 755 /usr/local/bin/docker-entrypoint && \ chmod +x /usr/local/bin/docker-entrypoint -# Create a script to handle PHP configuration -RUN echo '#!/bin/sh' > /usr/local/bin/configure-php.sh && \ - echo 'PHP_VERSION=$(php -r "echo PHP_MAJOR_VERSION . \".\" . PHP_MINOR_VERSION;")' >> /usr/local/bin/configure-php.sh && \ - echo 'sed -i "s/^post_max_size.*$/post_max_size = 10G/" /etc/php/${PHP_VERSION}/apache2/php.ini' >> /usr/local/bin/configure-php.sh && \ - echo 'sed -i "s/^upload_max_filesize.*$/upload_max_filesize = 10G/" /etc/php/${PHP_VERSION}/apache2/php.ini' >> /usr/local/bin/configure-php.sh && \ - echo 'sed -i "s/^max_execution_time.*$/max_execution_time = 7200/" /etc/php/${PHP_VERSION}/apache2/php.ini' >> /usr/local/bin/configure-php.sh && \ - echo 'sed -i "s/^memory_limit.*$/memory_limit = 512M/" /etc/php/${PHP_VERSION}/apache2/php.ini' >> /usr/local/bin/configure-php.sh && \ - echo 'echo "error_log = /dev/stdout" >> /etc/php/${PHP_VERSION}/apache2/php.ini' >> /usr/local/bin/configure-php.sh && \ - echo 'echo "session.save_handler = memcached" >> /etc/php/${PHP_VERSION}/apache2/php.ini' >> /usr/local/bin/configure-php.sh && \ - echo 'echo "session.save_path = \"memcached:11211\"" >> /etc/php/${PHP_VERSION}/apache2/php.ini' >> /usr/local/bin/configure-php.sh && \ - chmod +x /usr/local/bin/configure-php.sh +# 🛠️ Improved RUN block — creates a single script and tunes PHP-Memcached sessions +RUN cat >/usr/local/bin/configure-php.sh <<'EOS' +#!/bin/sh +# Detect active PHP version (e.g., 8.2) +PHP_VERSION="$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')" +INI="/etc/php/${PHP_VERSION}/apache2/php.ini" + +# ── Upload / execution limits ───────────────────────────────────────────── +sed -i 's/^post_max_size\s*=.*/post_max_size = 10G/' "$INI" +sed -i 's/^upload_max_filesize\s*=.*/upload_max_filesize = 10G/' "$INI" +sed -i 's/^max_execution_time\s*=.*/max_execution_time = 7200/' "$INI" +sed -i 's/^memory_limit\s*=.*/memory_limit = 512M/' "$INI" + +# Log PHP errors to STDOUT (visible via `docker logs`) +echo "error_log = /dev/stdout" >> "$INI" + +# ── PHP sessions stored in Memcached ───────────────────────────────────── +cat >> "$INI" <<'EOF' +; ---------- PHP sessions via Memcached ---------- +session.save_handler = memcached +session.save_path = "memcached:11211?persistent=1&timeout=2&retry_interval=5" + +; Lightweight locking to avoid race conditions without freezing the site +memcached.sess_locking = 1 +memcached.sess_lock_expire = 15 ; release lock after 15 s +memcached.sess_lock_wait_min = 1000 ; 1 ms between attempts +memcached.sess_lock_wait_max = 50000 ; up to 50 ms back-off +memcached.sess_consistent_hash = On +memcached.sess_remove_failed_servers = 1 +EOF +EOS + +RUN chmod +x /usr/local/bin/configure-php.sh + # Run the PHP configuration script RUN /usr/local/bin/configure-php.sh diff --git a/docker-compose.yml b/docker-compose.yml index 6199d3e099..391096210b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -188,25 +188,32 @@ services: networks: - app_net + # Optimised Memcached service (docker-compose.yml) memcached: image: memcached:alpine - restart: "unless-stopped" + restart: unless-stopped + # ── Runtime flags ──────────────────────────────────────────────── + # -m 512 → 512 MiB cache (enough for large PHP sessions) + # -c 2048 → 2 048 concurrent connections + # -t ${NPROC:-4} → one worker thread per vCPU (default 4) + # -R 200 → 200 requests per event loop → lower latency command: > - sh -c "memcached -m 128 -c 1024 -t ${NPROC:-2} -vv" + memcached -m 512 -c 2048 -t ${NPROC:-4} -R 200 ports: - "${MEMCACHE_PORT:-11211}:11211" deploy: resources: limits: cpus: '1' - memory: "4G" + memory: "4G" # hard limit (container OOM-kills above this) reservations: cpus: '0.5' - memory: '512M' + memory: '1G' # guaranteed reservation (was 512 M) networks: - app_net environment: - - NPROC=${NPROC:-2} + NPROC: ${NPROC:-4} + networks: app_net: diff --git a/view/managerVideos_body.php b/view/managerVideos_body.php index 34baeff620..a40932de09 100644 --- a/view/managerVideos_body.php +++ b/view/managerVideos_body.php @@ -1626,7 +1626,7 @@ if (empty($advancedCustom->disableHTMLDescription)) { $("#swapBtn").click(function() { var vals = getSelectedVideos(); if (vals.length !== 2) { - avideoAlert("", "", "error"); + avideoAlertError(__("You MUST select 2 videos to swap")); return false; } modal.showPleaseWait();