Prepare Kalendartool for MPM and disable invites

This commit is contained in:
Kühn
2026-10-08 15:06:22 +02:00
parent bc49c3074e
commit 556202575e
50 changed files with 905 additions and 836 deletions

View File

@@ -1,29 +1,24 @@
# Eigenständiger Betrieb außerhalb von MPM:
# docker compose -f docker-compose.yml up --build
services:
db:
image: postgres:16-alpine
build:
context: .
dockerfile: Dockerfile.postgres
restart: unless-stopped
environment:
POSTGRES_USER: calendar
POSTGRES_PASSWORD: calendar
POSTGRES_USER: calendar_admin
POSTGRES_PASSWORD: ${CALENDAR_ADMIN_PASSWORD:?CALENDAR_ADMIN_PASSWORD fehlt}
POSTGRES_DB: calendar
# KEIN Port-Mapping: Die DB ist nur im internen Compose-Netz
# erreichbar (App verbindet ueber den Hostnamen "db"). Fuer
# lokalen Zugriff bei Bedarf: docker compose exec db psql ...
CALENDAR_DB_PASSWORD: ${CALENDAR_DB_PASSWORD:?CALENDAR_DB_PASSWORD fehlt}
volumes:
- pgdata:/var/lib/postgresql/data
# Legt den least-privilege-App-User an (nur bei initialer
# Volume-Initialisierung; siehe Script fuer Bestands-Volumes).
- ./docker/postgres/init:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U calendar -d calendar"]
test: ["CMD-SHELL", "pg_isready -U calendar_admin -d calendar"]
interval: 5s
timeout: 5s
retries: 10
# Taeglicher DB-Backup-Service: erstellt um 02:00 Uhr ein
# pg_dump-Backup im Named Volume "pgbackups". Aeltere Backups werden
# automatisch nach 7 Tagen geloescht (Retention). Die Backups
# ueberleben Neustarts des Stacks, da sie im Volume liegen.
db-backup:
image: prodrigestivill/postgres-backup-local:16-alpine
restart: unless-stopped
@@ -33,46 +28,39 @@ services:
environment:
POSTGRES_HOST: db
POSTGRES_DB: calendar
POSTGRES_USER: calendar
POSTGRES_PASSWORD: calendar
# Taeglich um 02:00 Uhr (Cron).
POSTGRES_USER: calendar_admin
POSTGRES_PASSWORD: ${CALENDAR_ADMIN_PASSWORD:?CALENDAR_ADMIN_PASSWORD fehlt}
SCHEDULE: "@daily"
# Backups nach 7 Tagen automatisch loeschen.
BACKUP_KEEP_DAYS: 7
# Zusaetzlich die letzten 4 Wochensicherungen behalten.
BACKUP_KEEP_WEEKS: 4
# Monats-Sicherungen der letzten 3 Monate behalten.
BACKUP_KEEP_MONTHS: 3
# Kompression aktivieren (platzsparend).
POSTGRES_EXTRA_OPTS: "-Z6"
TZ: Europe/Berlin
volumes:
- pgbackups:/backups
app:
build: .
build:
context: .
args:
HUB_BASE_PATH: ${HUB_BASE_PATH:-}
MPM_AUTH_MODE: "false"
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DATABASE_URL: postgresql://calendar_app:calendar_app@db:5432/calendar?schema=public
# KEIN Fallback-Secret: Ohne gesetztes SESSION_SECRET failt die
# App hart beim Start (lib/config.ts), statt JWTs mit einem
# oeffentlich bekannten Secret zu signieren.
SESSION_SECRET: ${SESSION_SECRET:?SESSION_SECRET muss gesetzt sein (z. B. in .env, siehe .env.example)}
APP_URL: ${APP_URL:-http://localhost:3000}
MPM_AUTH_MODE: "false"
HUB_BASE_PATH: ${HUB_BASE_PATH:-}
SESSION_SECRET: ${SESSION_SECRET:?SESSION_SECRET fehlt}
CALENDAR_DB_PASSWORD: ${CALENDAR_DB_PASSWORD:?CALENDAR_DB_PASSWORD fehlt}
ALLOW_OPEN_REGISTRATION: ${ALLOW_OPEN_REGISTRATION:-true}
# Optional: Admin-Account beim ersten Start anlegen (First-Run).
# Nicht-destruktiv: Legt den Admin nur an, wenn noch keiner
# existiert. Bestehende User werden niemals geloescht.
# Wenn NICHT gesetzt, laeuft das Seed-Script ohne Nebeneffekte durch.
SEED_ADMIN_EMAIL: ${SEED_ADMIN_EMAIL:-}
SEED_ADMIN_PASSWORD: ${SEED_ADMIN_PASSWORD:-}
NODE_ENV: production
ports:
- "3000:3000"
- "${APP_PORT:-3000}:3000"
volumes:
pgdata:
pgbackups:
pgbackups: