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

从零搭建可上线的 ChatGPT 服务:Docker、Nginx、HTTPS 全流程命令指南

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

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 / 本地大模型网关

生产环境部署重点包括:

  1. 稳定运行:服务崩溃后自动重启。
  2. HTTPS 加密:避免 API Key、会话内容明文传输。
  3. 访问控制:限制非授权用户访问。
  4. 日志与监控:便于排查问题。
  5. 密钥安全:避免把 API Key 暴露到前端或代码仓库。
  6. 可升级可回滚:上线后可以快速更新版本。

二、服务器准备

本文以 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 泄露往往会带来真实成本损失,因此要重点防护。

建议做到:

  1. 不要把 Key 写进前端页面
    如果浏览器能看到 Key,用户就可以复制并滥用。

  2. 使用后端代理或网关
    浏览器请求你的后端,后端再请求大模型 API。

  3. 限制 Key 权限和额度
    在模型供应商后台设置预算上限、调用频率和告警。

  4. 定期轮换 Key
    例如每月轮换一次,人员离职后立即轮换。

  5. 日志脱敏
    请求头、Authorization、用户隐私内容不要完整记录。

  6. 区分环境
    开发、测试、生产使用不同 Key。

  7. 监控异常费用
    发现调用量突然上涨,应立即禁用相关 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 服务。后续可以在此基础上扩展知识库问答、企业微信/飞书机器人、客服助手、内部代码助手等应用场景。

目录结构
全文