上一篇 下一篇 分享链接 返回 返回顶部

Coze 上线实战:从 Docker Compose 到 HTTPS 的生产部署方案 Coze 生产部署全流程:配置、反代、备份与安全加固 一套可落地的 Coze 生产环境部署方案 Coze 企业级部署指南:稳定运行、数据持久化与配置模板 Coze 正式上线怎么做?这份生产部署清单够用了

发布人:慈云数据-客服中心 发布时间:16小时前 阅读量:5

Coze 生产环境部署指南|附配置文件

Coze 是面向智能体应用开发的平台,适合用于构建企业知识库问答、流程自动化助手、客服机器人、多工具协作 Agent 等场景。相比本地体验或测试环境,生产环境部署更关注 稳定性、安全性、可观测性、数据持久化、扩展能力与故障恢复。本文将从生产部署架构、服务器准备、Docker Compose 部署、Nginx 反向代理、HTTPS 配置、环境变量配置、数据持久化、日志监控、备份恢复等方面,系统介绍 Coze 在生产环境中的部署方法,并附上可参考的配置文件模板。

说明:本文提供的是通用生产部署思路与配置模板。不同版本的 Coze、不同企业网络环境以及不同的模型服务接入方式,可能存在配置差异。正式上线前,请结合官方文档和实际版本进行调整。


一、生产环境部署目标

在生产环境中部署 Coze,不建议简单地使用本地开发模式直接运行。一个合格的生产部署至少需要满足以下目标:

  1. 服务稳定运行

    • 支持进程异常自动重启;
    • 服务器重启后服务自动恢复;
    • 核心数据不因容器重建而丢失。
  2. 数据持久化

    • 数据库、对象存储、向量数据、日志文件等应独立挂载;
    • 避免将业务数据保存在容器临时目录中。
  3. 安全访问

    • 前端与 API 通过 HTTPS 暴露;
    • 后端服务、数据库、缓存等不直接暴露公网;
    • 密钥、Token、数据库密码不写死在镜像中。
  4. 可观测性

    • 具备基础日志查看能力;
    • 可以监控服务健康状态;
    • 方便后续接入 Prometheus、Grafana、ELK、Loki 等系统。
  5. 可扩展与易维护

    • 配置文件清晰;
    • 支持灰度升级、版本回滚;
    • 支持后续迁移到 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 生产环境,至少应做到:

配置可管理
数据可持久
服务可恢复
问题可观测
升级可回滚
安全可控制

只要围绕这几个目标设计和部署,就能大幅降低生产运行风险,为后续智能体应用的持续迭代打下稳定基础。

目录结构
全文