authentik — an open-source Identity Provider and SSO: OAuth2/OIDC, SAML, LDAP, forward-auth, MFA, and flows. Deployed all-in-one with its PostgreSQL and Redis plus the server and worker in a single host-networked Nomad job.
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "authentik"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The authentik server/worker image (both tasks use it). Pin a tag in production.
image = "ghcr.io/goauthentik/server:latest"
# Host port for the authentik web UI / API.
port = 9000
# AUTHENTIK_SECRET_KEY — a long random value used to sign sessions/tokens. CHANGE THIS (e.g. `openssl rand -base64 50`) and keep it stable.
secret_key = "CHANGE_ME_authentik_secret_key_use_openssl_rand_base64_50"
# Initial password for the built-in `akadmin` user, set on first start. CHANGE THIS. Empty = you set the password via the first-run flow at /if/flow/initial-setup/.
bootstrap_password = ""
# Email for the initial akadmin user (used with bootstrap_password).
bootstrap_email = "admin@example.com"
# Resources for the authentik server task.
server_resources = {
cpu = 500
memory = 512
}
# Resources for the authentik worker task.
worker_resources = {
cpu = 500
memory = 512
}
# PostgreSQL image backing authentik.
postgres_image = "postgres:16-alpine"
# Host port PostgreSQL listens on. authentik connects on 127.0.0.1.
db_port = 5432
# Password for the authentik Postgres user. CHANGE THIS. (DB name and user are both "authentik".)
db_password = "authentik"
# Docker named volume for the Postgres data dir (users, apps, flows). Back it up.
db_data_volume = "authentik_db_data"
# Redis image (cache/queues; ephemeral, no volume).
redis_image = "redis:7-alpine"
# Host port Redis listens on.
redis_port = 6379
# Resources for the PostgreSQL task.
postgres_resources = {
cpu = 500
memory = 512
}
# Placement constraints — pin the job to one node so the Postgres local volume stays put (single all-in-one alloc). On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "authentik" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "ghcr.io/goauthentik/server:latest" | The authentik server/worker image (both tasks use it). Pin a tag in production. |
| port | number | 9000 | Host port for the authentik web UI / API. |
| secret_key set me | string | "CHANGE_ME_authentik_secret_key_use_openssl_rand_base64_50" | AUTHENTIK_SECRET_KEY — a long random value used to sign sessions/tokens. CHANGE THIS (e.g. `openssl rand -base64 50`) and keep it stable. |
| bootstrap_password key | string | "" | Initial password for the built-in `akadmin` user, set on first start. CHANGE THIS. Empty = you set the password via the first-run flow at /if/flow/initial-setup/. |
| bootstrap_email set me | string | "admin@example.com" | Email for the initial akadmin user (used with bootstrap_password). |
| server_resources | object | {
cpu = 500
memory = 512
} | Resources for the authentik server task. |
| worker_resources | object | {
cpu = 500
memory = 512
} | Resources for the authentik worker task. |
| postgres_image | string | "postgres:16-alpine" | PostgreSQL image backing authentik. |
| db_port | number | 5432 | Host port PostgreSQL listens on. authentik connects on 127.0.0.1. |
| db_password key | string | "authentik" | Password for the authentik Postgres user. CHANGE THIS. (DB name and user are both "authentik".) |
| db_data_volume | string | "authentik_db_data" | Docker named volume for the Postgres data dir (users, apps, flows). Back it up. |
| redis_image | string | "redis:7-alpine" | Redis image (cache/queues; ephemeral, no volume). |
| redis_port | number | 6379 | Host port Redis listens on. |
| postgres_resources | object | {
cpu = 500
memory = 512
} | Resources for the PostgreSQL task. |
| constraints | list | [] | Placement constraints — pin the job to one node so the Postgres local volume stays put (single all-in-one alloc). On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". |
No variables match.
authentik — an open-source Identity Provider / SSO: OAuth2 & OpenID Connect, SAML, LDAP, proxy/forward-auth, MFA, and customizable login flows. Put it in front of your apps for single sign-on. All-in-one: authentik's server and worker plus PostgreSQL and Redis, in one host-networked Nomad job.
nomad-pack registry add nomploy github.com/Nomploy/nomad-packs \
--var secret_key=$(openssl rand -base64 50) --var bootstrap_password=<secret>
nomad-pack run authentik --registry nomploy \
--var secret_key=$(openssl rand -base64 50) --var bootstrap_password=<secret>
In nomploy: create a Compose service, type Nomad Pack, pack authentik, set secret_key
(and bootstrap_password), then Deploy. Open http://<node-ip>:9000; if you didn't set a
bootstrap password, complete /if/flow/initial-setup/.
| Variable | Default | Notes |
|---|---|---|
image |
ghcr.io/goauthentik/server:latest |
Pin a tag in production. |
port |
9000 |
Web UI / API (HTTP). |
secret_key |
placeholder | Change it (openssl rand -base64 50); keep it stable. |
bootstrap_password / bootstrap_email |
"" / admin@example.com |
Optional first-boot akadmin. |
db_password |
authentik |
Postgres password. Change this. |
db_data_volume |
authentik_db_data |
Users/apps/flows. Back it up. |
db_port / redis_port |
5432 / 6379 |
Bundled dependency ports. |
constraints |
[] |
Pin to a node so the DB volume stays put. |
Per-task resources: server_resources, worker_resources, postgres_resources.
count is fixed to 1 (local Postgres volume). Pin with constraints./media volume if you need it.