services: app: build: . # Alternativ ein vorgebautes Image verwenden: # image: ghcr.io/harlekin/cc-manager:latest restart: unless-stopped environment: DATABASE_URL: postgres://ccuser:${DB_PASSWORD}@db:5432/ccmanager SESSION_SECRET: ${SESSION_SECRET} NODE_ENV: production # Erstzugang; nach der ersten Anmeldung wird ein Wechsel erzwungen. BOOTSTRAP_ADMIN_USER: ${BOOTSTRAP_ADMIN_USER:-admin} BOOTSTRAP_ADMIN_PASSWORD: ${BOOTSTRAP_ADMIN_PASSWORD:-} TRUST_PROXY: "true" # Nur noetig, wenn der GExtension-Abgleich eine andere Instanz ansprechen soll. GEXTENSION_BASE_URL: ${GEXTENSION_BASE_URL:-https://gextension.senseigaming.de} AUDIT_RETENTION_DAYS: ${AUDIT_RETENTION_DAYS:-365} expose: # Bewusst nicht nach aussen gemappt: der Reverse Proxy terminiert HTTPS. - "3000" depends_on: db: condition: service_healthy db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: ccuser POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ccmanager volumes: - cc_db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ccuser -d ccmanager"] interval: 10s timeout: 5s retries: 5 backup: image: postgres:16-alpine restart: unless-stopped environment: PGPASSWORD: ${DB_PASSWORD} volumes: - ./backups:/backups depends_on: db: condition: service_healthy # Dump beim Start und danach alle 24 Stunden, Aufbewahrung 14 Tage. entrypoint: > sh -c 'while true; do pg_dump -h db -U ccuser -d ccmanager | gzip > /backups/ccmanager-$$(date +%F-%H%M).sql.gz && echo "Backup geschrieben: $$(date +%F-%H%M)"; find /backups -name "ccmanager-*.sql.gz" -mtime +14 -delete; sleep 86400; done' volumes: cc_db: