services: postgresql: image: docker.io/library/postgres:15-alpine restart: unless-stopped 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 volumes: - database:/var/lib/postgresql/data networks: - authentik server: image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.10.2} command: server container_name: authentik-server restart: unless-stopped ports: - ${PORT_HTTP:-9000}:9000 - ${PORT_HTTPS:-9443}:9443 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_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required} labels: - "traefik.enable=true" - "traefik.docker.network=proxy" # Services # - "traefik.http.services.authentik-server.loadbalancer.server.port=9443" - "traefik.http.services.authentik-server.loadbalancer.server.port=9000" # Prod Router - "traefik.http.routers.authentik-server.rule=Host(`auth.forust.xyz`)" - "traefik.http.routers.authentik-server.entrypoints=websecure" - "traefik.http.routers.authentik-server.middlewares=security-headers@file" - "traefik.http.routers.authentik-server.service=authentik-server" - "traefik.http.routers.authentik-server.tls=true" # Local Router - "traefik.http.routers.authentik-server-local.rule=Host(`auth.workstation.internal`) || Host(`auth-dashboard.internal`)" - "traefik.http.routers.authentik-server-local.entrypoints=websecure" - "traefik.http.routers.authentik-server-local.middlewares=security-headers@file" - "traefik.http.routers.authentik-server-local.service=authentik-server" - "traefik.http.routers.authentik-server-local.tls=true" # Dev Router - "traefik.http.routers.authentik-server-dev.rule=Host(`auth.gigaforust.internal`)" - "traefik.http.routers.authentik-server-dev.entrypoints=websecure" - "traefik.http.routers.authentik-server-dev.middlewares=security-headers@file" - "traefik.http.routers.authentik-server-dev.service=authentik-server" - "traefik.http.routers.authentik-server-dev.tls=true" volumes: - ./media:/media - ./custom-templates:/templates networks: - proxy - authentik depends_on: postgresql: condition: service_healthy worker: image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.10.2} restart: unless-stopped user: root command: worker 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_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required} volumes: - /var/run/docker.sock:/var/run/docker.sock - ./media:/media - ./certs:/certs - ./custom-templates:/templates networks: - authentik depends_on: postgresql: condition: service_healthy volumes: database: driver: local networks: authentik: proxy: external: true