Files
wetterstation/DEPLOY-PRODUCTION.md

4.1 KiB

Production Deployment Guide

Voraussetzungen

  • Docker und Docker Compose auf dem Server installiert
  • Traefik läuft im dockge_default Netzwerk
  • Domain wetter.fuerst-stuttgart.de zeigt auf den Server
  • .env Datei 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:

Traefik übernimmt:

  • Automatisches HTTPS (Let's Encrypt)
  • Routing basierend auf Pfad
  • StripPrefix für /api und /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-Netzwerk
  • wetterstation_internal: Interne Service-Kommunikation

Container:

  • wetterstation_frontend_prod: Nginx + React SPA
  • wetterstation_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"