services: postgresql: image: postgres:16-alpine container_name: authentik-db restart: unless-stopped environment: - POSTGRES_DB=authentik - POSTGRES_USER=authentik - POSTGRES_PASSWORD=${PG_PASS:?database password required} healthcheck: test: ["CMD-SHELL", "pg_isready -d authentik -U authentik"] interval: 30s timeout: 5s retries: 5 start_period: 20s volumes: - ${DATA_PATH:-/srv/authentik}/database:/var/lib/postgresql/data server: image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2026.8.0} container_name: authentik-server command: server restart: unless-stopped shm_size: 512mb depends_on: postgresql: condition: service_healthy environment: - AUTHENTIK_SECRET_KEY=${AUTHENTIK_SECRET_KEY:?secret key required} - AUTHENTIK_POSTGRESQL__HOST=postgresql - AUTHENTIK_POSTGRESQL__NAME=authentik - AUTHENTIK_POSTGRESQL__USER=authentik - AUTHENTIK_POSTGRESQL__PASSWORD=${PG_PASS} ports: - "${HTTP_PORT:-9200}:9000" - "${HTTPS_PORT:-9243}:9443" volumes: - ${DATA_PATH:-/srv/authentik}/data:/data - ${DATA_PATH:-/srv/authentik}/custom-templates:/templates worker: image: ghcr.io/goauthentik/server:${AUTHENTIK_TAG:-2026.8.0} container_name: authentik-worker command: worker restart: unless-stopped shm_size: 512mb user: root depends_on: postgresql: condition: service_healthy environment: - AUTHENTIK_SECRET_KEY=${AUTHENTIK_SECRET_KEY} - AUTHENTIK_POSTGRESQL__HOST=postgresql - AUTHENTIK_POSTGRESQL__NAME=authentik - AUTHENTIK_POSTGRESQL__USER=authentik - AUTHENTIK_POSTGRESQL__PASSWORD=${PG_PASS} volumes: - /var/run/docker.sock:/var/run/docker.sock - ${DATA_PATH:-/srv/authentik}/data:/data - ${DATA_PATH:-/srv/authentik}/certs:/certs - ${DATA_PATH:-/srv/authentik}/custom-templates:/templates