从零搭建可上线的 ChatGPT 服务:Docker、Nginx、HTTPS 全流程命令指南
ChatGPT 生产环境部署指南|附完整命令
本文面向希望在公司内网、团队知识库、客服系统或个人服务器上部署“ChatGPT 对话应用”的开发者与运维人员。需要特别说明:这里的“部署 ChatGPT”通常不是部署 OpenAI 官方模型本体,而是部署一个可访问 OpenAI API 或兼容大模型 API 的 Web 服务/前端应用,例如企业内部聊天入口、AI 助手门户、私有化网关等。
一、部署目标与整体架构
在生产环境中,我们通常希望部署一个稳定、安全、可维护的 ChatGPT Web 服务,用户通过浏览器访问,后端或前端调用 OpenAI API、Azure OpenAI、国产大模型 API,或公司内部大模型网关。
一个典型生产架构如下:
用户浏览器
↓ HTTPS
Nginx / Caddy 反向代理
↓
ChatGPT Web 应用
↓
OpenAI API / Azure OpenAI / 本地大模型网关
生产环境部署重点包括:
- 稳定运行:服务崩溃后自动重启。
- HTTPS 加密:避免 API Key、会话内容明文传输。
- 访问控制:限制非授权用户访问。
- 日志与监控:便于排查问题。
- 密钥安全:避免把 API Key 暴露到前端或代码仓库。
- 可升级可回滚:上线后可以快速更新版本。
二、服务器准备
本文以 Ubuntu 22.04 LTS 为例,推荐配置如下:
| 场景 | CPU | 内存 | 磁盘 | 说明 |
|---|---|---|---|---|
| 个人使用 | 1 核 | 1GB | 20GB | 仅部署 Web 应用 |
| 小团队 | 2 核 | 2GB-4GB | 40GB | 建议启用 HTTPS 和访问控制 |
| 企业内部 | 4 核+ | 8GB+ | 80GB+ | 可配合网关、审计、监控 |
如果只是调用第三方大模型 API,服务器不需要 GPU。GPU 主要用于本地部署大模型推理服务,例如 Qwen、Llama、DeepSeek 等。
三、初始化服务器环境
登录服务器:
ssh root@your_server_ip
更新系统软件包:
apt update && apt upgrade -y
安装常用工具:
apt install -y curl wget git vim htop unzip ufw ca-certificates gnupg lsb-release
设置服务器时区:
timedatectl set-timezone Asia/Shanghai
timedatectl
创建普通部署用户,避免长期使用 root:
adduser deploy
usermod -aG sudo deploy
切换到部署用户:
su - deploy
四、安装 Docker 与 Docker Compose
生产环境推荐使用 Docker 部署,优点是环境隔离、升级方便、迁移简单。
安装 Docker 官方源:
sudo apt update
sudo apt install -y ca-certificates curl gnupg
创建 keyrings 目录:
sudo install -m 0755 -d /etc/apt/keyrings
添加 Docker GPG Key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
设置权限:
sudo chmod a+r /etc/apt/keyrings/docker.gpg
添加 Docker 软件源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
查看版本:
docker version
docker compose version
将当前用户加入 docker 用户组:
sudo usermod -aG docker $USER
重新登录服务器,或执行:
newgrp docker
测试 Docker:
docker run hello-world
五、选择部署方案
生产环境有两种常见方案:
方案一:直接部署开源 ChatGPT Web 应用
适合快速搭建团队聊天入口。例如使用支持 OpenAI API、Azure OpenAI 或兼容接口的前端项目。
优点:
- 部署快;
- 界面完整;
- 支持多模型配置;
- 适合团队内部工具。
缺点:
- 需要关注项目更新;
- 某些项目可能把 API Key 放在前端,需谨慎配置;
- 企业场景通常还需要二次开发权限、审计和日志。
方案二:自建后端 API 网关 + 前端页面
适合企业生产环境。
优点:
- API Key 不暴露给浏览器;
- 可以加入用户鉴权、限流、审计;
- 可以对接多个模型供应商;
- 更适合生产系统。
缺点:
- 开发成本更高;
- 需要维护后端服务。
本文给出一个偏生产的部署方式:Nginx + Docker Compose + ChatGPT Web 应用 + HTTPS + 访问控制。
六、创建部署目录
在服务器上创建应用目录:
sudo mkdir -p /opt/chatgpt-app
sudo chown -R deploy:deploy /opt/chatgpt-app
cd /opt/chatgpt-app
创建配置目录:
mkdir -p nginx certbot logs data
目录结构建议如下:
/opt/chatgpt-app
├── docker-compose.yml
├── .env
├── nginx
│ └── default.conf
├── certbot
├── logs
└── data
七、准备环境变量
创建 .env 文件:
vim .env
示例内容如下:
# OpenAI API Key,请替换为你自己的 Key
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxx
# OpenAI API 地址
# 如果使用官方接口:
OPENAI_API_BASE_URL=https://api.openai.com
# 如果使用兼容 OpenAI 的网关,例如公司内部网关:
# OPENAI_API_BASE_URL=https://llm-gateway.example.com/v1
# 默认模型
DEFAULT_MODEL=gpt-4o-mini
# 应用访问密码,可用于简单访问控制
ACCESS_PASSWORD=change_this_strong_password
# Node 环境
NODE_ENV=production
设置文件权限,避免被其他用户读取:
chmod 600 .env
生产环境建议:
- 不要把
.env提交到 Git; - 不要把 API Key 写在前端代码里;
- 不要在日志中打印完整请求头;
- 定期轮换 API Key;
- 对调用频率和预算设置限制。
八、编写 Docker Compose 文件
这里假设我们部署的是一个支持环境变量配置的 ChatGPT Web 应用。实际镜像可以替换为你选择的项目镜像。
创建 docker-compose.yml:
vim docker-compose.yml
写入:
services:
chatgpt-web:
image: yidadaa/chatgpt-next-web:latest
container_name: chatgpt-web
restart: always
env_file:
- .env
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- BASE_URL=${OPENAI_API_BASE_URL}
- CODE=${ACCESS_PASSWORD}
ports:
- "3000:3000"
networks:
- chatgpt-net
networks:
chatgpt-net:
driver: bridge
启动服务:
docker compose up -d
查看容器状态:
docker compose ps
查看日志:
docker compose logs -f chatgpt-web
本地测试:
curl http://127.0.0.1:3000
如果返回 HTML 页面,说明应用已经启动。
九、安装并配置 Nginx
虽然容器已经暴露了 3000 端口,但生产环境不建议直接让用户访问 http://ip:3000。推荐通过 Nginx 统一反向代理,并启用 HTTPS。
安装 Nginx:
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl enable nginx
sudo systemctl start nginx
检查状态:
sudo systemctl status nginx
创建 Nginx 配置:
sudo vim /etc/nginx/sites-available/chatgpt.conf
写入以下内容,先使用 HTTP 配置:
server {
listen 80;
server_name chat.example.com;
client_max_body_size 20m;
access_log /var/log/nginx/chatgpt_access.log;
error_log /var/log/nginx/chatgpt_error.log;
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;
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/chatgpt.conf /etc/nginx/sites-enabled/chatgpt.conf
删除默认站点:
sudo rm -f /etc/nginx/sites-enabled/default
检查 Nginx 配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
此时访问:
http://chat.example.com
应该可以打开应用。
十、配置域名解析
到你的域名服务商后台添加 DNS 记录:
类型:A
主机记录:chat
记录值:your_server_ip
TTL:默认即可
例如你的域名是:
example.com
那么访问地址就是:
chat.example.com
检查解析是否生效:
ping chat.example.com
或者:
dig chat.example.com
如果服务器没有安装 dig:
sudo apt install -y dnsutils
十一、开启防火墙
使用 UFW 配置基础防火墙:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
如果你不希望外部直接访问 3000 端口,不要开放它。
启用防火墙:
sudo ufw enable
查看状态:
sudo ufw status
如果云厂商还有安全组,也需要放行:
- TCP 22:SSH;
- TCP 80:HTTP;
- TCP 443:HTTPS。
生产环境建议限制 SSH 来源 IP,例如只允许公司出口 IP 访问 SSH。
十二、申请 HTTPS 证书
使用 Let’s Encrypt 免费证书。
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d chat.example.com
按照提示输入邮箱、同意协议。Certbot 会自动修改 Nginx 配置并启用 HTTPS。
检查自动续期:
sudo systemctl status certbot.timer
手动测试续期:
sudo certbot renew --dry-run
完成后访问:
https://chat.example.com
十三、生产级 Nginx HTTPS 配置示例
Certbot 自动生成的配置通常可用。如果你希望手动优化,可以参考以下配置:
server {
listen 80;
server_name chat.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name chat.example.com;
ssl_certificate /etc/letsencrypt/live/chat.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/chat.example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1.2 TLSv1.3;
client_max_body_size 20m;
access_log /var/log/nginx/chatgpt_access.log;
error_log /var/log/nginx/chatgpt_error.log;
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 https;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
修改配置后执行:
sudo nginx -t
sudo systemctl reload nginx
十四、增加基础访问认证
如果你的应用自身没有登录系统,建议至少增加 Nginx Basic Auth。
安装工具:
sudo apt install -y apache2-utils
创建认证用户:
sudo htpasswd -c /etc/nginx/.htpasswd admin
输入密码后,编辑 Nginx 配置:
sudo vim /etc/nginx/sites-available/chatgpt.conf
在 location / 中加入:
auth_basic "ChatGPT Private Service";
auth_basic_user_file /etc/nginx/.htpasswd;
完整片段示例:
location / {
auth_basic "ChatGPT Private Service";
auth_basic_user_file /etc/nginx/.htpasswd;
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 https;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
重新加载:
sudo nginx -t
sudo systemctl reload nginx
这样用户访问网站时,需要先输入用户名和密码。
十五、限制请求频率
为了防止接口被刷、API 费用失控,可以在 Nginx 中增加限流。
编辑主配置:
sudo vim /etc/nginx/nginx.conf
在 http {} 内增加:
limit_req_zone $binary_remote_addr zone=chatgpt_limit:10m rate=5r/s;
然后在站点配置的 location / 中增加:
limit_req zone=chatgpt_limit burst=20 nodelay;
检查并重载:
sudo nginx -t
sudo systemctl reload nginx
说明:
rate=5r/s表示每个 IP 每秒最多 5 个请求;burst=20表示允许短时间突发;- 对企业系统,建议在后端网关按用户维度限流,而不是只按 IP。
十六、容器运维命令
查看服务状态:
cd /opt/chatgpt-app
docker compose ps
查看实时日志:
docker compose logs -f
查看最近 100 行日志:
docker compose logs --tail=100 chatgpt-web
重启服务:
docker compose restart
停止服务:
docker compose down
重新启动:
docker compose up -d
拉取最新镜像:
docker compose pull
更新服务:
docker compose up -d
清理无用镜像:
docker image prune -f
查看容器资源占用:
docker stats
进入容器:
docker exec -it chatgpt-web sh
十七、日志管理
Nginx 日志默认位于:
/var/log/nginx/chatgpt_access.log
/var/log/nginx/chatgpt_error.log
查看访问日志:
sudo tail -f /var/log/nginx/chatgpt_access.log
查看错误日志:
sudo tail -f /var/log/nginx/chatgpt_error.log
Docker 日志查看:
cd /opt/chatgpt-app
docker compose logs -f chatgpt-web
为了避免 Docker 日志无限增长,可以配置 Docker 日志轮转。
创建或编辑:
sudo vim /etc/docker/daemon.json
写入:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
重启 Docker:
sudo systemctl restart docker
然后重新启动应用:
cd /opt/chatgpt-app
docker compose up -d
十八、备份与恢复
如果你的应用只保存配置和会话在浏览器本地,那么服务器端需要备份的内容较少,重点是:
/opt/chatgpt-app/.env
/opt/chatgpt-app/docker-compose.yml
/etc/nginx/sites-available/chatgpt.conf
/etc/nginx/.htpasswd
/etc/letsencrypt
创建备份目录:
sudo mkdir -p /backup/chatgpt
执行备份:
sudo tar -czvf /backup/chatgpt/chatgpt-backup-$(date +%F).tar.gz \
/opt/chatgpt-app \
/etc/nginx/sites-available/chatgpt.conf \
/etc/nginx/.htpasswd \
/etc/letsencrypt
恢复时:
sudo tar -xzvf chatgpt-backup-2025-01-01.tar.gz -C /
然后重启服务:
cd /opt/chatgpt-app
docker compose up -d
sudo nginx -t
sudo systemctl reload nginx
如果系统使用数据库保存会话、用户、知识库数据,还需要单独备份数据库,例如 PostgreSQL、MySQL、Redis、向量数据库等。
十九、API Key 安全建议
生产环境中,API Key 泄露往往会带来真实成本损失,因此要重点防护。
建议做到:
-
不要把 Key 写进前端页面
如果浏览器能看到 Key,用户就可以复制并滥用。 -
使用后端代理或网关
浏览器请求你的后端,后端再请求大模型 API。 -
限制 Key 权限和额度
在模型供应商后台设置预算上限、调用频率和告警。 -
定期轮换 Key
例如每月轮换一次,人员离职后立即轮换。 -
日志脱敏
请求头、Authorization、用户隐私内容不要完整记录。 -
区分环境
开发、测试、生产使用不同 Key。 -
监控异常费用
发现调用量突然上涨,应立即禁用相关 Key。
二十、常见问题排查
1. 页面打不开
检查容器是否运行:
docker compose ps
检查端口监听:
sudo ss -lntp | grep 3000
sudo ss -lntp | grep nginx
检查 Nginx:
sudo nginx -t
sudo systemctl status nginx
查看日志:
sudo tail -f /var/log/nginx/chatgpt_error.log
docker compose logs -f
2. HTTPS 证书申请失败
检查域名解析:
dig chat.example.com
检查 80 端口是否开放:
sudo ufw status
检查云安全组是否放行 80 端口。
重新申请:
sudo certbot --nginx -d chat.example.com
3. 对话没有响应
检查 API Key 是否正确:
grep OPENAI_API_KEY /opt/chatgpt-app/.env
检查容器日志:
cd /opt/chatgpt-app
docker compose logs -f chatgpt-web
如果使用自定义 API 地址,确认地址格式是否正确。一般 OpenAI 兼容接口需要类似:
https://api.example.com/v1
不同应用对变量名要求不同,例如有的叫:
OPENAI_API_BASE_URL
有的叫:
BASE_URL
有的叫:
API_BASE_URL
需要以实际项目文档为准。
4. 返回 502 Bad Gateway
通常是 Nginx 无法连接后端服务。
检查应用端口:
curl http://127.0.0.1:3000
如果失败,重启容器:
cd /opt/chatgpt-app
docker compose restart
查看日志:
docker compose logs --tail=200 chatgpt-web
检查 Nginx 代理地址是否写成:
proxy_pass http://127.0.0.1:3000;
5. 流式输出中断
ChatGPT 类应用通常使用流式响应,如果 Nginx 超时时间太短,会导致回答中断。
建议配置:
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
然后重载:
sudo nginx -t
sudo systemctl reload nginx
二十一、升级与回滚策略
升级前先备份:
sudo tar -czvf /backup/chatgpt/chatgpt-before-upgrade-$(date +%F-%H%M).tar.gz /opt/chatgpt-app
拉取新镜像:
cd /opt/chatgpt-app
docker compose pull
重新部署:
docker compose up -d
查看日志:
docker compose logs -f
如果升级后出现问题,可以指定旧版本镜像。生产环境不建议长期使用 latest,更推荐固定版本号,例如:
image: yidadaa/chatgpt-next-web:v2.15.8
修改后执行:
docker compose up -d
固定版本可以避免镜像自动升级带来的不可控风险。
二十二、生产环境最佳实践清单
上线前建议逐项检查:
- [ ] 域名已解析到服务器;
- [ ] Nginx 已启用 HTTPS;
- [ ] HTTP 自动跳转 HTTPS;
- [ ] 防火墙只开放必要端口;
- [ ] 3000 端口未直接暴露公网;
- [ ] API Key 未写入前端代码;
- [ ]
.env文件权限为600; - [ ] 已配置访问密码或统一登录;
- [ ] 已配置限流策略;
- [ ] 已配置日志轮转;
- [ ] 已设置 API 预算和告警;
- [ ] 已测试容器重启后服务自动恢复;
- [ ] 已制定备份和回滚方案。
二十三、完整部署命令汇总
下面给出从零开始的简化命令汇总,适合熟悉 Linux 的用户快速部署。
# 1. 更新系统
apt update && apt upgrade -y
apt install -y curl wget git vim htop unzip ufw ca-certificates gnupg lsb-release nginx certbot python3-certbot-nginx apache2-utils dnsutils
# 2. 安装 Docker
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 3. 创建应用目录
mkdir -p /opt/chatgpt-app
cd /opt/chatgpt-app
# 4. 创建环境变量文件
cat > .env < docker-compose.yml < /etc/nginx/sites-available/chatgpt.conf <
结语
将 ChatGPT 类应用部署到生产环境,并不只是“把容器跑起来”这么简单。真正可用的生产系统,需要同时考虑 HTTPS、鉴权、限流、日志、备份、密钥保护、费用控制和升级回滚。对于个人或小团队,使用 Docker Compose + Nginx + Let’s Encrypt 已经足够稳定;对于企业场景,则建议进一步引入统一身份认证、后端 API 网关、审计日志、模型路由、敏感词过滤和数据合规策略。
如果你按本文步骤完成部署,最终会得到一个可通过域名 HTTPS 访问、支持自动重启、具备基础安全防护的 ChatGPT Web 服务。后续可以在此基础上扩展知识库问答、企业微信/飞书机器人、客服助手、内部代码助手等应用场景。