Zentrola 是面向研发团队的企业 AI Coding 能力治理平台,位于 Codex、Claude Code 等 AI Coding Client 与企业模型订阅之间。
它可以集中管理 Provider、Credential、逻辑模型、成员、Group、Virtual Key、调用用量和操作记录,并提供 OpenAI 与 Anthropic 兼容接口、协议转换及 Provider 故障切换。
同一个镜像包含两个程序:
| 启动命令 | 用途 | 默认端口 |
|---|---|---|
backend | Backend、Admin API 和模型 Gateway | 9527 |
web | Admin Web 管理界面 | 9528 |
推荐使用项目提供的 Docker Compose 配置,同时启动 Zentrola、PostgreSQL 17 和 Redis。
curl -fsSLO https://raw.githubusercontent.com/zentrola/zentrola/main/compose.yaml
也可以直接从 GitHub 下载:
https://github.com/zentrola/zentrola/blob/main/compose.yaml
需要 Docker Compose 2.23.1 或更高版本。
打开 compose.yaml,修改文件顶部 x-required-settings 下的四项配置:
x-required-settings:
postgres-password: &postgres-password "REPLACE_WITH_STRONG_POSTGRES_PASSWORD"
redis-password: &redis-password "REPLACE_WITH_STRONG_REDIS_PASSWORD"
admin-jwt-secret: &admin-jwt-secret "REPLACE_WITH_BASE64_32_BYTE_SECRET"
master-key-file: &master-key-file |
MASTER_KEY=REPLACE_WITH_BASE64_32_BYTE_KEY
要求:
postgres-password:PostgreSQL 高强度密码redis-password:Redis 高强度密码admin-jwt-secret:至少 32 个随机字节的 Base64 字符串MASTER_KEY:另一组独立的 32 个随机字节的 Base64 字符串可以使用以下命令生成随机密钥:
openssl rand -base64 32
请分别生成 ADMIN_JWT_SECRET 和 MASTER_KEY,不要重复使用同一个值。
MASTER_KEY用于加密 Provider Credential。必须与 PostgreSQL 数据一起备份;丢失后,数据库中已有的 Provider Credential 将无法解密。
docker compose up -d
服务启动后:
127.0.0.1:15432打开 Admin Web 后创建首位管理员。Zentrola 不提供默认用户名或密码。
docker compose ps
docker compose logs -f backend
Backend 健康检查:
curl -fsS http://127.0.0.1:9527/health/live
curl -i http://127.0.0.1:9527/health/ready
/health/live:Backend 可以响应 HTTP 请求/health/ready:检查 PostgreSQL、Master Key 和管理员初始化状态停止服务但保留数据:
docker compose stop
重新启动:
docker compose start
更新配置或镜像后重新创建容器:
docker compose up -d
不要把
docker compose down -v作为日常停止命令。该命令会永久删除 PostgreSQL、Redis 和 Zentrola 的命名数据卷。
docker pull longjianghu/zentrola:1.0.0
建议生产部署固定使用明确的版本号,而不是依赖浮动标签。
生产环境推荐直接使用项目提供的 compose.yaml。如果需要连接已有的 PostgreSQL 和 Redis,可以单独启动 Backend:
docker run -d \
--name zentrola-backend \
--restart unless-stopped \
-p 9527:9527 \
-e APP_ENV=prod \
-e HTTP_ADDR=:9527 \
-e POSTGRES_HOST=postgres.example.com \
-e POSTGRES_PORT=5432 \
-e POSTGRES_DB=zentrola \
-e POSTGRES_USER=zentrola \
-e POSTGRES_PASSWORD=REPLACE_WITH_STRONG_PASSWORD \
-e POSTGRES_SSLMODE=require \
-e REDIS_HOST=redis.example.com \
-e REDIS_PORT=6379 \
-e REDIS_DB=2 \
-e REDIS_PASSWORD=REPLACE_WITH_REDIS_PASSWORD \
-e ADMIN_JWT_SECRET=REPLACE_WITH_BASE64_32_BYTE_SECRET \
-e MIGRATIONS_AUTO_APPLY=true \
-e CORS_ENABLED=true \
-e CORS_ALLOWED_ORIGINS=https://zentrola.example.com \
-v /absolute/path/to/zentrola.env:/app/.env:ro \
-v zentrola_data:/app/data \
longjianghu/zentrola:1.0.0 \
backend
挂载到 /app/.env 的文件至少需要包含:
MASTER_KEY=REPLACE_WITH_BASE64_32_BYTE_KEY
MASTER_KEY 只能从 Backend 选定的通用配置文件读取,不能仅通过容器环境变量传入。
生产数据库应启用 TLS,并设置适当的 POSTGRES_SSLMODE。
docker run -d \
--name zentrola-web \
--restart unless-stopped \
-p 9528:9528 \
-e WEB_ADDR=:9528 \
-e WEB_API_BASE_URL=https://api.example.com \
-e WEB_GATEWAY_BASE_URL=https://api.example.com \
longjianghu/zentrola:1.0.0 \
web \
--api https://api.example.com \
--gateway https://api.example.com
WEB_API_BASE_URL 和 WEB_GATEWAY_BASE_URL 必须是用户浏览器和 AI Client 能够访问的地址,不能填写仅容器内部可见的主机名。
同时需要在 Backend 中设置:
CORS_ENABLED=true
CORS_ALLOWED_ORIGINS=https://zentrola.example.com
登录 Admin Web 后:
验证 OpenAI 兼容模型列表:
curl http://127.0.0.1:9527/v1/models \
-H "Authorization: Bearer <virtual-key>"
发送 OpenAI 兼容对话请求:
curl http://127.0.0.1:9527/v1/chat/completions \
-H "Authorization: Bearer <virtual-key>" \
-H "Content-Type: application/json" \
-d '{"model":"<logical-model-code>","messages":[{"role":"user","content":"你好"}]}'
Anthropic 兼容客户端使用以下 Base URL:
http://127.0.0.1:9527/anthropic
客户端配置说明:
https://github.com/zentrola/zentrola/blob/main/docs/client-configuration.zh-CN.md
升级前必须:
MASTER_KEY。拉取并启动新版本:
docker compose pull
docker compose up -d
升级后应检查:
docker compose ps
curl -fsS http://127.0.0.1:9527/health/live
curl -i http://127.0.0.1:9527/health/ready
还应验证管理员登录、Provider 状态以及一次已授权的 Gateway 调用。
compose.yaml。ADMIN_JWT_SECRET 和 MASTER_KEY 分别保存。MASTER_KEY 必须与 PostgreSQL 数据作为同一恢复集备份。APP_ENV=prod。Content type
Image
Digest
sha256:b263b6bcb…
Size
143.8 MB
Last updated
4 days ago
docker pull longjianghu/zentrola