version: "2.4" # BauDoc Bahn – Baustellen- und Dokumentenmanagement für Eisenbahninfrastruktur # # Bewusst OHNE named volumes: alle persistenten Daten liegen als Bind-Mount # direkt neben dieser Datei unter ./data/. Damit ist ein Backup ein simples # "tar czf backup.tgz data/" und ein Umzug ein Kopiervorgang. services: db: image: postgres:16-alpine container_name: baudoc-db restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-baudoc} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-baudoc} POSTGRES_DB: ${POSTGRES_DB:-baudoc} # Deutsche Sortierung/Volltext POSTGRES_INITDB_ARGS: "--locale=C.UTF-8 --encoding=UTF8" volumes: - ./data/postgres:/var/lib/postgresql/data ports: - "${DB_PORT:-5433}:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-baudoc} -d ${POSTGRES_DB:-baudoc}"] interval: 5s timeout: 5s retries: 20 mail: # Fängt im Betrieb ohne echten Mailserver alle Benachrichtigungen ab. # Web-UI: http://localhost:8025 – im Produktivbetrieb durch echtes SMTP ersetzen. image: axllent/mailpit:latest container_name: baudoc-mail restart: unless-stopped environment: MP_MAX_MESSAGES: 5000 MP_DATABASE: /data/mailpit.db volumes: - ./data/mail:/data ports: - "${MAIL_UI_PORT:-8025}:8025" app: build: context: ./app dockerfile: Dockerfile container_name: baudoc-app restart: unless-stopped depends_on: db: condition: service_healthy environment: DATABASE_URL: postgresql://${POSTGRES_USER:-baudoc}:${POSTGRES_PASSWORD:-baudoc}@db:5432/${POSTGRES_DB:-baudoc}?schema=public AUTH_SECRET: ${AUTH_SECRET:-bitte-in-.env-aendern-mindestens-32-zeichen-lang} APP_URL: ${APP_URL:-http://localhost:3400} STORAGE_DIR: /app/storage SMTP_HOST: ${SMTP_HOST:-mail} SMTP_PORT: ${SMTP_PORT:-1025} SMTP_USER: ${SMTP_USER:-} SMTP_PASS: ${SMTP_PASS:-} SMTP_FROM: ${SMTP_FROM:-BauDoc Bahn } SMTP_SECURE: ${SMTP_SECURE:-false} MAX_UPLOAD_MB: ${MAX_UPLOAD_MB:-200} TZ: Europe/Berlin volumes: # Hochgeladene Dokumente – liegen als normale Dateien im Compose-Verzeichnis - ./data/files:/app/storage ports: - "${APP_PORT:-3400}:3000"