ChatGPT 网页版 Docker 部署实战:从启动命令到 HTTPS 配置全流程
ChatGPT Docker部署教程|附完整命令
本文将介绍如何使用 Docker 快速部署一个可访问的 ChatGPT Web 服务,并通过 Docker Compose、Nginx 反向代理、HTTPS 证书等方式完成一套相对完整的生产环境部署流程。
需要说明的是:ChatGPT 本身不是一个可以直接私有化部署的模型服务。通常我们所说的“Docker 部署 ChatGPT”,指的是部署一个基于 OpenAI API 或其他大模型 API 的 Web 前端项目,通过配置 API Key 来实现类似 ChatGPT 的聊天体验。
一、部署前说明
很多用户在搜索“ChatGPT Docker部署教程”时,容易产生一个误解:以为通过 Docker 可以直接把 ChatGPT 模型部署到自己的服务器上。
实际上,OpenAI 官方的 ChatGPT 模型并不提供完整模型文件下载,也不能直接通过 Docker 镜像本地运行。本文所说的部署方式,本质上是:
- 在服务器上部署一个 ChatGPT Web UI;
- Web UI 通过 API Key 调用 OpenAI 或其他兼容接口;
- 用户通过浏览器访问该 Web UI,实现聊天功能;
- Docker 负责简化安装、运行和维护过程。
这种方案适合以下场景:
- 想搭建一个个人使用的 ChatGPT 网页端;
- 想给团队内部搭建统一入口;
- 想通过反向代理隐藏 API Key;
- 想用 Docker 快速部署、迁移、升级;
- 想接入 OpenAI、Azure OpenAI 或其他兼容 OpenAI API 的模型服务。
二、服务器环境要求
在开始之前,你需要准备一台服务器。推荐配置如下:
| 项目 | 推荐配置 |
|---|---|
| 操作系统 | Ubuntu 20.04 / Ubuntu 22.04 / Debian 11+ / CentOS 7+ |
| CPU | 1 核及以上 |
| 内存 | 1GB 及以上,推荐 2GB |
| 硬盘 | 10GB 及以上 |
| 网络 | 可正常访问 API 服务 |
| 域名 | 可选,生产环境建议准备 |
| Docker | 20.10+ |
| Docker Compose | v2 版本 |
如果你只是个人测试,1 核 1GB 的轻量服务器基本也可以运行。但如果同时访问人数较多,建议使用 2 核 2GB 或更高配置。
三、准备 OpenAI API Key
部署 Web UI 前,你需要准备一个 API Key。
如果你使用 OpenAI 官方接口,可以在 OpenAI 平台创建 API Key:
https://platform.openai.com/api-keys
创建完成后,你会得到类似下面格式的密钥:
sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
请注意:
- API Key 只会完整显示一次;
- 不要将 API Key 直接暴露在前端代码中;
- 不要把 API Key 上传到 GitHub;
- 生产环境建议使用环境变量或服务端代理方式保存;
- 如果怀疑泄露,应立即删除旧 Key 并创建新 Key。
四、安装 Docker
以下命令以 Ubuntu / Debian 系统为例。
1. 更新系统软件包
sudo apt update
sudo apt upgrade -y
2. 安装基础依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
3. 添加 Docker 官方 GPG Key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
4. 添加 Docker 软件源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6. 查看 Docker 版本
docker --version
docker compose version
如果可以看到类似下面的输出,说明安装成功:
Docker version 26.x.x
Docker Compose version v2.x.x
7. 设置 Docker 开机自启
sudo systemctl enable docker
sudo systemctl start docker
8. 将当前用户加入 Docker 用户组
如果你不想每次执行 Docker 命令都加 sudo,可以执行:
sudo usermod -aG docker $USER
然后重新登录服务器,或者执行:
newgrp docker
测试 Docker 是否可用:
docker run hello-world
五、选择 ChatGPT Web UI 项目
目前社区中有很多开源 ChatGPT Web UI 项目,常见的有:
- NextChat;
- ChatGPT Next Web;
- LobeChat;
- LibreChat;
- Open WebUI;
- Chatbot UI。
本文以一个常见的 Docker 化 Web UI 部署方式为例进行说明。为了保证通用性,我们采用 Docker Compose 部署,并通过环境变量传入 API Key。
这里以 ChatGPT Next Web / NextChat 类项目为示例。它的特点是:
- 支持 Docker 部署;
- 界面简洁;
- 支持多模型;
- 支持访问密码;
- 支持自定义 API 地址;
- 适合个人或小团队使用。
六、方式一:使用 Docker 命令快速部署
如果你只是想快速跑起来,可以使用单条 Docker 命令启动。
1. 创建部署目录
mkdir -p /opt/chatgpt-web
cd /opt/chatgpt-web
2. 使用 Docker 运行容器
示例命令如下:
docker run -d \
--name chatgpt-web \
--restart always \
-p 3000:3000 \
-e OPENAI_API_KEY="sk-你的OpenAI_APIKey" \
-e CODE="your-access-password" \
yidadaa/chatgpt-next-web
参数说明:
| 参数 | 说明 |
|---|---|
-d |
后台运行容器 |
--name chatgpt-web |
指定容器名称 |
--restart always |
容器异常退出后自动重启 |
-p 3000:3000 |
将服务器 3000 端口映射到容器 3000 端口 |
OPENAI_API_KEY |
OpenAI API Key |
CODE |
访问密码 |
yidadaa/chatgpt-next-web |
Docker 镜像名称 |
启动后查看容器状态:
docker ps
如果看到 chatgpt-web 处于 Up 状态,说明运行成功。
3. 浏览器访问
在浏览器中访问:
http://服务器IP:3000
如果服务器防火墙或云服务器安全组开放了 3000 端口,你就可以看到 ChatGPT Web 界面。
七、开放服务器端口
如果无法访问,大概率是服务器防火墙或云平台安全组没有开放端口。
1. Ubuntu UFW 开放端口
sudo ufw allow 3000/tcp
sudo ufw reload
sudo ufw status
如果 UFW 没有启用,可以执行:
sudo ufw enable
2. 云服务器安全组
如果你使用的是阿里云、腾讯云、华为云、AWS、Azure 等云服务器,还需要在控制台开放端口:
入方向规则:
协议:TCP
端口:3000
来源:0.0.0.0/0
生产环境不建议长期暴露 3000 端口,后面我们会使用 Nginx 反向代理到 80/443 端口。
八、方式二:使用 Docker Compose 部署
单条 Docker 命令适合测试,但如果你需要长期维护,推荐使用 Docker Compose。
1. 创建项目目录
mkdir -p /opt/chatgpt-web
cd /opt/chatgpt-web
2. 创建环境变量文件
nano .env
写入以下内容:
OPENAI_API_KEY=sk-你的OpenAI_APIKey
CODE=your-access-password
BASE_URL=https://api.openai.com
其中:
OPENAI_API_KEY:你的 API Key;CODE:访问密码,可以设置多个,部分项目支持用英文逗号分隔;BASE_URL:API 请求地址,默认是 OpenAI 官方接口。
如果你使用兼容 OpenAI API 的第三方接口,例如自建网关、Azure OpenAI 或中转 API,则可以根据实际情况修改 BASE_URL。
3. 创建 docker-compose.yml
nano docker-compose.yml
写入以下内容:
services:
chatgpt-web:
image: yidadaa/chatgpt-next-web:latest
container_name: chatgpt-web
restart: always
ports:
- "3000:3000"
environment:
OPENAI_API_KEY: ${OPENAI_API_KEY}
CODE: ${CODE}
BASE_URL: ${BASE_URL}
4. 启动服务
docker compose up -d
5. 查看运行状态
docker compose ps
查看日志:
docker compose logs -f
如果日志中没有明显报错,即可访问:
http://服务器IP:3000
6. 停止服务
docker compose down
7. 重启服务
docker compose restart
九、配置访问密码
部署完成后,建议一定要配置访问密码,否则别人只要知道你的地址,就可能消耗你的 API 额度。
在上面的 .env 文件中:
CODE=your-access-password
你可以改成更复杂的密码,例如:
CODE=Gpt_2024@StrongPass
修改完成后重启容器:
docker compose down
docker compose up -d
如果项目支持多个访问码,可以写成:
CODE=password1,password2,password3
不同项目的环境变量名称可能略有差异,实际请以项目文档为准。
十、配置自定义 API 地址
如果你使用的不是 OpenAI 官方接口,而是兼容 OpenAI API 的服务,需要配置 API 地址。
例如:
BASE_URL=https://api.openai.com
或者:
BASE_URL=https://your-api-proxy.example.com
修改 .env 后重启:
docker compose restart
部分项目使用的环境变量可能是:
OPENAI_API_BASE_URL=https://api.openai.com
或者:
API_BASE_URL=https://api.openai.com
因此,如果启动后发现请求地址不生效,需要检查你所使用项目的官方说明。
十一、使用 Nginx 反向代理
如果你有域名,推荐使用 Nginx 将服务代理到域名下,例如:
https://chat.example.com
这样做有几个好处:
- 不需要暴露 3000 端口;
- 可以使用 HTTPS;
- 访问地址更友好;
- 方便统一管理多个服务;
- 可以配置安全策略和访问限制。
十二、安装 Nginx
1. 安装 Nginx
sudo apt update
sudo apt install -y nginx
2. 启动 Nginx
sudo systemctl enable nginx
sudo systemctl start nginx
3. 查看状态
sudo systemctl status nginx
如果看到 active (running),说明 Nginx 已经正常运行。
十三、配置域名解析
假设你的域名是:
chat.example.com
你需要在域名 DNS 控制台添加一条 A 记录:
| 类型 | 主机记录 | 记录值 |
|---|---|---|
| A | chat | 你的服务器公网 IP |
解析生效后,可以在服务器上测试:
ping chat.example.com
如果返回的是你的服务器 IP,说明解析基本正常。
十四、配置 Nginx 反向代理
创建 Nginx 配置文件:
sudo nano /etc/nginx/sites-available/chatgpt-web
写入以下内容:
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;
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/chatgpt-web /etc/nginx/sites-enabled/chatgpt-web
检查配置是否正确:
sudo nginx -t
重新加载 Nginx:
sudo systemctl reload nginx
此时访问:
http://chat.example.com
应该可以打开你的 ChatGPT Web 服务。
十五、申请 HTTPS 证书
生产环境建议配置 HTTPS。这里使用 Let’s Encrypt 免费证书。
1. 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
2. 申请证书
sudo certbot --nginx -d chat.example.com
根据提示输入邮箱并同意协议即可。
申请成功后,Certbot 会自动修改 Nginx 配置,将 HTTP 跳转到 HTTPS。
访问:
https://chat.example.com
即可使用 HTTPS。
3. 测试自动续期
Let’s Encrypt 证书有效期通常是 90 天,Certbot 会自动续期。你可以执行以下命令测试:
sudo certbot renew --dry-run
如果没有报错,说明自动续期正常。
十六、隐藏 3000 端口
配置好 Nginx 之后,建议不要再对公网开放 3000 端口。更安全的方式是只允许本机访问容器端口。
修改 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}
CODE: ${CODE}
BASE_URL: ${BASE_URL}
然后重启:
docker compose down
docker compose up -d
这样容器只会监听服务器本机的 127.0.0.1:3000,外部无法直接通过 服务器IP:3000 访问,只能通过 Nginx 代理访问。
十七、更新 ChatGPT Web 镜像
Docker 部署的好处之一是升级非常方便。
进入项目目录:
cd /opt/chatgpt-web
拉取最新镜像:
docker compose pull
重新创建容器:
docker compose up -d
清理旧镜像:
docker image prune -f
如果你是用 docker run 启动的,则可以这样更新:
docker stop chatgpt-web
docker rm chatgpt-web
docker pull yidadaa/chatgpt-next-web:latest
docker run -d \
--name chatgpt-web \
--restart always \
-p 3000:3000 \
-e OPENAI_API_KEY="sk-你的OpenAI_APIKey" \
-e CODE="your-access-password" \
yidadaa/chatgpt-next-web
十八、备份配置文件
虽然该类 Web UI 通常没有复杂数据,但建议至少备份以下文件:
/opt/chatgpt-web/.env
/opt/chatgpt-web/docker-compose.yml
/etc/nginx/sites-available/chatgpt-web
可以使用以下命令打包备份:
tar -czvf chatgpt-web-backup.tar.gz \
/opt/chatgpt-web/.env \
/opt/chatgpt-web/docker-compose.yml \
/etc/nginx/sites-available/chatgpt-web
恢复时解压:
tar -xzvf chatgpt-web-backup.tar.gz -C /
然后重新启动服务:
cd /opt/chatgpt-web
docker compose up -d
sudo systemctl reload nginx
十九、常见问题排查
1. 页面打不开怎么办?
先检查容器是否运行:
docker ps
查看日志:
docker logs chatgpt-web
如果使用 Docker Compose:
docker compose logs -f
检查端口是否监听:
ss -lntp | grep 3000
检查防火墙:
sudo ufw status
如果使用云服务器,还要检查安全组是否开放 80、443 或 3000 端口。
2. API Key 配置了但不能聊天?
常见原因包括:
- API Key 填写错误;
- API Key 已被删除或失效;
- 账户额度不足;
- 当前模型没有权限;
- 服务器无法访问 OpenAI API;
BASE_URL配置错误;- 使用了不兼容的 API 服务。
可以在服务器中测试网络连通性:
curl https://api.openai.com
如果你使用的是自定义 API 地址:
curl https://your-api-proxy.example.com
也可以查看容器日志:
docker compose logs -f
3. Nginx 反向代理后无法正常对话?
可能是 WebSocket 或长连接配置不完整。建议确认 Nginx 配置中包含:
proxy_http_version 1.1;
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
4. HTTPS 证书申请失败?
常见原因:
- 域名没有正确解析到服务器;
- 80 端口没有开放;
- Nginx 配置错误;
- 域名被 CDN 代理影响验证;
- 服务器防火墙拦截了请求。
检查 Nginx:
sudo nginx -t
sudo systemctl status nginx
检查端口:
sudo ss -lntp | grep ':80'
重新申请:
sudo certbot --nginx -d chat.example.com
5. 如何查看容器资源占用?
docker stats chatgpt-web
查看所有容器:
docker stats
6. 如何删除部署?
如果使用 Docker Compose:
cd /opt/chatgpt-web
docker compose down
删除项目目录:
rm -rf /opt/chatgpt-web
删除 Nginx 配置:
sudo rm -f /etc/nginx/sites-enabled/chatgpt-web
sudo rm -f /etc/nginx/sites-available/chatgpt-web
sudo nginx -t
sudo systemctl reload nginx
如果使用 Docker Run:
docker stop chatgpt-web
docker rm chatgpt-web
二十、安全建议
部署完成后,建议你做以下安全加固:
1. 设置强访问密码
不要使用简单密码,例如:
123456
password
chatgpt
admin
建议使用包含大小写字母、数字和特殊符号的复杂密码。
2. 不要暴露 API Key
不要将 .env 文件公开,不要把配置文件上传到公共仓库。
可以限制权限:
chmod 600 /opt/chatgpt-web/.env
3. 使用 HTTPS
只要绑定域名,建议必须配置 HTTPS,避免访问密码或会话信息在网络中明文传输。
4. 关闭不必要端口
如果已经使用 Nginx 代理,建议仅开放:
80
443
22
并关闭公网 3000 端口。
5. 限制 SSH 登录
建议修改 SSH 默认端口、禁用密码登录、使用密钥登录。
编辑 SSH 配置:
sudo nano /etc/ssh/sshd_config
可以考虑配置:
PasswordAuthentication no
PermitRootLogin no
然后重启 SSH:
sudo systemctl restart ssh
操作前请确保你已经能通过密钥正常登录,避免把自己锁在服务器外。
二十一、完整 Docker Compose 示例
下面给出一个相对完整的部署示例。
.env
OPENAI_API_KEY=sk-你的OpenAI_APIKey
CODE=Gpt_2024@StrongPass
BASE_URL=https://api.openai.com
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}
CODE: ${CODE}
BASE_URL: ${BASE_URL}
启动命令
cd /opt/chatgpt-web
docker compose up -d
查看状态
docker compose ps
docker compose logs -f
更新命令
cd /opt/chatgpt-web
docker compose pull
docker compose up -d
docker image prune -f
二十二、完整 Nginx 配置示例
将 chat.example.com 替换为你的真实域名。
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;
}
}
启用并重载:
sudo ln -s /etc/nginx/sites-available/chatgpt-web /etc/nginx/sites-enabled/chatgpt-web
sudo nginx -t
sudo systemctl reload nginx
申请 HTTPS:
sudo certbot --nginx -d chat.example.com
二十三、总结
通过本文的步骤,我们完成了一套较完整的 ChatGPT Docker 部署流程,包括:
- 安装 Docker;
- 使用 Docker Run 快速启动;
- 使用 Docker Compose 长期部署;
- 配置 API Key 和访问密码;
- 配置自定义 API 地址;
- 使用 Nginx 反向代理;
- 申请 HTTPS 证书;
- 隐藏容器端口;
- 更新镜像;
- 备份配置;
- 排查常见问题;
- 做基础安全加固。
如果只是个人测试,可以直接使用 Docker 命令快速运行:
docker run -d \
--name chatgpt-web \
--restart always \
-p 3000:3000 \
-e OPENAI_API_KEY="sk-你的OpenAI_APIKey" \
-e CODE="your-access-password" \
yidadaa/chatgpt-next-web
如果是长期使用,更推荐使用 Docker Compose,并配合 Nginx 和 HTTPS:
mkdir -p /opt/chatgpt-web
cd /opt/chatgpt-web
nano .env
nano docker-compose.yml
docker compose up -d
最后再次提醒:Docker 部署的并不是 ChatGPT 模型本体,而是一个调用 API 的 Web 前端或服务端应用。真正的模型推理仍然由 OpenAI 或你配置的兼容 API 服务提供。只要理解这一点,再结合本文提供的完整命令,你就可以比较稳定、安全地搭建自己的 ChatGPT Web 服务。