Beispiel: Docker-Compose-Bereitstellung
Diese Seite zeigt beispielhaft eine On-Premise-Bereitstellung von FoxPlan auf einem einzelnen Server mit Docker Compose und Traefik als Reverse Proxy (TLS-Terminierung und automatische Let's-Encrypt-Zertifikate).
Die genauen Dateien (docker-compose.yml, Skripte, Traefik-Konfiguration) werden mit dem On-Premise-Bereitstellungspaket geliefert. Die folgenden Auszüge dienen dem Verständnis des Gesamtaufbaus.
Architektur
Internet (DNS : DOMAIN → ce serveur)
│ 80 / 443
▼
┌────────┐ TLS Let's Encrypt (ACME)
│ Traefik│ redirection 80 → 443
└───┬────┘
┌─────────────────┼───────────────────────────┐
▼ ▼ ▼ ▼
/ (app:5000) /docs (docs:8080) /_maintenance (bascule)
product-server docs maintenance-toggle maintenance
│
├──► mongo (réseau interne)
└──► redis (réseau interne)
Zwei Varianten werden geliefert:
docker-compose.yml— eine Instanz der Anwendung;docker-compose-scale.yml— mehrere Instanzen, deren Last Traefik automatisch verteilt.
Voraussetzungen
- Ein Linux-Server mit Docker und Docker Compose v2;
- ein Domainname, dessen DNS-Eintrag auf den Server zeigt;
- die Ports 80 und 443 aus dem Internet erreichbar (zwingend für die ACME-Challenge);
- Zugriff auf die Image-Registry von FoxPlan und Ihre Lizenz.
Konfiguration
1. Erste Vorbereitung
Ein Skript bereitet die Umgebung vor (Datei .env, Zertifikatsspeicher, Zugangsdaten des Wartungspanels):
MAINT_USER=foxops MAINT_PASS='ein_starkes_passwort' ./setup-compose.sh
2. Infrastrukturvariablen (.env)
| Variable | Beschreibung |
|---|---|
DOMAIN | Öffentlich bediente Domain (z. B. app.mein-unternehmen.com) |
ACME_EMAIL | Let's-Encrypt-Kontakt-E-Mail |
APP_IMAGE | Bereitzustellendes Anwendungs-Image (Registry/Tag) |
3. Anwendungsgeheimnisse
Drei Secrets-Dateien werden aus ihren .example-Vorlagen erstellt und anschließend befüllt:
cp .env_application.example .env_application # Variablen der App (DB, OAuth, S3, JWT…)
cp .env_mongo.example .env_mongo # MongoDB-Zugangsdaten
cp .env_redis.example .env_redis # Redis-Passwort
Zu beachtende Konsistenzen:
URL_MONGOverwendet den Benutzer/das Passwort aus.env_mongo, mit dem Hostmongo;SPRING_REDIS_PASSWORDist identisch mitREDIS_PASSWORD;BASE_URLentsprichthttps://+DOMAIN.
Start
# Einfache Variante (1 Instanz)
docker compose up -d --build
# Skalierte Variante (mehrere Instanzen)
docker compose -f docker-compose-scale.yml up -d --build
docker compose -f docker-compose-scale.yml up -d --scale product-server=4
Beim ersten Start bezieht Traefik das Zertifikat automatisch bei Let's Encrypt. Überprüfung:
docker compose logs -f traefik # Zertifikatsbezug verfolgen
curl -I https://IHRE_DOMAIN/ # muss 200 mit gültigem Zertifikat liefern
curl -I https://IHRE_DOMAIN/docs/
Wartungsmodus
Die Website kann auf eine Wartungsseite umgeschaltet werden (die Dokumentation /docs bleibt erreichbar).
- Über den Browser:
https://IHRE_DOMAIN/_maintenanceaufrufen (passwortgeschützt), dann Aktivieren / Wiederherstellen. - Über die Befehlszeile:
./compose-maintenance.sh on # aktiviert die Wartung
./compose-maintenance.sh off # stellt die Anwendung wieder her
./compose-maintenance.sh status # aktueller Zustand
Die Umschaltung erfolgt sofort und startet keinen Container neu (Hot-Reload von Traefik).
TLS-Zertifikate (Let's Encrypt)
- Werden von Traefik bezogen und automatisch erneuert (HTTP-01-Challenge);
- keine manuelle Aktion für die Erneuerung erforderlich.
Falls kein Zertifikat ausgestellt wird, in dieser Reihenfolge prüfen:
- Die Domain löst tatsächlich auf den Server auf (
dig +short IHRE_DOMAIN); - die Ports 80 und 443 sind aus dem Internet erreichbar;
- die Logs:
docker compose logs traefik | grep -i acme.
Laufender Betrieb
docker compose ps # Zustand der Dienste
docker compose logs -f product-server # Logs der Anwendung
docker compose pull product-server && docker compose up -d # Update
docker compose down # Stopp (Daten bleiben erhalten)
Die MongoDB- und Redis-Daten werden in benannten Volumes gespeichert, die Stopps/Neustarts überdauern.
Fehlerbehebung
| Symptom | Ansatz |
|---|---|
404 auf / | DOMAIN falsch, oder Anwendung nicht gestartet (siehe Logs) |
| 502 / 503 | Die Anwendung lauscht noch nicht, oder Fehler beim Start |
| Ungültiges Zertifikat | DNS, Ports 80/443, ACME-Logs (siehe oben) |
/_maintenance in Authentifizierungsschleife | Zugangsdaten über setup-compose.sh neu generieren |
| Redis-Authentifizierungsfehler | SPRING_REDIS_PASSWORD ≠ REDIS_PASSWORD |
| Mongo-Authentifizierungsfehler | URL_MONGO inkonsistent mit .env_mongo |
Für die Produktionsumgebung mit Skalierung und Hochverfügbarkeit siehe das Format Kubernetes.