Files
CC-Manager/compose.yaml
T
Harlekin f19e596ee4 Proxy-Netzwerk in die compose.yaml aufnehmen
Der app-Service haengt jetzt zusaetzlich im Netzwerk des Reverse Proxy, damit
dieser ihn erreicht. Das stand bisher nur in der lokalen Fassung auf dem
Server und musste nach jedem Pull von Hand nachgezogen werden.

Der Name ist ueber PROXY_NETWORK einstellbar und faellt auf nginx_default
zurueck, wie es Nginx Proxy Manager anlegt. Wer ohne Proxy in Docker
arbeitet, entfernt den Block - der Kommentar sagt, was dann noetig ist.

Dazu ein Hinweis auf eine unauffaellige Falle: Docker Compose deutet ein $ im
Wert als Variable und ersetzt es durch nichts. Ein Passwort mit $ kommt
dadurch gekuerzt an, ohne dass etwas fehlschlaegt.
2026-09-18 16:17:25 +02:00

76 lines
2.5 KiB
YAML

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
networks:
- default # App zur Datenbank
- proxy # Reverse Proxy zur App
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'
networks:
# Das Netzwerk des Reverse Proxy. Es muss bereits existieren - der Proxy
# legt es an, bei Nginx Proxy Manager heisst es meist nginx_default.
# Anderer Name? Dann PROXY_NETWORK in der .env setzen.
#
# Ohne Reverse Proxy in Docker: diesen Block und die networks-Liste beim
# app-Service entfernen und stattdessen einen Port mappen (ports: "3000:3000").
# Dann aber selbst fuer HTTPS sorgen - die App gehoert nicht ungeschuetzt ins Netz.
proxy:
external: true
name: ${PROXY_NETWORK:-nginx_default}
volumes:
cc_db: