Authentik:企業級開源身分認證與 SSO 平台
- 官方網站:https://goauthentik.io/
- 官方文件:https://goauthentik.io/docs/
- GitHub 儲存庫:goauthentik/authentik
Authentik 是一款功能強大的開源統一身分識別與存取管理平台 (IAM / IdP)。當你的 Homelab 規模逐漸擴大、服務數量眾多,且需要同時支援 OIDC、SAML、LDAP 以及為無內建登入機制的應用加上反向代理認證門神 (Forward Auth) 時,Authentik 是最佳的企業級解決方案。
主要特色
- 全面協定相容:原生支援 OpenID Connect (OIDC)、OAuth 2.0、SAML 2.0、LDAP 伺服器與 SCIM 使用者同步。
- Proxy Outpost 認證門神:可作為反向代理(如 Nginx Proxy Manager、Traefik)的前置認證層,為任何沒有內建帳號系統的內部網頁加上登入防護。
- 靈活的流程引擎 (Flows & Stages):自由定義使用者註冊、登入、密碼重設與 MFA (Passkey, TOTP) 驗證流程。
- 精細的 RBAC 角色與群組權限:可根據使用者所屬群組,動態決定其對特定應用的存取授權。
部署步驟 (Docker Compose)
Authentik 由 Server(主程式)、Worker(背景工作節點)、PostgreSQL 與 Redis 組成。
1. 建立目錄
sudo mkdir -p /opt/stacks/authentik/database /opt/stacks/authentik/redis /opt/stacks/authentik/media /opt/stacks/authentik/certs /opt/stacks/authentik/templates
cd /opt/stacks/authentik
2. 建立 .env 環境變數
# 產生 60 位元隨機金鑰 (openssl rand -base64 36)
AUTHENTIK_SECRET_KEY=請替換為隨機字串
# PostgreSQL 資料庫設定
PG_USER=authentik
PG_PASS=請替換為資料庫安全密碼
PG_DB=authentik
# 容器版本標籤
AUTHENTIK_IMAGE=ghcr.io/goauthentik/server
AUTHENTIK_TAG=latest
# Web 訪問埠號
COMPOSE_PORT_HTTP=9000
COMPOSE_PORT_HTTPS=9443
3. 建立 compose.yaml
services:
postgresql:
image: docker.io/library/postgres:16-alpine
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
start_period: 20s
interval: 30s
retries: 5
timeout: 5s
volumes:
- ./database:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: ${PG_PASS}
POSTGRES_USER: ${PG_USER}
POSTGRES_DB: ${PG_DB}
redis:
image: docker.io/library/redis:alpine
command: --save 60 1 --loglevel warning
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
start_period: 20s
interval: 30s
retries: 5
timeout: 3s
volumes:
- ./redis:/data
server:
image: ${AUTHENTIK_IMAGE}:${AUTHENTIK_TAG}
restart: unless-stopped
command: server
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
volumes:
- ./media:/media
- ./custom-templates:/templates
env_file:
- .env
ports:
- "${COMPOSE_PORT_HTTP}:9000"
- "${COMPOSE_PORT_HTTPS}:9443"
depends_on:
postgresql:
condition: service_healthy
redis:
condition: service_healthy
worker:
image: ${AUTHENTIK_IMAGE}:${AUTHENTIK_TAG}
restart: unless-stopped
command: worker
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
user: root
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./media:/media
- ./certs:/certs
- ./custom-templates:/templates
env_file:
- .env
depends_on:
postgresql:
condition: service_healthy
redis:
condition: service_healthy
4. 啟動服務
sudo docker compose up -d
初始設定
- 服務啟動後,在瀏覽器打開:
http://<VM_IP>:9000/if/flow/initial-setup/ - 依照引導設定管理員 (
akadmin) 的電子郵件與密碼。 - 進入管理後台後,即可開始建立 Applications (應用程式) 與 Providers (提供者)。