Coze 上线实战:从 Docker Compose 到 HTTPS 的生产部署方案 Coze 生产部署全流程:配置、反代、备份与安全加固 一套可落地的 Coze 生产环境部署方案 Coze 企业级部署指南:稳定运行、数据持久化与配置模板 Coze 正式上线怎么做?这份生产部署清单够用了
Coze 生产环境部署指南|附配置文件
Coze 是面向智能体应用开发的平台,适合用于构建企业知识库问答、流程自动化助手、客服机器人、多工具协作 Agent 等场景。相比本地体验或测试环境,生产环境部署更关注 稳定性、安全性、可观测性、数据持久化、扩展能力与故障恢复。本文将从生产部署架构、服务器准备、Docker Compose 部署、Nginx 反向代理、HTTPS 配置、环境变量配置、数据持久化、日志监控、备份恢复等方面,系统介绍 Coze 在生产环境中的部署方法,并附上可参考的配置文件模板。
说明:本文提供的是通用生产部署思路与配置模板。不同版本的 Coze、不同企业网络环境以及不同的模型服务接入方式,可能存在配置差异。正式上线前,请结合官方文档和实际版本进行调整。
一、生产环境部署目标
在生产环境中部署 Coze,不建议简单地使用本地开发模式直接运行。一个合格的生产部署至少需要满足以下目标:
-
服务稳定运行
- 支持进程异常自动重启;
- 服务器重启后服务自动恢复;
- 核心数据不因容器重建而丢失。
-
数据持久化
- 数据库、对象存储、向量数据、日志文件等应独立挂载;
- 避免将业务数据保存在容器临时目录中。
-
安全访问
- 前端与 API 通过 HTTPS 暴露;
- 后端服务、数据库、缓存等不直接暴露公网;
- 密钥、Token、数据库密码不写死在镜像中。
-
可观测性
- 具备基础日志查看能力;
- 可以监控服务健康状态;
- 方便后续接入 Prometheus、Grafana、ELK、Loki 等系统。
-
可扩展与易维护
- 配置文件清晰;
- 支持灰度升级、版本回滚;
- 支持后续迁移到 Kubernetes 或云原生环境。
二、推荐生产架构
生产环境推荐采用如下架构:
用户浏览器
|
| HTTPS
v
Nginx / 网关 / 负载均衡
|
| HTTP / 内网
v
Coze Web / API 服务
|
|------------------ PostgreSQL / MySQL
|------------------ Redis
|------------------ 对象存储 MinIO / S3
|------------------ 向量数据库
|------------------ 模型服务 OpenAI / Claude / 私有大模型
其中:
- Nginx:负责 HTTPS 证书、反向代理、静态资源缓存、访问控制;
- Coze 服务:承载前端页面、API、智能体编排、插件调用等核心逻辑;
- 数据库:保存用户、智能体配置、会话、工作流、知识库元数据等;
- Redis:用于缓存、会话、任务队列或限流等;
- 对象存储:用于存储上传文件、知识库文档、图片等;
- 向量数据库:用于知识库检索、语义搜索等;
- 模型服务:可以使用公有云模型 API,也可以接入企业私有大模型。
三、服务器环境准备
1. 推荐服务器配置
如果是中小规模生产环境,可以从以下配置开始:
| 组件 | 推荐配置 |
|---|---|
| CPU | 8 核及以上 |
| 内存 | 16GB 及以上 |
| 磁盘 | SSD 200GB 及以上 |
| 系统 | Ubuntu 22.04 LTS / Debian 12 / CentOS Stream |
| 网络 | 公网 IP + 域名 |
| Docker | 24.x 及以上 |
| Docker Compose | v2.x |
如果知识库文件较多、并发量较高、向量检索规模较大,建议将数据库、对象存储、向量数据库拆分到独立服务器或使用云服务托管。
2. 安装基础依赖
以 Ubuntu 22.04 为例:
sudo apt update
sudo apt install -y curl wget git vim unzip ca-certificates gnupg lsb-release
安装 Docker:
curl -fsSL https://get.docker.com | bash
sudo systemctl enable docker
sudo systemctl start docker
安装 Docker Compose 插件:
docker compose version
如果命令不可用,可以手动安装:
sudo apt install -y docker-compose-plugin
创建部署目录:
sudo mkdir -p /opt/coze
sudo chown -R $USER:$USER /opt/coze
cd /opt/coze
四、目录规划
生产环境建议采用清晰的目录结构:
/opt/coze
├── docker-compose.yml
├── .env
├── nginx
│ ├── conf.d
│ │ └── coze.conf
│ └── certs
│ ├── fullchain.pem
│ └── privkey.pem
├── data
│ ├── postgres
│ ├── redis
│ ├── minio
│ └── vector
├── logs
│ ├── nginx
│ └── coze
└── backup
说明:
.env:保存环境变量;docker-compose.yml:服务编排文件;nginx/conf.d/coze.conf:Nginx 反向代理配置;data:保存数据库、缓存、对象存储等持久化数据;logs:保存日志;backup:保存备份文件。
五、环境变量配置文件
在 /opt/coze/.env 中编写如下配置。实际使用时请替换域名、密码、密钥和模型 API 地址。
########################################
# 基础配置
########################################
COZE_ENV=production
COZE_DOMAIN=coze.example.com
COZE_PUBLIC_URL=https://coze.example.com
TZ=Asia/Shanghai
########################################
# 服务端口
########################################
COZE_WEB_PORT=8080
COZE_API_PORT=8888
########################################
# 数据库配置
########################################
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=coze
POSTGRES_USER=coze
POSTGRES_PASSWORD=PLEASE_CHANGE_POSTGRES_PASSWORD
DATABASE_URL=postgresql://coze:PLEASE_CHANGE_POSTGRES_PASSWORD@postgres:5432/coze
########################################
# Redis 配置
########################################
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=PLEASE_CHANGE_REDIS_PASSWORD
REDIS_URL=redis://:PLEASE_CHANGE_REDIS_PASSWORD@redis:6379/0
########################################
# 对象存储配置
########################################
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=PLEASE_CHANGE_MINIO_PASSWORD
S3_ENDPOINT=http://minio:9000
S3_BUCKET=coze
S3_ACCESS_KEY=admin
S3_SECRET_KEY=PLEASE_CHANGE_MINIO_PASSWORD
S3_REGION=us-east-1
S3_FORCE_PATH_STYLE=true
########################################
# JWT / Session / 加密密钥
########################################
JWT_SECRET=PLEASE_CHANGE_RANDOM_JWT_SECRET
SESSION_SECRET=PLEASE_CHANGE_RANDOM_SESSION_SECRET
ENCRYPTION_KEY=PLEASE_CHANGE_32_BYTES_SECRET
########################################
# 模型服务配置
########################################
LLM_PROVIDER=openai
OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_API_KEY=PLEASE_CHANGE_OPENAI_API_KEY
DEFAULT_MODEL=gpt-4o-mini
########################################
# 向量数据库配置示例
########################################
VECTOR_DB_TYPE=milvus
MILVUS_HOST=milvus
MILVUS_PORT=19530
########################################
# 日志配置
########################################
LOG_LEVEL=info
LOG_DIR=/app/logs
########################################
# 安全配置
########################################
CORS_ALLOW_ORIGINS=https://coze.example.com
COOKIE_SECURE=true
COOKIE_SAME_SITE=lax
重要提醒
生产环境中,以下配置一定不要使用默认值:
POSTGRES_PASSWORD
REDIS_PASSWORD
MINIO_ROOT_PASSWORD
JWT_SECRET
SESSION_SECRET
ENCRYPTION_KEY
OPENAI_API_KEY
建议使用如下命令生成随机密钥:
openssl rand -hex 32
六、Docker Compose 配置文件
下面是一个生产环境参考版 docker-compose.yml。其中 Coze 镜像名称需要根据你的实际版本替换。
version: "3.9"
services:
coze-web:
image: your-registry/coze-web:latest
container_name: coze-web
restart: always
env_file:
- .env
ports:
- "${COZE_WEB_PORT}:8080"
volumes:
- ./logs/coze:/app/logs
depends_on:
- coze-api
networks:
- coze-net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
coze-api:
image: your-registry/coze-api:latest
container_name: coze-api
restart: always
env_file:
- .env
ports:
- "${COZE_API_PORT}:8888"
volumes:
- ./logs/coze:/app/logs
depends_on:
- postgres
- redis
- minio
- milvus
networks:
- coze-net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8888/health"]
interval: 30s
timeout: 10s
retries: 3
postgres:
image: postgres:15
container_name: coze-postgres
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
TZ: ${TZ}
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks:
- coze-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 30s
timeout: 10s
retries: 5
redis:
image: redis:7
container_name: coze-redis
restart: always
command: >
redis-server
--appendonly yes
--requirepass ${REDIS_PASSWORD}
volumes:
- ./data/redis:/data
networks:
- coze-net
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 30s
timeout: 10s
retries: 5
minio:
image: minio/minio:latest
container_name: coze-minio
restart: always
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
- ./data/minio:/data
networks:
- coze-net
ports:
- "9000:9000"
- "9001:9001"
milvus:
image: milvusdb/milvus:v2.4.0
container_name: coze-milvus
restart: always
command: ["milvus", "run", "standalone"]
environment:
ETCD_USE_EMBED: "true"
COMMON_STORAGETYPE: "local"
volumes:
- ./data/vector:/var/lib/milvus
networks:
- coze-net
ports:
- "19530:19530"
nginx:
image: nginx:1.25
container_name: coze-nginx
restart: always
depends_on:
- coze-web
- coze-api
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/certs:/etc/nginx/certs
- ./logs/nginx:/var/log/nginx
networks:
- coze-net
networks:
coze-net:
driver: bridge
七、Nginx 反向代理配置
创建配置文件:
mkdir -p /opt/coze/nginx/conf.d
vim /opt/coze/nginx/conf.d/coze.conf
写入如下内容:
server {
listen 80;
server_name coze.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name coze.example.com;
ssl_certificate /etc/nginx/certs/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 100m;
access_log /var/log/nginx/coze_access.log;
error_log /var/log/nginx/coze_error.log;
location / {
proxy_pass http://coze-web:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/ {
proxy_pass http://coze-api:8888;
proxy_http_version 1.1;
proxy_connect_timeout 60s;
proxy_send_timeout 120s;
proxy_read_timeout 120s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
如果你的 Coze API 路径不是 /api/,需要根据实际路由调整。
八、HTTPS 证书配置
方式一:使用已有证书
将证书上传至:
/opt/coze/nginx/certs/fullchain.pem
/opt/coze/nginx/certs/privkey.pem
确保权限安全:
chmod 600 /opt/coze/nginx/certs/privkey.pem
方式二:使用 Let’s Encrypt
如果你希望使用免费证书,可以使用 Certbot。由于 Nginx 在容器内运行,建议先临时停止容器中的 Nginx,申请证书后再复制到部署目录。
sudo apt install -y certbot
sudo certbot certonly --standalone -d coze.example.com
申请成功后复制证书:
mkdir -p /opt/coze/nginx/certs
sudo cp /etc/letsencrypt/live/coze.example.com/fullchain.pem /opt/coze/nginx/certs/fullchain.pem
sudo cp /etc/letsencrypt/live/coze.example.com/privkey.pem /opt/coze/nginx/certs/privkey.pem
sudo chown -R $USER:$USER /opt/coze/nginx/certs
证书续期可以通过定时任务完成:
sudo crontab -e
添加:
0 3 * * * certbot renew --quiet && docker restart coze-nginx
九、启动服务
在 /opt/coze 目录执行:
docker compose pull
docker compose up -d
查看服务状态:
docker compose ps
查看日志:
docker compose logs -f coze-api
docker compose logs -f coze-web
docker compose logs -f nginx
如果所有服务正常启动,可以访问:
https://coze.example.com
十、初始化数据库与对象存储
部分版本的 Coze 可能需要执行数据库迁移、初始化管理员账号或创建默认配置。一般流程如下:
docker compose exec coze-api sh
进入容器后执行类似命令:
./coze migrate
./coze init-admin
如果实际镜像不包含上述命令,请以官方版本说明为准。
MinIO 默认不会自动创建业务 Bucket,可以进入 MinIO 控制台:
http://服务器IP:9001
登录后创建 Bucket:
coze
生产环境建议不要长期将 MinIO 控制台端口 9001 暴露在公网。如果需要管理,可通过 VPN、堡垒机或临时开放安全组访问。
十一、安全加固建议
1. 关闭不必要的公网端口
生产环境中,建议公网只开放:
80
443
22
数据库、Redis、MinIO、Milvus 等服务不应直接暴露到公网。
在 docker-compose.yml 中,如果不需要外部访问,可以移除如下端口映射:
ports:
- "9000:9000"
- "9001:9001"
- "19530:19530"
保留在内部网络中使用即可。
2. 使用强密码与密钥
不要使用:
123456
password
admin
coze
建议所有密码长度不少于 16 位,包含大小写字母、数字和特殊字符。
3. 限制管理后台访问
如果 Coze 提供管理后台,可以在 Nginx 层增加 IP 白名单:
location /admin/ {
allow 192.168.1.0/24;
deny all;
proxy_pass http://coze-web:8080;
}
4. 防止大文件滥用
根据业务需要限制上传大小:
client_max_body_size 100m;
如果知识库文件较大,可以调整为:
client_max_body_size 500m;
但不建议无限制放开。
十二、日志与监控
1. 查看容器日志
docker compose logs -f
查看最近 200 行日志:
docker compose logs --tail=200 coze-api
2. 配置 Docker 日志大小
为避免日志撑满磁盘,可以在 /etc/docker/daemon.json 中配置:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "200m",
"max-file": "5"
}
}
重启 Docker:
sudo systemctl restart docker
3. 监控建议
生产环境建议至少监控以下指标:
- CPU 使用率;
- 内存使用率;
- 磁盘使用率;
- 容器运行状态;
- API 响应时间;
- 数据库连接数;
- Redis 内存占用;
- 模型 API 调用失败率;
- 知识库检索耗时。
可以使用 Prometheus + Grafana,也可以使用云厂商自带监控服务。
十三、数据备份方案
1. PostgreSQL 备份
创建备份脚本:
vim /opt/coze/backup/backup-postgres.sh
写入:
#!/bin/bash
set -e
BACKUP_DIR="/opt/coze/backup/postgres"
DATE=$(date +"%Y%m%d_%H%M%S")
mkdir -p ${BACKUP_DIR}
docker exec coze-postgres pg_dump \
-U coze \
-d coze \
> ${BACKUP_DIR}/coze_${DATE}.sql
find ${BACKUP_DIR} -type f -name "*.sql" -mtime +14 -delete
赋予执行权限:
chmod +x /opt/coze/backup/backup-postgres.sh
添加定时任务:
crontab -e
写入:
0 2 * * * /opt/coze/backup/backup-postgres.sh
2. MinIO 数据备份
如果是单机 MinIO,可以定期同步数据目录:
rsync -av /opt/coze/data/minio/ /backup/coze-minio/
更推荐使用 MinIO Client mc 同步到远端对象存储:
mc alias set local http://127.0.0.1:9000 admin PLEASE_CHANGE_MINIO_PASSWORD
mc mirror local/coze s3backup/coze
3. 恢复数据库
恢复时先停止相关服务:
docker compose stop coze-api coze-web
执行恢复:
cat /opt/coze/backup/postgres/coze_20250101_020000.sql | \
docker exec -i coze-postgres psql -U coze -d coze
恢复完成后启动服务:
docker compose start coze-api coze-web
十四、版本升级与回滚
1. 升级前准备
升级前务必完成三件事:
docker compose ps
/opt/coze/backup/backup-postgres.sh
cp docker-compose.yml docker-compose.yml.bak
cp .env .env.bak
同时建议记录当前镜像版本:
docker images | grep coze
2. 拉取新镜像并重启
docker compose pull
docker compose up -d
观察日志:
docker compose logs -f coze-api
3. 回滚
如果新版本异常,可以将镜像 tag 改回旧版本:
image: your-registry/coze-api:previous-version
然后执行:
docker compose up -d
如果涉及数据库结构变更,回滚前应确认数据库迁移是否可逆。必要时恢复备份。
十五、常见问题排查
1. 页面可以打开,但 API 请求失败
检查 Nginx 配置中的 API 路径:
location /api/ {
proxy_pass http://coze-api:8888;
}
确认 API 服务端口是否正确:
docker compose ps
docker compose logs -f coze-api
2. 登录后 Cookie 不生效
检查以下配置:
COZE_PUBLIC_URL=https://coze.example.com
COOKIE_SECURE=true
COOKIE_SAME_SITE=lax
如果使用 HTTPS,COOKIE_SECURE 应为 true。
3. 数据库连接失败
查看 PostgreSQL 是否健康:
docker compose ps postgres
docker compose logs -f postgres
检查 .env 中密码是否一致:
POSTGRES_PASSWORD
DATABASE_URL
4. Redis 认证失败
确认 Redis 启动命令中使用了密码:
command: >
redis-server
--appendonly yes
--requirepass ${REDIS_PASSWORD}
并确认应用侧 Redis URL:
REDIS_URL=redis://:PLEASE_CHANGE_REDIS_PASSWORD@redis:6379/0
5. 知识库上传失败
重点检查:
- Nginx 上传大小限制;
- MinIO Bucket 是否存在;
- S3 Access Key 与 Secret Key 是否正确;
- 对象存储服务是否能从 Coze API 容器访问。
可以进入 API 容器测试:
docker compose exec coze-api sh
curl http://minio:9000
十六、生产上线检查清单
上线前建议逐项确认:
- [ ] 域名 DNS 已解析到服务器;
- [ ] HTTPS 证书有效;
- [ ]
.env中所有默认密码已修改; - [ ] 数据库、Redis、对象存储未暴露公网;
- [ ] Nginx 反向代理路径正确;
- [ ] 数据目录已挂载到宿主机;
- [ ] 已配置数据库定时备份;
- [ ] 已限制 Docker 日志大小;
- [ ] 已验证模型 API 可用;
- [ ] 已完成一次服务重启测试;
- [ ] 已完成一次备份恢复演练;
- [ ] 已配置基础监控与告警。
十七、总结
Coze 的生产环境部署重点不只是“能跑起来”,更重要的是让系统在真实业务流量下保持稳定、安全和可维护。对于中小团队来说,Docker Compose 是较为合适的起步方案,部署成本低、结构清晰、维护方便;当并发规模扩大后,可以逐步将数据库、对象存储、向量数据库和模型服务拆分为独立组件,甚至迁移到 Kubernetes 环境中。
本文给出的配置文件覆盖了生产部署中的核心部分:.env 环境变量、docker-compose.yml 服务编排、Nginx HTTPS 反向代理、备份脚本和常见排查方法。实际落地时,应根据你的 Coze 版本、镜像名称、模型供应商、知识库规模和企业安全规范进行调整。
一个可靠的 Coze 生产环境,至少应做到:
配置可管理
数据可持久
服务可恢复
问题可观测
升级可回滚
安全可控制
只要围绕这几个目标设计和部署,就能大幅降低生产运行风险,为后续智能体应用的持续迭代打下稳定基础。