Avnology ID
Self-Hosting

Environment Variables

Every variable referenced by docker-compose.traefik.yml, documented.

Environment Variables

This page is the authoritative reference for every variable consumed by docker-compose.traefik.yml. Copy .env.example to .env.production and fill in the required rows.

Domains

VariableRequiredExampleUsed by
DOMAIN_APIYesapi-id.your-company.comgateway, Oathkeeper, Hydra
DOMAIN_WEBYesid.your-company.comweb dashboard, Universal Login
DOMAIN_DOCSYesdocs-id.your-company.commerged docs app (public + /internal)
DOMAIN_POLISYessso-id.your-company.comPolis SCIM service
DOMAIN_SAMLYessaml-id.your-company.comSAML IdP endpoints
DOMAIN_GRAFANAYesgrafana-id.your-company.comObservability dashboards
DOMAIN_MINIOYesminio-id.your-company.comS3-compatible object storage console
DOMAIN_DOCS_INTERNALNodocs-internal-id.your-company.comLegacy host -- Traefik 302s to $DOMAIN_DOCS/internal

Database passwords

All five are required. Rotate with make db-rotate-passwords (zero-downtime, writes new secret then re-configures pgbouncer).

VariableConsumed by
POSTGRES_PASSWORDPostgres superuser
POSTGRES_KRATOS_PASSWORDKratos DB user
POSTGRES_HYDRA_PASSWORDHydra DB user
POSTGRES_KETO_PASSWORDKeto DB user
POSTGRES_POLIS_PASSWORDPolis DB user

Ory secrets

64-character random hex strings. Generate with openssl rand -hex 32.

VariableConsumed byRotation procedure
HYDRA_SYSTEM_SECRETHydra (session + cookie encryption)Upgrade guide
KRATOS_COOKIE_SECRETKratos session cookieRotate yearly; supports two-value blue/green
KRATOS_CIPHER_SECRETKratos field-level encryptionRotate only during a maintenance window

Polis (SCIM)

VariableRequiredNotes
POLIS_API_KEYYesAdmin API key the gateway uses to call Polis
POLIS_NEXTAUTH_SECRETYesNextAuth session encryption
POLIS_WEBHOOK_SECRETYesHMAC secret for Polis -> gateway webhooks
POLIS_SCIM_WEBHOOK_SECRETYesHMAC secret for SCIM provisioning events
POLIS_CLIENT_SECRET_VERIFIERYesShared with Hydra for verifier flow
POLIS_OPENID_CLIENT_SECRETYesHydra client secret for Polis' own OIDC integration
POLIS_OPENID_RSA_PRIVATE_KEYYesPEM-encoded RSA key (2048 bit min) for signing
POLIS_CLIENT_IDYesHydra client ID for Polis
POLIS_CLIENT_SECRETYesMatching Hydra client secret

Infrastructure

VariableRequiredDefault
VALKEY_PASSWORDYes--
MINIO_ROOT_USERYes--
MINIO_ROOT_PASSWORDYes12+ chars
GRAFANA_ADMIN_PASSWORDYes--

Email

VariableRequiredExample
SMTP_CONNECTION_URIYessmtps://user:[email protected]:465/?skip_ssl_verify=false
SMTP_FROM_ADDRESSYes[email protected]

SMS (optional)

Configure exactly one provider. Omit all to disable SMS flows.

VariableProvider
TWILIO_ACCOUNT_SID + TWILIO_AUTH_TOKEN + TWILIO_FROM_NUMBERTwilio
VONAGE_API_KEY + VONAGE_API_SECRET + VONAGE_FROM_NUMBERVonage
MESSAGEBIRD_ACCESS_KEY + MESSAGEBIRD_ORIGINATORMessageBird
AWS_SNS_ACCESS_KEY_ID + AWS_SNS_SECRET_ACCESS_KEY + AWS_SNS_REGIONAWS SNS

Social login (optional)

Each provider is opt-in. Create OAuth apps with the provider, then set:

ProviderVariables
GoogleGOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET
GitHubGITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET
MicrosoftMICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET
FacebookFACEBOOK_CLIENT_ID, FACEBOOK_CLIENT_SECRET

CAPTCHA (optional)

VariableProvider
HCAPTCHA_SITE_KEY + HCAPTCHA_SECRET_KEYhCaptcha
TURNSTILE_SITE_KEY + TURNSTILE_SECRET_KEYCloudflare Turnstile
CAPTCHA_ENABLED_ROUTESComma-separated route prefixes to guard

Observability

VariableDefaultPurpose
OTEL_EXPORTER_OTLP_ENDPOINT--OTLP collector URL (traces + metrics)
OTEL_SERVICE_NAMESPACEavnologyService namespace label
LOG_LEVELinfodebug / info / warn / error