# Testserver auf Windows Server Shop mit Wasserrad-Design auf einem Windows Server, erreichbar über den vorhandenen nginx-Reverse-Proxy. nginx übernimmt HTTPS und schützt die ganze Seite mit einem Passwort. ``` Browser ──HTTPS──> nginx (Zertifikat, Passwort) ──HTTP──> Windows Server :8080 ──> Docker: app (Apache/PHP) + db (MariaDB) ``` ## 1. Docker auf dem Windows Server **Variante A: Docker Desktop** (bevorzugt) 1. WSL 2 aktivieren (PowerShell als Administrator), danach neu starten: ```powershell wsl --install --no-distribution ``` 2. Docker Desktop installieren, Einstellung „Use the WSL 2 based engine“ aktiv lassen. 3. Unter *Settings → General* „Start Docker Desktop when you sign in“ aktivieren. Hinweis: Docker Desktop ist offiziell für Windows 10/11 gedacht; auf Windows Server 2022/2025 läuft es mit WSL 2 in der Regel, wird aber von Docker nicht unterstützt. Docker Desktop startet erst, wenn sich ein Benutzer anmeldet. Ab 250 Mitarbeitenden oder 10 Mio. $ Umsatz braucht Docker Desktop eine kostenpflichtige Lizenz. **Variante B: Docker Engine direkt in WSL** (falls Docker Desktop nicht startet) ```powershell wsl --install -d Ubuntu-24.04 ``` In Ubuntu: `curl -fsSL https://get.docker.com | sh`, dann die Schritte unten in Ubuntu mit `docker compose …` ausführen (statt des PowerShell-Skripts die Befehle aus `docker-compose.yml` nutzen). ## 2. Code holen ```powershell git clone -b hotel/no-telemetry-docker https://gitea.hephex.de/Daniel/hotel.git C:\hotel cd C:\hotel ``` ## 3. Einrichten (ein Befehl) ```powershell powershell -ExecutionPolicy Bypass -File docker\setup-testserver.ps1 -ShopDomain test.example.de ``` Das Skript - legt `.env` mit zufälligen Passwörtern an (Admin-Login steht dort: `ADMIN_EMAIL` / `ADMIN_PASSWORD`), - baut und startet die Container, - installiert QloApps auf Deutsch (überspringt das, wenn schon installiert, also kein versehentliches Löschen), - ergänzt fehlende deutsche Texte, lädt die Wasserrad-Demo (`-NoDemo` zum Weglassen), - räumt auf: Demo-Kunde gelöscht, API-Schlüssel abgeschaltet, Log-Ordner gesperrt. Ohne Zertifikat im LAN: `-NoSsl`. Port und Adresse der App stehen in `.env` unter `APP_BIND` (Standard `0.0.0.0:8080`). Läuft nginx auf demselben Server: `APP_BIND=127.0.0.1:8080`. Sonst die Windows-Firewall für Port 8080 nur für die IP des nginx-Servers öffnen: ```powershell New-NetFirewallRule -DisplayName "QloApps from nginx" -Direction Inbound -Protocol TCP -LocalPort 8080 -RemoteAddress -Action Allow ``` ## 4. nginx Vorlage: [`nginx-qloapps.conf`](nginx-qloapps.conf). Domain, Zertifikat und `APP_HOST` anpassen, Passwortdatei anlegen: ```bash htpasswd -c /etc/nginx/.htpasswd-hotel tester nginx -t && systemctl reload nginx ``` Wichtig ist `proxy_set_header X-Forwarded-Proto $scheme;` – daran erkennt QloApps HTTPS. Ohne die Zeile gibt es Umleitungsschleifen. ## Betrieb | Aufgabe | Befehl (im Repo-Ordner) | |---|---| | Status | `docker compose -f docker-compose.yml -f docker-compose.server.yml ps` | | Logs | `docker compose -f docker-compose.yml -f docker-compose.server.yml logs -f app` | | Update | `git pull`, dann das Setup-Skript erneut ausführen | | Stoppen | `docker compose -f docker-compose.yml -f docker-compose.server.yml down` (Daten bleiben im Volume `db_data`) | | Backup DB | `docker compose exec db mariadb-dump -uroot -p qloapps > backup.sql` | ## Vor echtem Betrieb Der Testserver ist für Design- und Ablauftests gedacht. Für echte Buchungen fehlen noch: eigene Rechtstexte (Impressum, Datenschutz, AGB), E-Mail-Versand (SMTP), Zahlungsart, regelmäßige Backups und QloApps-Updates (der automatische Update-Hinweis ist abgeschaltet).