1 Deployment
mrrmlab Wiki edited this page 2026-05-02 18:03:36 +02:00

Deployment

Produktions-Stack

Internet
  └── Traefik (Reverse Proxy, TLS via Let's Encrypt)
        ├── app.mrrm.de      → web (nginx:alpine)
        ├── api.mrrm.de      → api (node:alpine)
        ├── fdroid.mrrm.de   → fdroid-repo (nginx:alpine)
        └── (OCR intern)     → ocr (python:slim)

mrrmlabapp-internal (Docker Network)
  ├── api
  ├── web
  ├── ocr
  ├── mrrmlabapp-db (PostgreSQL 17)
  └── fdroid-repo

Docker-Compose (Produktion)

Datei: deploy/docker-compose.yml
Deployed auf: /opt/server-stack/mrrmlabapp/docker-compose.yml

# Manuell deployen
cd /opt/server-stack/mrrmlabapp
docker compose --env-file ../.env pull
docker compose --env-file ../.env up -d

Umgebungsvariablen (Produktion)

Datei: /opt/server-stack/.env

MRRMLABAPP_DB_PASSWORD=<starkes-passwort>
MRRMLABAPP_KC_AUDIENCE=mrrmlab-api

API bekommt zusätzlich via docker-compose:

DATABASE_URL=postgresql://mrrmlab:${MRRMLABAPP_DB_PASSWORD}@mrrmlabapp-db:5432/mrrmlab
KC_ISSUER=https://auth.mrrm.de/realms/mmlab
KC_JWKS_URI=https://auth.mrrm.de/realms/mmlab/protocol/openid-connect/certs
KC_AUDIENCE=${MRRMLABAPP_KC_AUDIENCE}
OCR_SERVICE_URL=http://ocr:8000
CORS_ORIGINS=https://app.mrrm.de

Auto-Deployment via CI

Nach jedem Push auf main läuft automatisch:

  1. publish-api/web/ocr → neue Docker-Images werden gebaut
  2. deploy-Pipeline:
    • Lädt aktuelle docker-compose.yml auf den Server
    • Führt docker compose pull && up -d aus

Dev-Umgebung

Separate publish-web-dev + deploy-dev Pipelines für dev.app.mrrm.de und dev.api.mrrm.de.

Logs

# Auf Produktions-Server
docker compose logs -f api
docker compose logs -f web
docker compose logs -f ocr

# Einzelner Service
docker logs mrrmlabapp-api-1 --tail=100 -f

Datenbank-Backup

# Manuell
docker exec mrrmlabapp-mrrmlabapp-db-1 \
  pg_dump -U mrrmlab mrrmlab > backup-$(date +%Y%m%d).sql

# Wiederherstellen
cat backup.sql | docker exec -i mrrmlabapp-mrrmlabapp-db-1 \
  psql -U mrrmlab mrrmlab