5.0 KiB
5.0 KiB
🐳 Container-Betrieb - Stöberhunde App
Schnellstart mit Podman/Docker
Voraussetzungen
- Podman oder Docker installiert
- Podman Compose oder Docker Compose installiert
1. Umgebungsvariablen konfigurieren
Erstelle eine .env-Datei im Projektroot:
cp .env.example .env
WICHTIG: Ändere den JWT_SECRET in der .env-Datei!
JWT_SECRET=dein-sehr-sicheres-geheimnis-mit-mindestens-32-zeichen
2. Container starten
Mit Podman:
podman-compose up -d
Mit Docker:
docker-compose up -d
3. Logs prüfen
# Alle Services
podman-compose logs -f
# Nur Backend
podman-compose logs -f backend
# Nur Frontend
podman-compose logs -f frontend
4. App öffnen
- Frontend: http://localhost:8080
- Backend API: http://localhost:5000
- MongoDB: localhost:27017
5. Admin-Zugang
- Username:
admin - Password:
password(oderadmin123wenn Seeding durchgeführt)
⚠️ WICHTIG: Ändere das Admin-Passwort nach dem ersten Login!
Services
| Service | Container Name | Port | Beschreibung |
|---|---|---|---|
| Frontend | stoeberhunde-frontend | 8080 | React App mit Nginx |
| Backend | stoeberhunde-backend | 5000 | Node.js Express API |
| MongoDB | stoeberhunde-mongo | 27017 | MongoDB Datenbank |
Nützliche Befehle
Container stoppen
podman-compose down
Container neu bauen (nach Code-Änderungen)
podman-compose up -d --build
Container und Daten löschen
podman-compose down -v
In Container einsteigen
# Backend
podman exec -it stoeberhunde-backend sh
# MongoDB
podman exec -it stoeberhunde-mongo mongosh
Datenbank seeden (manuell)
podman exec -it stoeberhunde-backend node seed.js
Health Checks prüfen
# Backend
curl http://localhost:5000/health
# Frontend
curl http://localhost:8080/health
Produktions-Deployment
1. Sicherheit
Erforderliche Änderungen vor Production:
-
JWT Secret ändern (in
.env):# Generiere ein sicheres Secret openssl rand -base64 32 -
Admin-Passwort ändern nach erstem Login
-
CORS Origin anpassen (in
.env):CORS_ORIGIN=https://yourdomain.com -
MongoDB absichern:
- Authentifizierung aktivieren
- Backup-Strategie einrichten
- Nicht öffentlich exponieren
2. Frontend API-URL
Im Frontend wird die API-URL zur Build-Zeit gesetzt. Für Production:
-
Passe
podman-compose.ymlan:frontend: build: args: - REACT_APP_API_URL=https://api.yourdomain.com -
Rebuild erforderlich:
podman-compose up -d --build frontend
3. Reverse Proxy (empfohlen)
Für Production solltest du einen Reverse Proxy (z.B. Traefik, Nginx) vorschalten:
- HTTPS/TLS-Terminierung
- Rate Limiting
- DDoS-Schutz
4. Volumes sichern
# Liste Volumes
podman volume ls
# Backup erstellen
podman run --rm -v stoeberhunde_mongo-data:/data -v $(pwd):/backup alpine tar czf /backup/mongo-backup-$(date +%Y%m%d).tar.gz -C /data .
Troubleshooting
Backend startet nicht
# Logs checken
podman-compose logs backend
# Häufige Probleme:
# - MongoDB nicht erreichbar → warte 30s nach Start
# - JWT_SECRET fehlt → .env prüfen
Frontend zeigt API-Fehler
# Prüfe ob Backend läuft
curl http://localhost:5000/health
# Prüfe Browser-Konsole auf CORS-Fehler
# → CORS_ORIGIN in .env anpassen
Datenbank leer
# Seed-Skript ausführen
podman exec -it stoeberhunde-backend node seed.js
Port bereits belegt
# Andere Ports in podman-compose.yml verwenden:
# ports:
# - "8081:80" # statt 8080
Performance-Optimierung
Multi-Stage Builds
Beide Dockerfiles nutzen bereits Multi-Stage Builds für minimale Image-Größen.
Image-Größen prüfen
podman images | grep stoeberhunde
Erwartete Größen:
- Backend: ~180 MB (Node Alpine)
- Frontend: ~45 MB (Nginx Alpine)
- MongoDB: ~750 MB
Entwicklung mit Containern
Hot Reload für Backend
# In podman-compose.yml anpassen:
backend:
volumes:
- ./backend:/app
- /app/node_modules
command: npm run dev
Frontend Development Mode
Für Entwicklung besser lokaler Dev-Server mit npm start, nicht Container.
Monitoring
Container-Status
podman-compose ps
Ressourcen-Verbrauch
podman stats
Health Check Status
# Alle Services
for svc in backend frontend mongo; do
echo "=== $svc ==="
podman inspect stoeberhunde-$svc | grep -A5 Health
done
Migration von lokalem Setup
Wenn du von lokalem MongoDB zu Container wechselst:
# 1. Export aus lokalem MongoDB
mongodump --db stoeberhunde --out ./dump
# 2. Import in Container
podman exec -i stoeberhunde-mongo mongorestore --drop /dump