Files
webhosting/README.md
T
2026-10-21 21:08:48 +02:00

112 lines
3.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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_rewrite` und `mod_ssl`
* **PHP-Version:** PHP 8.5
* **Installierte PHP-Extensions:**
* `mysqli` (MySQL-Datenbanktreiber)
* `gd` (inkl. WebP- und PNG-Support)
* `imagick` (ImageMagick via PECL)
* `intl`, `zip`, `exif`
* `opcache` (im PHP-8.5-Kern integriert und über `/usr/local/etc/php/conf.d/opcache.ini` vorkonfiguriert)
* **Mail-Versand (`msmtp`):** Ersetzt das veraltete `ssmtp`. Die Konfiguration wird beim Container-Start automatisch aus den Umgebungsvariablen der `.env`-Datei generiert.
---
## Projektstruktur
```text
├── 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 Ordner `dockerfile/` liegen, damit der Build-Kontext beim Kopieren (`COPY`) darauf zugreifen kann. In der `default/docker-compose.yaml` verweist `build: ../dockerfile` auf dieses Verzeichnis.
---
## Installation & Erster Start
### 1. Repository klonen
```bash
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:
```env
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
```bash
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:
```bash
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:
```bash
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:
```bash
docker compose build --pull --no-cache
docker compose up -d
```
*Optional – Alte, nicht mehr genutzte Docker-Images nach einem Update aufräumen:*
```bash
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:**
```bash
docker compose exec php-apache-environment php -r "mail('empfaenger@example.com', 'Docker Test', 'Mailversand funktioniert!');"
```
**2. msmtp-Logbuch auslesen:**
```bash
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.