# Quadlet unit: Authentik core + embedded Caddy outpost (rootless, boot-persistent). # # Install path on dankclaw: ~/.config/containers/systemd/authentik-server.container # Unit name: authentik-server.service (podman 5.x drops the container- prefix) # # The embedded outpost serves /outpost.goauthentik.io/* including the # /auth/caddy forward_auth endpoint the Caddyfile chains to — no outpost token # exists for this deployment by design. Resolved by name (A2A DNS) from every # container on dankclaw_default, including caddy. The 9000 publish is # loopback-only on purpose: LAN clients reach Authentik through Caddy, never # around it; the loopback publish exists so host-side tooling can probe # /-/health/. Runs as the image default user (same userns mapping the compose # era used, so the existing /data ownership carries over unchanged). [Unit] Description=Authentik server container After=network.target authentik-postgres.service Wants=authentik-postgres.service [Container] ContainerName=authentik-server Image=ghcr.io/goauthentik/server:2026.8.3 Exec=server Network=dankclaw_default EnvironmentFile=/home/dank/serverAppConfigs/dankclaw/.env Environment=AUTHENTIK_POSTGRESQL__HOST=authentik-postgres Environment=AUTHENTIK_POSTGRESQL__NAME=authentik Environment=AUTHENTIK_POSTGRESQL__USER=authentik Environment=AUTHENTIK_POSTGRESQL__PASSWORD=${AUTHENTIK_PG_PASS} Environment=AUTHENTIK_SECRET_KEY=${AUTHENTIK_SECRET_KEY} PublishPort=127.0.0.1:9000:9000 # Probe must contain no quotes: this host's quadlet v1 generator space-splits # HealthCmd into the healthcheck argv array, and quoted probes arrive mangled # (verified live 2026-08-28). `python /manage.py check --database default` # exits nonzero iff Django (incl. the DB connection) cannot serve. HealthCmd=python /manage.py check --database default [Service] EnvironmentFile=/home/dank/serverAppConfigs/dankclaw/.env TimeoutStartSec=900 Restart=always RestartSec=5 [Install] WantedBy=default.target