build: Docker-Setup und Apache-Konfiguration

Apache mit mod_php statt PHP-FPM plus Nginx: dadurch verhalten sich
Docker und klassisches Shared Hosting gleich, es gilt dieselbe
.htaccess. MariaDB liegt hinter einem Compose-Profil.

Die Entwicklungspakete bleiben im Image installiert - beim Aufraeumen
mit apt-get purge --auto-remove verschwindet sonst auch die von imagick
benoetigte Laufzeitbibliothek.

Die .htaccess im Stammverzeichnis wird nur gebraucht, wenn der Webroot
nicht auf public/ gelegt werden kann; sie sperrt dann alle uebrigen
Verzeichnisse.
This commit is contained in:
2026-08-03 18:11:40 +02:00
parent 8a7939bee2
commit f4aece9557
5 changed files with 258 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
#!/bin/sh
# -------------------------------------------------------------
# Startskript des Containers.
# Sorgt dafuer, dass die Datenverzeichnisse existieren und dem
# Webserver gehoeren - auch wenn ein Volume gemountet wurde.
# -------------------------------------------------------------
set -e
mkdir -p /var/www/html/data/uploads
if [ "$(id -u)" = "0" ]; then
chown -R www-data:www-data /var/www/html/data 2>/dev/null || true
fi
# Wartet kurz auf die Datenbank, falls MySQL/MariaDB genutzt wird.
if [ "${DB_DRIVER}" = "mysql" ] && [ -n "${DB_HOST}" ]; then
echo "Warte auf Datenbank ${DB_HOST}:${DB_PORT:-3306} ..."
i=0
while [ "$i" -lt 30 ]; do
if php -r '
$host = getenv("DB_HOST"); $port = (int) (getenv("DB_PORT") ?: 3306);
$fp = @fsockopen($host, $port, $errno, $errstr, 1);
exit($fp === false ? 1 : 0);
'; then
echo "Datenbank erreichbar."
break
fi
i=$((i + 1))
sleep 1
done
fi
exec "$@"
+32
View File
@@ -0,0 +1,32 @@
; -------------------------------------------------------------
; urlshort-qr-gen – PHP-Einstellungen im Container
; -------------------------------------------------------------
expose_php = Off
; Logos duerfen bis 2 MB gross sein (siehe UPLOAD_MAX_BYTES).
upload_max_filesize = 4M
post_max_size = 8M
memory_limit = 256M
max_execution_time = 30
; Fehler ins Log, nicht in die Ausgabe.
display_errors = Off
log_errors = On
error_log = /dev/stderr
; Sessions
session.cookie_httponly = On
session.cookie_samesite = "Lax"
session.use_strict_mode = On
session.use_only_cookies = On
; Zeitzone (kann per APP_TIMEZONE ueberschrieben werden)
date.timezone = Europe/Berlin
; OPcache fuer eine schnelle Weiterleitung
opcache.enable = 1
opcache.memory_consumption = 96
opcache.max_accelerated_files = 4000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 15