Reviewed-on: sandrodach/webhosting#1
PHP 8.5 Apache Docker-Umgebung
Vorkonfigurierte Docker-Umgebung auf Basis von php:8.5-apache inklusive selbstsigniertem SSL-Zertifikat, optimiertem OPcache und dynamischem Mail-Relay über msmtp (konfigurierbar per .env).
Enthaltene Komponenten & Features
- Webserver: Apache 2 mit aktiviertem
mod_rewriteundmod_ssl - PHP-Version: PHP 8.5
- Installierte PHP-Extensions:
mysqli(MySQL-Datenbanktreiber)gd(inkl. WebP- und PNG-Support)imagick(ImageMagick via PECL)intl,zip,exifopcache(im PHP-8.5-Kern integriert und über/usr/local/etc/php/conf.d/opcache.inivorkonfiguriert)
- Mail-Versand (
msmtp): Ersetzt das veraltetessmtp. Die Konfiguration wird beim Container-Start automatisch aus den Umgebungsvariablen der.env-Datei generiert.
Projektstruktur
├── docker-compose.yaml
├── dockerfile
│ ├── 000-default.conf
│ ├── apache2.conf
│ ├── Dockerfile
│ └── php.ini
└── README.md
Hinweis: Die Konfigurationsdateien (
php.ini,apache2.conf,000-default.conf) müssen im Ordnerdockerfile/liegen, damit der Build-Kontext beim Kopieren (COPY) darauf zugreifen kann. In derdefault/docker-compose.yamlverweistbuild: ../dockerfileauf dieses Verzeichnis.
Installation & Erster Start
1. Repository klonen
git clone <REPOSITORY-URL>
cd <REPOSITORY-ORDNER>
2. .env konfigurieren (Nur nötig wenn der Server E-Mails versenden soll!)
Passe die Datei default/.env mit deinen SMTP-Zugangsdaten an:
SMTP_HOST=smtp.dein-provider.de
SMTP_PORT=587
SMTP_USER=dein-benutzername@example.com
SMTP_PASS='DeinGeheimesPasswort'
SMTP_FROM=noreply@example.com
SMTP_TLS=on
SMTP_STARTTLS=on
(Bei Nutzung von Port 465 mit implizitem TLS muss SMTP_STARTTLS=off gesetzt werden).
3. Container bauen und starten
docker compose up -d --build
Update
Je nachdem, was aktualisiert werden soll, gibt es drei Wege:
1. Nur .env oder docker-compose.yaml geändert (z.B. neues SMTP-Passwort)
Da msmtp die Konfiguration bei jedem Container-Start neu schreibt, ist kein Neubau des Images nötig. Es reicht, den Container neu zu erstellen:
docker compose up -d
2. Änderungen aus dem Git-Repository übernehmen (Dockerfile oder Configs)
Wenn Änderungen am Dockerfile, der php.ini oder den Apache-Configs über Git heruntergeladen wurden:
git pull
docker compose up -d --build
3. PHP-Basis-Image & Systempakete aktualisieren (Sicherheitsupdates)
Docker nutzt standardmäßig den lokalen Cache für FROM php:8.5-apache und apt-get. Um die neueste Patch-Version von PHP 8.5 und aktuelle Debian-Pakete zu erzwingen:
docker compose build --pull --no-cache
docker compose up -d
Optional – Alte, nicht mehr genutzte Docker-Images nach einem Update aufräumen:
docker image prune -f
E-Mail-Versand testen & Logs prüfen
Um zu testen, ob der Mail-Versand über msmtp aus dem laufenden Container heraus funktioniert:
1. Test-Mail über die PHP-CLI senden:
docker compose exec php-apache-environment php -r "mail('empfaenger@example.com', 'Docker Test', 'Mailversand funktioniert!');"
2. msmtp-Logbuch auslesen:
docker compose exec php-apache-environment cat /var/log/msmtp.log
Endet der Log-Eintrag mit exitcode=EX_OK, wurde die E-Mail erfolgreich vom SMTP-Server angenommen.