services: keywarden-db: image: postgres:17-alpine container_name: keywarden-db environment: POSTGRES_PASSWORD: ${KEYWARDEN_POSTGRES_PASSWORD:-postgres} POSTGRES_DB: ${KEYWARDEN_POSTGRES_DB:-keywarden} POSTGRES_USER: ${KEYWARDEN_POSTGRES_USER:-keywarden} POSTGRES_PORT: ${KEYWARDEN_POSTGRES_PORT:-5432} healthcheck: test: ["CMD-SHELL", "pg_isready -U keywarden -d keywarden"] interval: 5s timeout: 5s retries: 20 volumes: - "pgdata:/var/lib/postgresql/data" keywarden: build: . container_name: keywarden volumes: - ./app:/app - ./nginx/certs:/etc/nginx/certs - ./nginx/logs:/var/log/nginx - ./app/logs:/var/log/keywarden ports: - "443:443" depends_on: - keywarden-db environment: - DJANGO_SETTINGS_MODULE=keywarden.settings.dev - PYTHONPATH=/app - TZ=UTC env_file: - .env authentik-db: env_file: - .env environment: POSTGRES_DB: ${AUTHENTIK_PG_DB:-authentik} POSTGRES_PASSWORD: ${AUTHENTIK_PG_PASS:?database password required} POSTGRES_USER: ${AUTHENTIK_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: - database:/var/lib/postgresql/data authentik-server: command: server depends_on: authentik-db: condition: service_healthy env_file: - .env environment: AUTHENTIK_POSTGRESQL__HOST: authentik-db AUTHENTIK_POSTGRESQL__NAME: ${AUTHENTIK_PG_DB:-authentik} AUTHENTIK_POSTGRESQL__PASSWORD: ${AUTHENTIK_PG_PASS} AUTHENTIK_POSTGRESQL__USER: ${AUTHENTIK_PG_USER:-authentik} AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required} image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1} ports: - ${COMPOSE_PORT_HTTP:-9000}:9000 - ${COMPOSE_PORT_HTTPS:-9443}:9443 restart: unless-stopped shm_size: 512mb volumes: - ./data:/data - ./custom-templates:/templates authentik-worker: command: worker depends_on: authentik-db: condition: service_healthy env_file: - .env environment: AUTHENTIK_POSTGRESQL__HOST: authentik-db AUTHENTIK_POSTGRESQL__NAME: ${AUTHENTIK_PG_DB:-authentik} AUTHENTIK_POSTGRESQL__PASSWORD: ${AUTHENTIK_PG_PASS} AUTHENTIK_POSTGRESQL__USER: ${AUTHENTIK_PG_USER:-authentik} AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required} image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.1} restart: unless-stopped shm_size: 512mb user: root volumes: - /var/run/docker.sock:/var/run/docker.sock - ./data:/data - ./certs:/certs - ./custom-templates:/templates volumes: pgdata: database: driver: local