Files
hotel/docker/server-entrypoint.sh
DanielS 43a0b96fdf Test server: code in a Docker volume instead of a C:\ bind mount
With Docker Desktop on Windows the bind-mounted C:\hotel made every page
take ~5-7 s; with the code on the Linux filesystem it takes ~0.1 s.

- docker/Dockerfile.server bakes the repo into the image (.dockerignore
  keeps .env, settings.inc.php and caches out)
- docker/server-entrypoint.sh copies the code into the app_code volume on
  start: pass 1 updates code but skips runtime folders (uploads, generated
  images, caches, downloaded translations, settings.inc.php), pass 2 adds
  missing files without overwriting
- docker/php-server.ini: OPcache without timestamp checks, larger
  realpath cache
- setup script waits for the container and checks the install marker
  inside the volume; .gitattributes keeps *.sh LF on Windows checkouts
- TESTSERVER.md: speed section and one-time switch from the first version

Tested with a fresh stack: full install + demo + hardening, re-run keeps
DB/uploads, rebuilt image delivers code changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 22:40:07 +01:00

27 lines
1.2 KiB
Bash

#!/bin/sh
# Copy the code baked into the image into the web root volume, then start Apache.
# pass 1: update code; runtime folders (uploads, generated images, caches, downloaded
# translations, config/settings.inc.php) are skipped
# pass 2: add any file that is still missing (first start, new defaults), never overwrite
set -e
SRC=/opt/qloapps-src/
DST=/var/www/html/
echo "server-entrypoint: updating code in $DST"
rsync -a --chown=www-data:www-data \
--exclude='/.git' --exclude='/.env' --exclude='/.htaccess' \
--exclude='/config/settings.inc.php' --exclude='/config/xml/' \
--exclude='/img/' --exclude='/upload/' --exclude='/download/' \
--exclude='/cache/' --exclude='/log/' --exclude='/translations/' --exclude='/mails/' \
--exclude='/modules/*/translations/' --exclude='/modules/*/views/img/' --exclude='/modules/*/logs/' \
--exclude='/themes/*/lang/' --exclude='/themes/*/cache/' --exclude='/themes/*/modules/*/translations/' \
"$SRC" "$DST"
echo "server-entrypoint: adding missing files"
rsync -a --ignore-existing --chown=www-data:www-data \
--exclude='/.git' --exclude='/.env' --exclude='/config/settings.inc.php' \
"$SRC" "$DST"
exec docker-php-entrypoint "$@"