生产环境跑稳 ChatGPT Web:Docker Compose + Nginx + HTTPS 部署实战
ChatGPT Docker部署教程|生产环境实测
说明:严格来说,ChatGPT 官方模型本身不能被私有化部署,我们通常所说的“ChatGPT Docker 部署”,一般是指部署一个基于 OpenAI API、Azure OpenAI 或兼容大模型接口的 Web 客户端/网关服务,例如 ChatGPT Web、NextChat、One API、LiteLLM 等。
本文以生产环境中较常见的 Docker + Docker Compose + Nginx 反向代理 + HTTPS 方式为例,介绍如何部署一个稳定可用的 ChatGPT Web 服务。
一、部署目标
本文将完成以下目标:
- 使用 Docker 部署 ChatGPT Web 应用;
- 使用 Docker Compose 管理服务;
- 配置环境变量,例如 API Key、访问密码、模型地址等;
- 使用 Nginx 做反向代理;
- 配置 HTTPS;
- 提供生产环境常见优化方案;
- 给出安全加固、日志排查、升级维护建议。
适合场景:
- 公司内部部署 AI 助手;
- 团队共享 OpenAI / Azure OpenAI / 兼容模型服务;
- 个人服务器搭建 ChatGPT 网页端;
- 将模型 API 封装为统一入口;
- 在生产环境中长期稳定运行。
二、服务器环境准备
1. 推荐配置
如果只是部署 ChatGPT Web 前端,资源消耗并不高,通常一台轻量服务器即可。
| 项目 | 推荐配置 |
|---|---|
| CPU | 1核及以上 |
| 内存 | 1GB及以上,推荐2GB |
| 磁盘 | 20GB及以上 |
| 系统 | Ubuntu 20.04 / 22.04 / Debian 11+ |
| 网络 | 能正常访问模型 API 地址 |
| 域名 | 推荐准备一个域名 |
| HTTPS | 生产环境强烈建议开启 |
如果还要部署中转网关、向量数据库、知识库、日志系统等组件,则建议至少:
- 2核 CPU;
- 4GB 内存;
- 40GB 磁盘;
- 稳定公网带宽。
三、安装 Docker
以下命令以 Ubuntu 22.04 为例。
1. 更新系统软件包
sudo apt update
sudo apt upgrade -y
2. 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
3. 安装 Docker
推荐使用官方脚本快速安装:
curl -fsSL https://get.docker.com | bash
安装完成后,查看 Docker 版本:
docker version
如果能正常输出客户端和服务端版本,说明 Docker 已安装成功。
4. 设置 Docker 开机自启
sudo systemctl enable docker
sudo systemctl start docker
5. 安装 Docker Compose
现在 Docker 官方已将 Compose 集成为插件形式,执行:
docker compose version
如果提示找不到命令,可以安装:
sudo apt install -y docker-compose-plugin
四、选择部署方案
生产环境中,常见方案有三类:
方案一:直接部署 ChatGPT Web 客户端
优点:
- 部署简单;
- 适合个人或小团队;
- 配置 API Key 即可使用。
缺点:
- API Key 管理能力较弱;
- 不适合大量用户精细化管理;
- 统计、限流、审计能力有限。
方案二:ChatGPT Web + API 网关
例如:
- One API;
- LiteLLM;
- OpenAI API Proxy;
- 自研网关。
优点:
- 可以统一管理多个模型;
- 支持用户额度、密钥分发、日志统计;
- 适合团队或企业内部使用。
缺点:
- 架构稍复杂;
- 需要维护额外服务。
方案三:接入私有大模型接口
例如:
- Qwen;
- DeepSeek;
- GLM;
- Llama;
- Yi;
- 本地 vLLM / Ollama / LM Studio 服务。
优点:
- 数据可控;
- 可以降低部分调用成本;
- 适合内网知识库场景。
缺点:
- 模型效果、部署成本、推理速度需要综合评估;
- 运维复杂度更高。
本文采用相对通用的方式:Docker Compose 部署 ChatGPT Web,并预留对 OpenAI 兼容接口的支持。
五、创建项目目录
建议所有服务配置放到统一目录,例如:
sudo mkdir -p /opt/chatgpt-web
cd /opt/chatgpt-web
创建配置文件:
touch docker-compose.yml
touch .env
目录结构如下:
/opt/chatgpt-web
├── docker-compose.yml
└── .env
六、编写环境变量文件
编辑 .env:
vim .env
示例内容如下:
# OpenAI API Key
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
# 如果使用官方 OpenAI 接口
OPENAI_API_BASE_URL=https://api.openai.com
# 如果使用兼容 OpenAI 的中转接口,可以改成你的网关地址
# OPENAI_API_BASE_URL=https://api.example.com
# Web访问密码,建议设置复杂一些
AUTH_SECRET_KEY=yourStrongPasswordHere
# 默认模型
DEFAULT_MODEL=gpt-4o-mini
# 服务端口
PORT=3000
注意事项:
.env文件中不要有多余空格;- API Key 不要提交到 Git;
- 生产环境建议定期更换密钥;
- 如果使用第三方中转服务,需要确认其安全性;
- 企业环境建议使用内部网关统一管理模型 API。
七、编写 Docker Compose 文件
编辑 docker-compose.yml:
vim docker-compose.yml
示例配置:
services:
chatgpt-web:
image: yidadaa/chatgpt-next-web:latest
container_name: chatgpt-web
restart: always
ports:
- "${PORT}:3000"
environment:
OPENAI_API_KEY: "${OPENAI_API_KEY}"
BASE_URL: "${OPENAI_API_BASE_URL}"
CODE: "${AUTH_SECRET_KEY}"
DEFAULT_MODEL: "${DEFAULT_MODEL}"
networks:
- chatgpt_net
networks:
chatgpt_net:
driver: bridge
这里使用的是一个常见的 ChatGPT Web 镜像。实际生产中,你也可以换成其他 Web 客户端镜像,关键是理解部署方式:
image:应用镜像;container_name:容器名称;restart: always:容器异常退出后自动重启;ports:宿主机端口映射;environment:环境变量;networks:容器网络。
八、启动服务
在 /opt/chatgpt-web 目录下执行:
docker compose up -d
查看容器状态:
docker ps
如果看到类似输出,说明服务已启动:
CONTAINER ID IMAGE PORTS
xxxxxxx yidadaa/chatgpt-next-web 0.0.0.0:3000->3000/tcp
查看日志:
docker logs -f chatgpt-web
浏览器访问:
http://服务器IP:3000
如果能打开页面,说明基础部署完成。
九、配置防火墙
如果服务器启用了 UFW,需要放行端口:
sudo ufw allow 3000/tcp
sudo ufw reload
不过生产环境并不推荐直接暴露 3000 端口,而是建议只开放 80 和 443,通过 Nginx 反向代理访问。
可以先关闭 3000 公网访问,只让 Nginx 本机访问。简单做法是将端口映射改为:
ports:
- "127.0.0.1:${PORT}:3000"
完整示例:
services:
chatgpt-web:
image: yidadaa/chatgpt-next-web:latest
container_name: chatgpt-web
restart: always
ports:
- "127.0.0.1:${PORT}:3000"
environment:
OPENAI_API_KEY: "${OPENAI_API_KEY}"
BASE_URL: "${OPENAI_API_BASE_URL}"
CODE: "${AUTH_SECRET_KEY}"
DEFAULT_MODEL: "${DEFAULT_MODEL}"
networks:
- chatgpt_net
networks:
chatgpt_net:
driver: bridge
然后重新加载:
docker compose down
docker compose up -d
十、安装 Nginx
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl enable nginx
sudo systemctl start nginx
查看状态:
sudo systemctl status nginx
十一、配置 Nginx 反向代理
假设你的域名是:
chat.example.com
创建 Nginx 配置文件:
sudo vim /etc/nginx/conf.d/chatgpt-web.conf
写入以下内容:
server {
listen 80;
server_name chat.example.com;
client_max_body_size 20m;
location / {
proxy_pass http://127.0.0.1:3000;
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 $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
检查 Nginx 配置是否正确:
sudo nginx -t
重新加载:
sudo systemctl reload nginx
此时访问:
http://chat.example.com
应该可以打开 ChatGPT Web 页面。
十二、配置 HTTPS
生产环境建议必须开启 HTTPS,防止访问密码、会话内容在传输过程中被窃听。
1. 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
2. 申请证书
sudo certbot --nginx -d chat.example.com
根据提示输入邮箱并确认即可。
申请成功后,Certbot 会自动修改 Nginx 配置。
3. 测试自动续期
sudo certbot renew --dry-run
如果没有报错,说明自动续期正常。
十三、生产环境安全配置
1. 设置访问密码
如果 Web 应用支持访问码,一定要配置强密码。
示例:
AUTH_SECRET_KEY=Z8s!aP92_xxx_2025
不要使用:
123456
admin
password
chatgpt
2. 不要暴露 API Key
API Key 应只存在于服务端环境变量中,不要放到前端代码里,不要写在公开仓库里。
建议:
- 使用
.env管理; - 文件权限设置为仅 root 可读;
- 定期轮换密钥;
- 设置消费额度;
- 绑定组织权限。
修改权限:
sudo chmod 600 /opt/chatgpt-web/.env
3. 限制访问来源
如果是公司内部系统,可以通过 Nginx 白名单限制访问 IP:
location / {
allow 1.2.3.4;
allow 5.6.7.0/24;
deny all;
proxy_pass http://127.0.0.1:3000;
}
如果需要公网开放,建议结合:
- 登录认证;
- 访问码;
- IP 限流;
- WAF;
- Cloudflare;
- Nginx basic auth。
4. 配置 Nginx Basic Auth
安装工具:
sudo apt install -y apache2-utils
创建用户:
sudo htpasswd -c /etc/nginx/.chatgpt_htpasswd admin
在 Nginx 配置中加入:
auth_basic "ChatGPT Private Service";
auth_basic_user_file /etc/nginx/.chatgpt_htpasswd;
这样用户访问页面时,需要先输入 Nginx 层的用户名和密码,再进入应用。
十四、Nginx 限流配置
为了防止被刷接口,可以增加限流。
在 /etc/nginx/nginx.conf 的 http 块中添加:
limit_req_zone $binary_remote_addr zone=chatgpt_limit:10m rate=10r/m;
然后在站点配置中添加:
location / {
limit_req zone=chatgpt_limit burst=20 nodelay;
proxy_pass http://127.0.0.1:3000;
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 $scheme;
}
含义:
rate=10r/m:每个 IP 每分钟 10 次请求;burst=20:允许短时间突发 20 个请求;nodelay:突发请求不排队,立即处理。
根据实际业务可适当调整。
十五、日志查看与问题排查
1. 查看容器日志
docker logs -f chatgpt-web
如果接口调用失败,一般可以从日志中看到错误信息。
常见错误包括:
- API Key 无效;
- 模型名称错误;
- 接口地址错误;
- 网络无法访问;
- 额度不足;
- 请求被限流;
- 中转服务异常。
2. 查看 Nginx 日志
访问日志:
sudo tail -f /var/log/nginx/access.log
错误日志:
sudo tail -f /var/log/nginx/error.log
如果访问域名打不开,优先检查:
- 域名解析是否正确;
- 服务器安全组是否放行 80/443;
- Nginx 是否启动;
- Nginx 配置是否正确;
- Docker 容器是否正常运行;
- 本机端口是否监听。
查看端口监听:
sudo ss -lntp
十六、升级与回滚
1. 更新镜像
进入项目目录:
cd /opt/chatgpt-web
拉取最新镜像:
docker compose pull
重新启动:
docker compose up -d
2. 清理旧镜像
docker image prune -f
3. 生产环境建议固定版本
直接使用 latest 虽然方便,但生产环境有风险。建议固定镜像版本,例如:
image: yidadaa/chatgpt-next-web:v2.15.8
这样即使上游镜像更新,也不会影响当前服务。
升级前建议:
- 备份配置文件;
- 查看版本变更日志;
- 在测试环境验证;
- 低峰期升级;
- 保留旧版本镜像,方便回滚。
十七、接入 OpenAI 兼容接口
很多模型服务都兼容 OpenAI API 格式,例如:
- Azure OpenAI;
- DeepSeek API;
- Qwen API;
- One API;
- LiteLLM;
- 本地 Ollama 转 OpenAI 接口;
- vLLM OpenAI Server。
如果你的接口地址不是官方 OpenAI,可以修改:
OPENAI_API_BASE_URL=https://your-api.example.com
OPENAI_API_KEY=your-api-key
DEFAULT_MODEL=your-model-name
然后重启:
docker compose up -d
如果模型不显示或调用失败,重点检查:
- 模型名称是否和接口实际支持的一致;
- Base URL 是否需要带
/v1; - API Key 是否有效;
- 接口是否支持流式响应;
- 应用环境变量名称是否与镜像文档一致。
例如有些应用要求:
BASE_URL=https://api.example.com/v1
而有些要求:
OPENAI_API_BASE_URL=https://api.example.com/v1
所以在实际部署时,一定要以具体项目文档为准。
十八、生产环境实测建议
根据实际生产环境使用经验,以下几点非常重要。
1. 不要让所有用户共用一个无限额度 Key
如果团队人数较多,建议使用 API 网关统一管理。例如 One API 或 LiteLLM,可以实现:
- 用户独立 Token;
- 按用户统计用量;
- 设置调用额度;
- 设置模型权限;
- 屏蔽高成本模型;
- 失败自动切换渠道;
- 统一日志审计。
否则,一旦访问密码泄露,API 费用可能迅速失控。
2. 需要配置用量告警
建议在模型服务商后台设置:
- 月度预算;
- 邮件告警;
- 额度上限;
- Key 级别限制。
如果服务商不支持,也可以通过网关统计用量。
3. 对外开放一定要加 HTTPS
HTTP 明文传输风险很高,尤其是:
- 访问密码;
- 对话内容;
- API Token;
- 内部业务数据。
只要是生产环境,对外开放就应该启用 HTTPS。
4. 不建议将敏感数据输入第三方模型
如果涉及:
- 客户隐私;
- 合同信息;
- 财务数据;
- 医疗数据;
- 源代码;
- 内部文档;
- 账号密码;
应先进行脱敏,或使用企业合规模型服务。
5. 保留最小可用架构
生产系统并不是组件越多越好。对于小团队来说:
Nginx + ChatGPT Web + OpenAI兼容API
已经足够稳定。
只有在出现以下需求时,再引入额外组件:
- 多用户额度管理;
- 日志审计;
- 知识库问答;
- 多模型路由;
- 成本统计;
- 高可用部署。
十九、常见故障与解决方案
1. 页面可以打开,但发送消息失败
可能原因:
- API Key 错误;
- API Base URL 配错;
- 模型名称不存在;
- 服务器无法访问外部 API;
- 服务商余额不足。
排查命令:
docker logs -f chatgpt-web
也可以在服务器上测试接口连通性:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer sk-xxxxxxxx"
2. 域名打不开
检查域名解析:
ping chat.example.com
检查 Nginx:
sudo nginx -t
sudo systemctl status nginx
检查端口:
sudo ss -lntp | grep nginx
检查云厂商安全组是否放行:
- TCP 80;
- TCP 443。
3. HTTPS 证书申请失败
常见原因:
- 域名没有解析到当前服务器;
- 80 端口未开放;
- Nginx 配置错误;
- DNS 尚未生效;
- 同一域名短时间申请次数过多。
可以先确保 HTTP 能访问,再申请 HTTPS。
4. 容器启动后立刻退出
查看日志:
docker logs chatgpt-web
常见原因:
- 环境变量写错;
- 镜像架构不兼容;
- 端口被占用;
- Docker Compose 文件格式错误。
检查端口占用:
sudo lsof -i:3000
二十、备份方案
虽然 ChatGPT Web 通常不保存大量数据,但生产环境仍建议备份:
docker-compose.yml;.env;- Nginx 配置;
- HTTPS 证书;
- 网关数据库;
- 用户配置;
- 日志文件。
简单备份命令:
sudo tar -czvf chatgpt-web-backup-$(date +%F).tar.gz /opt/chatgpt-web /etc/nginx/conf.d/chatgpt-web.conf
如果部署了 One API、数据库或知识库,则需要额外备份数据库。
二十一、推荐生产架构
对于较正式的生产环境,可以采用如下架构:
用户浏览器
|
HTTPS
|
Nginx / WAF / CDN
|
ChatGPT Web
|
API Gateway
|
OpenAI / Azure OpenAI / DeepSeek / Qwen / 私有模型
该架构的优点是:
- Web 层只负责交互;
- 网关层统一管理模型和 Key;
- Nginx 层处理 HTTPS、限流和访问控制;
- 模型层可以自由切换;
- 后期扩展知识库、审计系统更方便。
如果是企业内部使用,建议增加:
- SSO 单点登录;
- LDAP / OAuth2;
- 用户权限管理;
- 调用日志审计;
- 敏感词过滤;
- 数据脱敏;
- 成本预算控制。
二十二、完整 docker-compose.yml 示例
下面给出一个相对完整、适合生产环境起步的配置:
services:
chatgpt-web:
image: yidadaa/chatgpt-next-web:latest
container_name: chatgpt-web
restart: always
ports:
- "127.0.0.1:3000:3000"
environment:
OPENAI_API_KEY: "${OPENAI_API_KEY}"
BASE_URL: "${OPENAI_API_BASE_URL}"
CODE: "${AUTH_SECRET_KEY}"
DEFAULT_MODEL: "${DEFAULT_MODEL}"
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
networks:
- chatgpt_net
networks:
chatgpt_net:
driver: bridge
对应 .env:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
OPENAI_API_BASE_URL=https://api.openai.com
AUTH_SECRET_KEY=ChangeMe_To_A_Strong_Password
DEFAULT_MODEL=gpt-4o-mini
启动:
cd /opt/chatgpt-web
docker compose up -d
查看状态:
docker ps
docker logs -f chatgpt-web
二十三、总结
通过本文的步骤,我们完成了一个较完整的 ChatGPT Docker 生产环境部署流程,包括:
- Docker 安装;
- Docker Compose 编排;
- ChatGPT Web 服务启动;
- 环境变量配置;
- Nginx 反向代理;
- HTTPS 证书申请;
- 安全加固;
- 日志排查;
- 升级维护;
- 生产环境架构建议。
如果只是个人使用,部署一个 ChatGPT Web 容器即可满足需求;如果是团队或企业使用,则建议增加 API 网关、用户权限、额度控制、日志审计和安全防护。
最后再强调一次:ChatGPT 模型本身不是通过 Docker 私有化部署的,Docker 部署的是调用模型 API 的 Web 应用或网关服务。
在生产环境中,稳定性、安全性和成本控制比“能跑起来”更重要。只要把访问控制、HTTPS、密钥管理、日志监控和升级策略做好,这套方案就可以长期稳定运行。