jagd-apps/nachsuche/CONTAINER.md

5.1 KiB

🐳 Container-Betrieb - Tracking Leaders 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

5. Admin-Zugang

  • Username: admin
  • Password: password (oder admin123 wenn Seeding durchgeführt)

⚠️ WICHTIG: Ändere das Admin-Passwort nach dem ersten Login!

Services

Service Container Name Port Beschreibung
Frontend tracking-leaders-frontend 8080 React App mit Nginx
Backend tracking-leaders-backend 5000 Node.js Express API
MongoDB tracking-leaders-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 tracking-leaders-backend sh

# MongoDB
podman exec -it tracking-leaders-mongo mongosh

Datenbank seeden (manuell)

podman exec -it tracking-leaders-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:

  1. JWT Secret ändern (in .env):

    # Generiere ein sicheres Secret
    openssl rand -base64 32
    
  2. Admin-Passwort ändern nach erstem Login

  3. CORS Origin anpassen (in .env):

    CORS_ORIGIN=https://yourdomain.com
    
  4. 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:

  1. Passe podman-compose.yml an:

    frontend:
      build:
        args:
          - REACT_APP_API_URL=https://api.yourdomain.com
    
  2. 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 tracking-leaders_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 tracking-leaders-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 tracking-leaders

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 tracking-leaders-$svc | grep -A5 Health
done

Migration von lokalem Setup

Wenn du von lokalem MongoDB zu Container wechselst:

# 1. Export aus lokalem MongoDB
mongodump --db tracking-leaders --out ./dump

# 2. Import in Container
podman exec -i tracking-leaders-mongo mongorestore --drop /dump

Weitere Informationen