Zum Hauptinhalt springen

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).

Hinweis

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)

VariableBeschreibung
DOMAINÖffentlich bediente Domain (z. B. app.mein-unternehmen.com)
ACME_EMAILLet's-Encrypt-Kontakt-E-Mail
APP_IMAGEBereitzustellendes 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_MONGO verwendet den Benutzer/das Passwort aus .env_mongo, mit dem Host mongo;
  • SPRING_REDIS_PASSWORD ist identisch mit REDIS_PASSWORD;
  • BASE_URL entspricht https:// + 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/_maintenance aufrufen (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:

  1. Die Domain löst tatsächlich auf den Server auf (dig +short IHRE_DOMAIN);
  2. die Ports 80 und 443 sind aus dem Internet erreichbar;
  3. 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

SymptomAnsatz
404 auf /DOMAIN falsch, oder Anwendung nicht gestartet (siehe Logs)
502 / 503Die Anwendung lauscht noch nicht, oder Fehler beim Start
Ungültiges ZertifikatDNS, Ports 80/443, ACME-Logs (siehe oben)
/_maintenance in AuthentifizierungsschleifeZugangsdaten über setup-compose.sh neu generieren
Redis-AuthentifizierungsfehlerSPRING_REDIS_PASSWORDREDIS_PASSWORD
Mongo-AuthentifizierungsfehlerURL_MONGO inkonsistent mit .env_mongo

Für die Produktionsumgebung mit Skalierung und Hochverfügbarkeit siehe das Format Kubernetes.