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

生产环境跑稳 ChatGPT Web:Docker Compose + Nginx + HTTPS 部署实战

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

ChatGPT Docker部署教程|生产环境实测

说明:严格来说,ChatGPT 官方模型本身不能被私有化部署,我们通常所说的“ChatGPT Docker 部署”,一般是指部署一个基于 OpenAI API、Azure OpenAI 或兼容大模型接口的 Web 客户端/网关服务,例如 ChatGPT Web、NextChat、One API、LiteLLM 等。
本文以生产环境中较常见的 Docker + Docker Compose + Nginx 反向代理 + HTTPS 方式为例,介绍如何部署一个稳定可用的 ChatGPT Web 服务。


一、部署目标

本文将完成以下目标:

  1. 使用 Docker 部署 ChatGPT Web 应用;
  2. 使用 Docker Compose 管理服务;
  3. 配置环境变量,例如 API Key、访问密码、模型地址等;
  4. 使用 Nginx 做反向代理;
  5. 配置 HTTPS;
  6. 提供生产环境常见优化方案;
  7. 给出安全加固、日志排查、升级维护建议。

适合场景:

  • 公司内部部署 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

注意事项:

  1. .env 文件中不要有多余空格;
  2. API Key 不要提交到 Git;
  3. 生产环境建议定期更换密钥;
  4. 如果使用第三方中转服务,需要确认其安全性;
  5. 企业环境建议使用内部网关统一管理模型 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.confhttp 块中添加:

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

如果访问域名打不开,优先检查:

  1. 域名解析是否正确;
  2. 服务器安全组是否放行 80/443;
  3. Nginx 是否启动;
  4. Nginx 配置是否正确;
  5. Docker 容器是否正常运行;
  6. 本机端口是否监听。

查看端口监听:

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

这样即使上游镜像更新,也不会影响当前服务。

升级前建议:

  1. 备份配置文件;
  2. 查看版本变更日志;
  3. 在测试环境验证;
  4. 低峰期升级;
  5. 保留旧版本镜像,方便回滚。

十七、接入 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 / 私有模型

该架构的优点是:

  1. Web 层只负责交互;
  2. 网关层统一管理模型和 Key;
  3. Nginx 层处理 HTTPS、限流和访问控制;
  4. 模型层可以自由切换;
  5. 后期扩展知识库、审计系统更方便。

如果是企业内部使用,建议增加:

  • 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、密钥管理、日志监控和升级策略做好,这套方案就可以长期稳定运行。

目录结构
全文