- Rename DestinataerEmailEingang → EmailEingang with category support (destinataer, rechnung, land_pacht, stiftungsgeschichte, allgemein) - Add invoice capture workflow: create Verwaltungskosten from email, link DMS documents as invoice attachments, track payment status - Add Stiftungsgeschichte email category with auto-detection patterns (Ahnenforschung, Genealogie, Chronik, etc.) and DMS integration - Update poll_emails task with category detection and DMS context mapping - Show available history documents in Geschichte editor sidebar - Consolidate DMS views, remove legacy dokument templates - Update all detail/form templates for DMS document linking - Add deploy.sh script and streamline compose.yml Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
141 lines
4.4 KiB
YAML
141 lines
4.4 KiB
YAML
# Production Docker Compose Configuration
|
|
# This file is used for production deployment via GitHub Actions
|
|
# For local development, use: docker-compose -f compose.dev.yml up
|
|
#
|
|
# IMPORTANT: This configuration requires ALL environment variables to be
|
|
# provided via the production server's .env file. No fallback values are
|
|
# included for security reasons.
|
|
|
|
services:
|
|
db:
|
|
image: postgres:16-alpine
|
|
environment:
|
|
POSTGRES_DB: ${POSTGRES_DB}
|
|
POSTGRES_USER: ${POSTGRES_USER}
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
|
volumes:
|
|
- dbdata:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
|
|
web:
|
|
build: ./app
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_started
|
|
environment:
|
|
- POSTGRES_DB=${POSTGRES_DB}
|
|
- POSTGRES_USER=${POSTGRES_USER}
|
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
|
- DB_HOST=${DB_HOST}
|
|
- DB_PORT=${DB_PORT}
|
|
- DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY}
|
|
- DJANGO_DEBUG=${DJANGO_DEBUG}
|
|
- DJANGO_ALLOWED_HOSTS=${DJANGO_ALLOWED_HOSTS}
|
|
- LANGUAGE_CODE=${LANGUAGE_CODE}
|
|
- TIME_ZONE=${TIME_ZONE}
|
|
- REDIS_URL=${REDIS_URL}
|
|
- SESSION_COOKIE_NAME=${SESSION_COOKIE_NAME}
|
|
- CSRF_COOKIE_NAME=${CSRF_COOKIE_NAME}
|
|
- GRAMPS_URL=${GRAMPS_URL}
|
|
- GRAMPS_USERNAME=${GRAMPS_USERNAME}
|
|
- GRAMPS_PASSWORD=${GRAMPS_PASSWORD}
|
|
- GRAMPS_API_TOKEN=${GRAMPS_API_TOKEN}
|
|
- IMAP_HOST=${IMAP_HOST}
|
|
- IMAP_PORT=${IMAP_PORT}
|
|
- IMAP_USER=${IMAP_USER}
|
|
- IMAP_PASSWORD=${IMAP_PASSWORD}
|
|
- IMAP_FOLDER=${IMAP_FOLDER}
|
|
- IMAP_USE_SSL=${IMAP_USE_SSL}
|
|
ports:
|
|
- "8081:8000"
|
|
volumes:
|
|
- ./app:/app
|
|
command: ["gunicorn", "core.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"]
|
|
|
|
worker:
|
|
build: ./app
|
|
environment:
|
|
- POSTGRES_DB=${POSTGRES_DB}
|
|
- POSTGRES_USER=${POSTGRES_USER}
|
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
|
- DB_HOST=${DB_HOST}
|
|
- DB_PORT=${DB_PORT}
|
|
- DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY}
|
|
- DJANGO_DEBUG=${DJANGO_DEBUG}
|
|
- REDIS_URL=${REDIS_URL}
|
|
- GRAMPS_URL=${GRAMPS_URL}
|
|
- GRAMPS_USERNAME=${GRAMPS_USERNAME}
|
|
- GRAMPS_PASSWORD=${GRAMPS_PASSWORD}
|
|
- GRAMPS_API_TOKEN=${GRAMPS_API_TOKEN}
|
|
- IMAP_HOST=${IMAP_HOST}
|
|
- IMAP_PORT=${IMAP_PORT}
|
|
- IMAP_USER=${IMAP_USER}
|
|
- IMAP_PASSWORD=${IMAP_PASSWORD}
|
|
- IMAP_FOLDER=${IMAP_FOLDER}
|
|
- IMAP_USE_SSL=${IMAP_USE_SSL}
|
|
depends_on:
|
|
- redis
|
|
- db
|
|
command: ["celery", "-A", "core", "worker", "-l", "info"]
|
|
|
|
beat:
|
|
build: ./app
|
|
environment:
|
|
- POSTGRES_DB=${POSTGRES_DB}
|
|
- POSTGRES_USER=${POSTGRES_USER}
|
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
|
- DB_HOST=${DB_HOST}
|
|
- DB_PORT=${DB_PORT}
|
|
- DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY}
|
|
- DJANGO_DEBUG=${DJANGO_DEBUG}
|
|
- REDIS_URL=${REDIS_URL}
|
|
- GRAMPS_URL=${GRAMPS_URL}
|
|
- GRAMPS_USERNAME=${GRAMPS_USERNAME}
|
|
- GRAMPS_PASSWORD=${GRAMPS_PASSWORD}
|
|
- GRAMPS_API_TOKEN=${GRAMPS_API_TOKEN}
|
|
- IMAP_HOST=${IMAP_HOST}
|
|
- IMAP_PORT=${IMAP_PORT}
|
|
- IMAP_USER=${IMAP_USER}
|
|
- IMAP_PASSWORD=${IMAP_PASSWORD}
|
|
- IMAP_FOLDER=${IMAP_FOLDER}
|
|
- IMAP_USE_SSL=${IMAP_USE_SSL}
|
|
depends_on:
|
|
- redis
|
|
- db
|
|
command: ["celery", "-A", "core", "beat", "-l", "info"]
|
|
|
|
grampsweb:
|
|
image: ghcr.io/gramps-project/grampsweb:latest
|
|
ports:
|
|
- "8090:5000"
|
|
environment:
|
|
- GRAMPSWEB_SECRET_KEY=${GRAMPSWEB_SECRET_KEY}
|
|
- GRAMPSWEB_ADMIN_EMAIL=${GRAMPSWEB_ADMIN_EMAIL}
|
|
- GRAMPSWEB_ADMIN_PASSWORD=${GRAMPSWEB_ADMIN_PASSWORD}
|
|
- GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Stiftung}
|
|
- GRAMPSWEB_BASE_URL=${GRAMPSWEB_BASE_URL:-/ahnenforschung}
|
|
- GRAMPSWEB_STATIC_PATH=${GRAMPSWEB_STATIC_PATH:-/ahnenforschung/static}
|
|
- GRAMPSWEB_STATIC_URL=${GRAMPSWEB_STATIC_URL:-/ahnenforschung/static/}
|
|
- GRAMPSWEB_CELERY_CONFIG__broker_url=redis://redis:6379/0
|
|
- GRAMPSWEB_CELERY_CONFIG__result_backend=redis://redis:6379/0
|
|
- GRAMPSWEB_RATELIMIT_STORAGE_URI=redis://redis:6379/1
|
|
- GRAMPSWEB_NEW_DB_BACKEND=sqlite
|
|
volumes:
|
|
- gramps_data:/app/data
|
|
depends_on:
|
|
- db
|
|
- redis
|
|
|
|
volumes:
|
|
dbdata:
|
|
gramps_data:
|