4.1 KiB
4.1 KiB
Production Deployment Guide
Voraussetzungen
- Docker und Docker Compose auf dem Server installiert
- Traefik läuft im
dockge_defaultNetzwerk - Domain
wetter.fuerst-stuttgart.dezeigt auf den Server .envDatei mit Datenbank-Credentials
1. Images bauen und pushen
Lokal auf dem Entwicklungsrechner:
# Alle Images bauen und zur Registry pushen
./push-images.sh
Dieser Befehl:
- Baut
wetterstation-collector - Baut
wetterstation-api - Baut
wetterstation-frontend - Pusht alle Images zu
docker.citysensor.de
2. Server vorbereiten
Auf dem Production-Server:
# Projekt-Verzeichnis erstellen
mkdir -p ~/wetterstation
cd ~/wetterstation
# docker-compose.prod.yml hochladen
# .env Datei erstellen oder hochladen
Beispiel .env für Production:
# Datenbank
DB_NAME=wetterstation
DB_USER=wetterstation_user
DB_PASSWORD=<sicheres-passwort>
DB_HOST=postgres
DB_PORT=5432
# Collector
COLLECTOR_PORT=8001
# Optional: PostgreSQL custom port
# DB_PORT=5432
3. Deployment starten
# Images von Registry pullen
docker-compose -f docker-compose.prod.yml pull
# Services starten
docker-compose -f docker-compose.prod.yml up -d
# Logs prüfen
docker-compose -f docker-compose.prod.yml logs -f
4. Erreichbarkeit
Nach erfolgreichem Start ist die Wetterstation erreichbar unter:
- Frontend: https://wetter.fuerst-stuttgart.de/
- API: https://wetter.fuerst-stuttgart.de/api/health
- Collector: https://wetter.fuerst-stuttgart.de/collector/health
Traefik übernimmt:
- Automatisches HTTPS (Let's Encrypt)
- Routing basierend auf Pfad
- StripPrefix für
/apiund/collector
5. Updates deployen
Bei Code-Änderungen:
# Lokal: Images neu bauen und pushen
./push-images.sh
# Server: Neue Images pullen und Container neu starten
ssh user@server
cd ~/wetterstation
docker-compose -f docker-compose.prod.yml pull
docker-compose -f docker-compose.prod.yml up -d
6. Nützliche Befehle
# Status prüfen
docker-compose -f docker-compose.prod.yml ps
# Logs einzelner Services
docker-compose -f docker-compose.prod.yml logs -f frontend
docker-compose -f docker-compose.prod.yml logs -f api
docker-compose -f docker-compose.prod.yml logs -f collector
docker-compose -f docker-compose.prod.yml logs -f postgres
# Service neu starten
docker-compose -f docker-compose.prod.yml restart api
# Alle Services stoppen
docker-compose -f docker-compose.prod.yml down
# Services stoppen und Volumes löschen (⚠️ löscht Daten!)
docker-compose -f docker-compose.prod.yml down -v
7. Datenbank-Backup
# Backup erstellen
docker exec wetterstation_db_prod pg_dump -U wetterstation_user wetterstation > backup_$(date +%Y%m%d_%H%M%S).sql
# Backup wiederherstellen
docker exec -i wetterstation_db_prod psql -U wetterstation_user wetterstation < backup.sql
Architektur
Internet
↓
Traefik (dockge_default)
↓
├─→ Frontend (nginx) → API (intern)
├─→ API (FastAPI)
└─→ Collector (FastAPI)
↓
PostgreSQL (intern)
Netzwerke:
dockge_default(external): Traefik-Netzwerkwetterstation_internal: Interne Service-Kommunikation
Container:
wetterstation_frontend_prod: Nginx + React SPAwetterstation_api_prod: FastAPI (Weather Data API)wetterstation_collector_prod: FastAPI (Data Collection)wetterstation_db_prod: PostgreSQL 16
Troubleshooting
SSL-Zertifikat wird nicht erstellt
Prüfe:
- DNS zeigt auf Server:
dig wetter.fuerst-stuttgart.de - Traefik läuft:
docker ps | grep traefik - Port 80/443 offen:
netstat -tulpn | grep -E ':(80|443)'
API nicht erreichbar
# Prüfe ob Container läuft
docker ps | grep wetterstation_api_prod
# Prüfe Logs
docker logs wetterstation_api_prod
# Teste intern
docker exec wetterstation_api_prod curl localhost:8000/health
Datenbank-Verbindungsfehler
# Prüfe ob DB läuft
docker ps | grep wetterstation_db_prod
# Prüfe DB-Logs
docker logs wetterstation_db_prod
# Teste Verbindung
docker exec wetterstation_db_prod psql -U wetterstation_user -d wetterstation -c "SELECT 1"