Authentik
v1.0.0Identity provider for SSO, OAuth2/OIDC, SAML, LDAP, and application access.
identity by getarcaneapp
x-arcane:
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/authentik.svg
urls:
- https://goauthentik.io/
- https://github.com/goauthentik/authentik
services:
postgresql:
image: docker.io/library/postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${PG_DB:-authentik}
POSTGRES_PASSWORD: ${PG_PASS}
POSTGRES_USER: ${PG_USER:-authentik}
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
interval: 30s
retries: 5
start_period: 20s
timeout: 5s
volumes:
- database:/var/lib/postgresql/data
labels:
com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/postgresql.svg
server:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.5.3}
command: server
restart: unless-stopped
depends_on:
postgresql:
condition: service_healthy
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}
AUTHENTIK_ERROR_REPORTING__ENABLED: ${AUTHENTIK_ERROR_REPORTING__ENABLED:-false}
ports:
- "${COMPOSE_PORT_HTTP:-9000}:9000"
- "${COMPOSE_PORT_HTTPS:-9443}:9443"
shm_size: 512mb
volumes:
- ${BASE_PATH}/data:/data
- ${BASE_PATH}/custom-templates:/templates
labels:
com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/authentik.svg
worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.5.3}
command: worker
restart: unless-stopped
depends_on:
postgresql:
condition: service_healthy
user: root
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}
AUTHENTIK_ERROR_REPORTING__ENABLED: ${AUTHENTIK_ERROR_REPORTING__ENABLED:-false}
shm_size: 512mb
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ${BASE_PATH}/data:/data
- ${BASE_PATH}/certs:/certs
- ${BASE_PATH}/custom-templates:/templates
labels:
com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/authentik.svg
volumes:
database:
BASE_PATH=/data/compose/authentik
COMPOSE_PORT_HTTP=9000
COMPOSE_PORT_HTTPS=9443
AUTHENTIK_IMAGE=ghcr.io/goauthentik/server
AUTHENTIK_TAG=2026.5.3
AUTHENTIK_SECRET_KEY=change-this-to-a-long-random-secret
AUTHENTIK_ERROR_REPORTING__ENABLED=false
PG_DB=authentik
PG_USER=authentik
PG_PASS=change-this-postgres-password
README
Generate a strong AUTHENTIK_SECRET_KEY and database password before using this for real identity data.
The worker mounts the Docker socket because Authentik's official Compose stack uses it for Docker integrations. Remove that mount if you do not need those integrations.