Authentik Docker Compose 部署指南

从零用官方 Compose 部署 Authentik 2026.8.4 三服务(server/worker/postgres),含端口映射、初始化验证与真实排障实录(镜像拉取、数据库密码)

AuthentikAuthentik2026/10/18

Authentik Docker Compose 部署指南

‍‍​​‌​> 目标:从零在 Ubuntu 22.04 上用官方 Compose 文件把 Authentik 2026.8.4 部署起来并完成初始化验证,含真实排障记录(ghcr 拉取失败、数据库密码不匹配的定位与修复)。已在 Ubuntu 22.04 实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04(x86_64)
  • Docker Engine:29.8.1(docker compose v2 插件)
  • Authentik:2026.8.4(ghcr.io/goauthentik/server:2026.8.4,与 postgres:16-alpine)
  • 服务端口:HTTP 13904(容器内 9000)、HTTPS 13906(容器内 9443)
  • 数据目录:/opt/data/authentik/
  • 实测部署完成态(docker compose ps 实测回显):
NAME                            STATUS
authentik-2026.8.4-postgresql   Up 18 minutes (healthy)
authentik-2026.8.4-server       Up 13 minutes (healthy)
authentik-2026.8.4-worker       Up 13 minutes (healthy)

二、镜像选型说明

镜像用途选型理由
ghcr.io/goauthentik/server:2026.8.4server 与 worker 共用官方主镜像(一份镜像两种 command:server/worker)
postgres:16-alpine数据库官方 compose 指定;本机已有 16-alpine 缓存可直接复用

版本选择:2026.8.4 为官方最新稳定版(2026-10-14 发布,GitHub Releases 实测 tag version/2026.8.4)。生产建议固定具体版本号,不追 latest。

⚠️ 注意:2026.x 官方 compose 已不包含 Redis 服务(早期版本为四服务)。缺 Redis 不是配置遗漏,缓存由进程内缓存与 PostgreSQL 承担,请勿按旧教程自行补挂 Redis。

三、前置条件

  1. Docker Engine 20.10+ 与 Compose v2 插件(本机实测 29.8.1);
  2. 主机 2 CPU / 2 GB RAM 起步(官方要求);
  3. 端口 13904/13906 未被占用(ss -tlnp | grep -E '13904|13906' 实测无输出);
  4. 建议准备访问 ghcr.io 的网络通道(若不通见「常见问题 6.1」的 skopeo 方案)。

四、部署步骤

4.1 创建目录与下载官方 Compose 文件

mkdir -p /opt/data/authentik && cd /opt/data/authentik
curl -s -o docker-compose.yml https://goauthentik.io/docker-compose.yml

实测下载得到 67 行的 compose 文件,核心结构(实测原文节选):

services:
  postgresql:
    image: docker.io/library/postgres:16-alpine
    volumes:
    - database:/var/lib/postgresql/data
  server:
    command: server
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.8.4}
    ports:
    - ${COMPOSE_PORT_HTTP:-9000}:9000
    - ${COMPOSE_PORT_HTTPS:-9443}:9443
    shm_size: 512mb
    volumes:
    - ./data:/data
    - ./custom-templates:/templates
  worker:
    command: worker
    user: root
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./data:/data
    - ./certs:/certs
    - ./custom-templates:/templates
volumes:
  database:
    driver: local

逐项说明:server/worker 共用同一镜像、仅 command 不同;端口经 COMPOSE_PORT_HTTP/HTTPS 变量映射;worker 挂载 docker.sock 用于 Outpost 自动部署(不需要该能力时可删);数据库为 named volume database。

为便于识别,本机在 compose 中为三个服务各加一行 container_name(可选,不影响功能):authentik-2026.8.4-postgresql / authentik-2026.8.4-server / authentik-2026.8.4-worker。

4.2 编写 .env

cd /opt/data/authentik
printf 'AUTHENTIK_BOOTSTRAP_PASSWORD=<你的初始管理密码>\nAUTHENTIK_BOOTSTRAP_TOKEN=<你的初始API令牌>\nPG_USER=authentik\nPG_DB=authentik\nCOMPOSE_PORT_HTTP=13904\nCOMPOSE_PORT_HTTPS=13906\n' > .env

两个敏感值(数据库密码与加密密钥)在启动命令中生成并注入(见 4.3),不落明文;若在可信内网想持久化到 .env,务必 chmod 600 .env。bootstrap 两个变量说明:BOOTSTRAP_PASSWORD 决定 akadmin 初始密码;BOOTSTRAP_TOKEN 创建同名管理员 API Token(首次启动生效,仅初始化前有效)。

4.3 生成密钥并启动

官方对两个必填变量的生成建议(:? 断言会强制检查):

# 一次性注入并启动(PG_PASS 与 SECRET_KEY 随机生成,不出现在历史/文件中)
cd /opt/data/authentik
export AUTHENTIK_SECRET_KEY=$(openssl rand -hex 32) PG_PASS=$(openssl rand -hex 16)
docker compose up -d

实测启动回显(节选):

 Container authentik-2026.8.4-postgresql Healthy
 Container authentik-2026.8.4-server Started
 Container authentik-2026.8.4-worker Started

⚠️ 注意:compose 文件中 ${PG_PASS:?database password required} 与 ${AUTHENTIK_SECRET_KEY:?secret key required} 是强制断言,缺变量时命令直接失败,实测报错: error while interpolating services.postgresql.environment.POSTGRES_PASSWORD: required variable PG_PASS is missing a value: database password required down/up 等所有 compose 子命令都会做插值检查,同样需要这两个变量在环境中(restart/stop 不需要)。

4.4 等待初始化并验证

首次启动 worker 需执行数据库迁移与 Blueprint 导入(约 1~3 分钟)。轮询就绪接口:

for i in $(seq 1 30); do code=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:13904/-/health/ready/); [ "$code" = "200" ] && break; sleep 10; done
curl -s http://localhost:13904/-/health/ready/

实测返回 HTTP 200。用初始 Token 验证版本(实测):

curl -s -H "Authorization: Bearer <你的初始API令牌>" http://localhost:13904/api/v3/admin/version/

实测返回:

{"version_current":"2026.8.4","version_latest":"2026.8.4","version_latest_valid":true,"build_hash":"","outdated":false,"outpost_outdated":false}

浏览器打开 http://<服务器IP>:13904,用 akadmin 与 BOOTSTRAP_PASSWORD 登录即可进入管理台。

五、数据持久化说明

数据位置形态
数据库named volume authentik_databasedocker volume(docker volume ls 可见)
媒体/自定义./data → 容器 /databind mount
TLS 证书./certs → 容器 /certsbind mount(worker)
自定义模板./custom-templates → /templatesbind mount

备份以数据库为准:docker exec authentik-2026.8.4-postgresql pg_dump -U authentik authentik > authentik-$(date +%F).sql(命令形态,执行前确认容器名)。升级版本时数据在 volume 与 ./data 中保留。

六、环境变量表(逐项实测依据)

变量示例/来源作用实测验证方式
AUTHENTIK_SECRET_KEYopenssl rand -hex 32数据加密密钥,server/worker 必须一致缺失时 compose 插值报错(实测回显见 4.3)
PG_PASSopenssl rand -hex 16数据库密码同上;且仅在数据卷首初始化时生效(见 6.2)
PG_USER / PG_DBauthentik库用户与库名启动日志 PostgreSQL connection successful
AUTHENTIK_BOOTSTRAP_PASSWORD自定akadmin 初始密码实测用其走登录 Flow 成功并以 akadmin 身份取得会话
AUTHENTIK_BOOTSTRAP_TOKEN自定akadmin 初始 API Token实测以 Bearer 方式调通 /api/v3/admin/version/
COMPOSE_PORT_HTTP / COMPOSE_PORT_HTTPS13904 / 13906宿主侧端口映射实测 13904→9000、13906→9443(docker compose ps 回显)
AUTHENTIK_TAG2026.8.4镜像 tagcompose 默认值即 2026.8.4

七、配置文件挂载

需要自定义 Brand 模板/邮件模板时放入 ./custom-templates;需要给 worker 预置证书时放 ./certs。自定义环境变量也可直接写进 .env(AUTHENTIK_ 前缀),server/worker 由 env_file 自动加载。完整参数逐条说明见《Authentik 2026.8 配置参数详解》。

八、等价 docker run(理解 compose 的最小形态)

docker run -d --name authentik-pg -e POSTGRES_PASSWORD=<PG_PASS> -e POSTGRES_USER=authentik -e POSTGRES_DB=authentik -v authentik_database:/var/lib/postgresql/data postgres:16-alpine
docker run -d --name authentik-server -p 13904:9000 -p 13906:9443 --env-file /opt/data/authentik/.env -e AUTHENTIK_POSTGRESQL__HOST=<pg地址> -e AUTHENTIK_SECRET_KEY=<SECRET_KEY> -e AUTHENTIK_POSTGRESQL__PASSWORD=<PG_PASS> ghcr.io/goauthentik/server:2026.8.4 server
docker run -d --name authentik-worker --env-file /opt/data/authentik/.env -e AUTHENTIK_POSTGRESQL__HOST=<pg地址> -e AUTHENTIK_SECRET_KEY=<SECRET_KEY> -e AUTHENTIK_POSTGRESQL__PASSWORD=<PG_PASS> ghcr.io/goauthentik/server:2026.8.4 worker

仅作原理理解,实际部署以 compose 为准(网络、健康检查、依赖顺序 compose 已代管)。

九、常用运维命令

cd /opt/data/authentik
export AUTHENTIK_SECRET_KEY=$(openssl rand -hex 32) PG_PASS=$(openssl rand -hex 16)   # 仅占位满足插值断言
docker compose ps                        # 实测可看三服务 healthy 与端口映射
docker compose logs -f server            # 跟踪 server 日志
docker compose restart server            # 重启单服务(不需要敏感变量)
docker compose stop && docker compose start
docker compose up -d --force-recreate server   # 应用新环境变量

十、常见问题(含实测排障记录)

Q1:ghcr.io 镜像拉不动(EOF/超时)怎么办? 实测现象:docker pull ghcr.io/goauthentik/server:2026.8.4 反复报 failed to do request: Head "https://ghcr.io/v2/.../manifests/2026.8.4": EOF;Docker Hub 同名仓库经镜像加速器返回 502。 定位:宿主机 curl -s -o /dev/null -w '%{http_code}' https://ghcr.io/v2/ 实测 401(说明直连可达,daemon 通道异常)。 解决:用 skopeo 绕过 daemon 直连下载再导入(实测成功):

skopeo copy docker://ghcr.io/goauthentik/server:2026.8.4 oci-archive:/tmp/ak.tar:2026.8.4
docker load -i /tmp/ak.tar
docker tag <上一步输出的镜像ID> ghcr.io/goauthentik/server:2026.8.4

实测 docker load 输出 Loaded image: 2026.8.4:latest,用 docker images 查到镜像 ID 后按 ID 打 tag 即可。

Q2:日志刷 FATAL: password authentication failed for user "authentik"? 实测成因:postgres 数据卷只在首次初始化时采纳 POSTGRES_PASSWORD;之后再改该变量,卷内密码仍是旧值,而 server/worker 已用新值连接 → 认证失败(server 日志每秒重试,实测现象)。 修复(不清库,实测成功):

# 1) 取当前 server 容器持有的密码(与 .env 保持一致)
PGPW=$(docker exec authentik-2026.8.4-server printenv AUTHENTIK_POSTGRESQL__PASSWORD)
# 2) 在 postgres 容器内把库用户密码改成一致
docker exec authentik-2026.8.4-postgresql psql -U authentik -d authentik \
  -c "ALTER USER authentik WITH PASSWORD '$PGPW';"
# 3) 重启两个应用进程
docker restart authentik-2026.8.4-server authentik-2026.8.4-worker

实测:ALTER ROLE 后重启,随即 docker ps 显示 healthy,/-/health/ready/ 返回 200。 预防:.env 与 compose 固化后不要单独改 PG_PASS;确要改库密码,同步执行上述三步。

Q3:首次启动 /-/health/ready/ 一直不通? 属正常:首次初始化含迁移与 Blueprint 导入,实测约 1~3 分钟;用 4.4 的轮询脚本等待即可。若 10 分钟仍不通,docker compose logs worker | grep -iE 'error|migrate' 定位。

Q4:worker 需要 docker.sock 吗? 仅当要用「Outpost 自动部署到本机」能力。不需要可删除该挂载,实测不影响核心功能。

Q5:升级版本? 改 .env 的 AUTHENTIK_TAG(或 compose 里默认值)为新版本号,docker compose up -d 重建;数据库迁移由 worker 首启自动执行。回滚改回旧 tag 前先备份数据库。

十一、参考链接