services: postgresql: env_file: - .env environment: POSTGRES_DB: ${PG_DB:-authentik} POSTGRES_PASSWORD: ${PG_PASS:?database password required} POSTGRES_USER: ${PG_USER:-authentik} healthcheck: interval: 30s retries: 5 start_period: 20s test: - CMD-SHELL - pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER} timeout: 5s image: docker.io/library/postgres:16-alpine restart: unless-stopped volumes: - ./data/postgres:/var/lib/postgresql/data redis: command: --save 60 1 --loglevel warning healthcheck: interval: 30s retries: 5 start_period: 20s test: - CMD-SHELL - redis-cli ping | grep PONG timeout: 3s image: docker.io/library/redis:alpine restart: unless-stopped volumes: - ./data/redis:/data server: command: server depends_on: postgresql: condition: service_healthy redis: condition: service_healthy env_file: - .env environment: AUTHENTIK_POSTGRESQL__HOST: postgresql AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik} AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS} AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik} AUTHENTIK_REDIS__HOST: redis AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required} AUTHENTIK_HOST: ${AUTHENTIK_HOST} TZ: ${TZ} image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.8.3} ports: - ${COMPOSE_PORT_HTTP:-9000}:9000 - ${COMPOSE_PORT_HTTPS:-9443}:9443 restart: unless-stopped volumes: - ./media:/media - ./custom-templates:/templates worker: command: worker depends_on: postgresql: condition: service_healthy redis: condition: service_healthy env_file: - .env environment: AUTHENTIK_POSTGRESQL__HOST: postgresql AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik} AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS} AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik} AUTHENTIK_REDIS__HOST: redis AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required} AUTHENTIK_HOST: ${AUTHENTIK_HOST} TZ: ${TZ} image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.8.3} restart: unless-stopped user: root volumes: - /var/run/docker.sock:/var/run/docker.sock - ./media:/media - ./certs:/certs - ./custom-templates:/templates pgbackups: image: prodrigestivill/postgres-backup-local:16 restart: unless-stopped depends_on: postgresql: condition: service_healthy env_file: - .env environment: POSTGRES_HOST: ${PG_HOST} POSTGRES_PORT: ${PG_PORT} POSTGRES_DB: ${PG_DB} POSTGRES_USER: ${PG_USER} POSTGRES_PASSWORD: ${PG_PASS} SCHEDULE: "0 3 * * *" # täglich 03:00 BACKUP_DIR: /backups BACKUP_KEEP_DAYS: "14" # 7 Tage aufbewahren BACKUP_KEEP_WEEKS: "4" # plus 4 Wochen-Snapshots BACKUP_KEEP_MONTHS: "6" # plus 6 Monats-Snapshots TZ: ${TZ} COMPRESSION: "gzip" # .sql.gz (plain SQL Dump) volumes: - /mnt/backup/authentik:/backups