neues docker-compose für Profuktion und Anpassungen

This commit is contained in:
rxf
2026-02-10 20:22:44 +01:00
parent f32e472ea3
commit 4fde7ed46a
4 changed files with 292 additions and 3 deletions

185
DEPLOY-PRODUCTION.md Normal file
View File

@@ -0,0 +1,185 @@
# 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:
```bash
# 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:
```bash
# Projekt-Verzeichnis erstellen
mkdir -p ~/wetterstation
cd ~/wetterstation
# docker-compose.prod.yml hochladen
# .env Datei erstellen oder hochladen
```
### Beispiel .env für Production:
```env
# 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
```bash
# 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 `/api` und `/collector`
## 5. Updates deployen
Bei Code-Änderungen:
```bash
# 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
```bash
# 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
```bash
# 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
```bash
# 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
```bash
# 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"
```