从零搭建自己的 ChatGPT 网页版:Docker 部署与配置文件实战
ChatGPT Docker部署教程|附配置文件
随着 ChatGPT 及各类大语言模型应用的普及,很多团队和个人都希望在自己的服务器上部署一个可访问的 ChatGPT Web 服务。通过 Docker 部署的方式,可以极大降低环境配置成本,实现快速安装、快速迁移和快速维护。
本文将以 Docker + Docker Compose 的方式,演示如何在服务器上部署一个 ChatGPT Web 前端应用,并附带完整配置文件示例,包括环境变量配置、Docker Compose 配置以及 Nginx 反向代理配置。
说明:本文所说的“部署 ChatGPT”,并不是在本地部署 OpenAI 官方 ChatGPT 模型本体,而是部署一个 Web 聊天界面,通过 API 调用 OpenAI 或兼容 OpenAI API 的模型服务,例如 OpenAI、Azure OpenAI、通义千问、DeepSeek、月之暗面、智谱、Ollama、One API、New API 等。
一、部署方案介绍
常见的 ChatGPT 私有化访问方案主要有以下几种:
-
直接使用 OpenAI 官方 ChatGPT
- 优点:体验稳定,功能完整。
- 缺点:无法自定义部署,访问和权限管理不够灵活。
-
部署 ChatGPT Web UI
- 优点:界面可控,可配置自己的 API Key,可接入多种模型。
- 缺点:仍需要依赖大模型 API。
-
部署本地大模型 + Web UI
- 优点:数据可控,适合内网使用。
- 缺点:对服务器显卡、内存要求较高。
本文采用第二种方式:
部署 ChatGPT Web UI,并通过 API 调用大语言模型。
这种方式适合:
- 个人搭建自己的 AI 聊天工具;
- 团队内部共享一个 ChatGPT 入口;
- 接入多个模型提供商;
- 需要统一管理 API Key;
- 希望通过域名和 HTTPS 访问。
二、服务器环境准备
在开始部署之前,需要准备一台 Linux 服务器。推荐配置如下:
| 项目 | 推荐配置 |
|---|---|
| 操作系统 | Ubuntu 20.04 / 22.04 / Debian / CentOS |
| CPU | 1 核及以上 |
| 内存 | 1GB 及以上 |
| 磁盘 | 10GB 及以上 |
| 网络 | 可访问模型 API 服务 |
| 软件 | Docker、Docker Compose |
如果只是运行 ChatGPT Web UI,对服务器性能要求并不高,因为主要计算由远程模型 API 完成。
三、安装 Docker
如果服务器还没有安装 Docker,可以使用以下命令安装。
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
4. 启动 Docker 服务
sudo systemctl enable docker
sudo systemctl start docker
5. 查看 Docker 版本
docker version
如果能正常输出版本信息,说明 Docker 已安装成功。
四、安装 Docker Compose
目前新版 Docker 通常已经内置 Compose 插件,可以直接使用:
docker compose version
如果提示命令不存在,可以手动安装:
sudo apt install -y docker-compose-plugin
再次验证:
docker compose version
五、创建项目目录
建议将 ChatGPT Web 服务单独放到一个目录中,方便后续维护。
mkdir -p /opt/chatgpt-web
cd /opt/chatgpt-web
后续所有配置文件都放在这个目录下。
六、准备环境变量配置文件
在项目目录中创建 .env 文件:
vim .env
写入以下内容:
# =========================
# ChatGPT Web 基础配置
# =========================
# OpenAI API Key
# 如果使用 OpenAI 官方接口,填写 sk- 开头的 Key
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# API 地址
# OpenAI 官方地址:
# BASE_URL=https://api.openai.com
#
# 如果你使用的是第三方 OpenAI 兼容接口,例如 One API、New API、DeepSeek 网关等,
# 可以改成对应地址,例如:
# BASE_URL=https://api.example.com
BASE_URL=https://api.openai.com
# 默认模型
# 可根据实际情况修改,如:
# gpt-4o
# gpt-4o-mini
# gpt-3.5-turbo
DEFAULT_MODEL=gpt-4o-mini
# 访问密码
# 建议设置,防止服务暴露后被他人滥用
CODE=your_access_password
# 网站标题
SITE_TITLE=My ChatGPT
# 是否启用隐藏用户 API Key 输入
# 1 表示隐藏,0 表示不隐藏
HIDE_USER_API_KEY=1
# =========================
# 服务端口配置
# =========================
# 宿主机映射端口
WEB_PORT=3000
保存退出。
参数说明
| 参数 | 说明 |
|---|---|
OPENAI_API_KEY |
模型服务 API Key |
BASE_URL |
API 请求地址 |
DEFAULT_MODEL |
默认使用的模型 |
CODE |
页面访问密码 |
SITE_TITLE |
页面标题 |
HIDE_USER_API_KEY |
是否隐藏用户自定义 Key 输入 |
WEB_PORT |
对外暴露端口 |
注意:如果你使用的是第三方 OpenAI 兼容接口,请确认接口路径是否兼容
/v1/chat/completions。有些平台需要将BASE_URL设置为包含/v1的地址,有些则不需要,具体以服务商文档为准。
七、编写 Docker Compose 配置文件
在 /opt/chatgpt-web 目录下创建 docker-compose.yml:
vim docker-compose.yml
写入以下配置:
version: "3.8"
services:
chatgpt-web:
image: yidadaa/chatgpt-next-web:latest
container_name: chatgpt-web
restart: unless-stopped
ports:
- "${WEB_PORT}:3000"
environment:
OPENAI_API_KEY: "${OPENAI_API_KEY}"
BASE_URL: "${BASE_URL}"
DEFAULT_MODEL: "${DEFAULT_MODEL}"
CODE: "${CODE}"
HIDE_USER_API_KEY: "${HIDE_USER_API_KEY}"
SITE_TITLE: "${SITE_TITLE}"
networks:
- chatgpt-net
networks:
chatgpt-net:
driver: bridge
该配置会拉取 yidadaa/chatgpt-next-web 镜像并启动一个 Web 服务,默认容器内部端口为 3000,宿主机端口由 .env 中的 WEB_PORT 控制。
八、启动服务
在项目目录执行:
docker compose up -d
查看容器状态:
docker ps
如果看到类似以下内容,说明容器已经正常启动:
CONTAINER ID IMAGE PORTS
xxxxxx yidadaa/chatgpt-next-web:latest 0.0.0.0:3000->3000/tcp
查看日志:
docker logs -f chatgpt-web
如果没有明显报错,即可通过浏览器访问:
http://服务器IP:3000
如果你在 .env 中设置了 CODE,首次访问或使用时需要输入访问密码。
九、配置防火墙
如果服务器开启了防火墙,需要放行端口。
以 Ubuntu 的 UFW 为例:
sudo ufw allow 3000/tcp
sudo ufw reload
查看状态:
sudo ufw status
如果你后续使用 Nginx 反向代理,并通过 80/443 端口访问,则可以不暴露 3000 端口到公网,只在本机访问。
十、配置 Nginx 反向代理
直接使用 http://服务器IP:3000 访问虽然简单,但生产环境更推荐使用域名和 HTTPS,例如:
https://chat.example.com
1. 安装 Nginx
sudo apt install -y nginx
启动 Nginx:
sudo systemctl enable nginx
sudo systemctl start nginx
2. 新建 Nginx 配置文件
假设你的域名是:
chat.example.com
创建配置文件:
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_buffering off;
proxy_cache off;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
测试 Nginx 配置:
sudo nginx -t
重新加载:
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 配置,使其支持 HTTPS。
3. 测试自动续期
sudo certbot renew --dry-run
如果测试成功,证书会自动续期。
十二、推荐的生产环境 Compose 配置
如果你希望服务更安全,可以让 ChatGPT Web 只监听本机端口,不直接暴露到公网,然后通过 Nginx 代理访问。
修改 docker-compose.yml:
version: "3.8"
services:
chatgpt-web:
image: yidadaa/chatgpt-next-web:latest
container_name: chatgpt-web
restart: unless-stopped
ports:
- "127.0.0.1:${WEB_PORT}:3000"
environment:
OPENAI_API_KEY: "${OPENAI_API_KEY}"
BASE_URL: "${BASE_URL}"
DEFAULT_MODEL: "${DEFAULT_MODEL}"
CODE: "${CODE}"
HIDE_USER_API_KEY: "${HIDE_USER_API_KEY}"
SITE_TITLE: "${SITE_TITLE}"
networks:
- chatgpt-net
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
networks:
chatgpt-net:
driver: bridge
这样配置后,3000 端口只允许本机访问,公网用户必须通过 Nginx 的 80/443 端口访问。
重新启动:
docker compose down
docker compose up -d
十三、接入第三方 OpenAI 兼容接口
如果你不是使用 OpenAI 官方 API,而是使用其他兼容 OpenAI 格式的接口,只需要修改 .env 中的 BASE_URL 和 OPENAI_API_KEY。
例如:
OPENAI_API_KEY=your_third_party_api_key
BASE_URL=https://api.example.com
DEFAULT_MODEL=gpt-4o-mini
如果接口要求 /v1,则可能需要写成:
BASE_URL=https://api.example.com/v1
不同平台的配置略有差异,建议先使用 curl 测试接口是否可用。
示例:
curl https://api.example.com/v1/chat/completions \
-H "Authorization: Bearer your_third_party_api_key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [
{
"role": "user",
"content": "你好,请介绍一下你自己"
}
]
}'
如果返回模型回答,说明接口正常。
十四、常用维护命令
1. 查看容器状态
docker ps
2. 查看日志
docker logs -f chatgpt-web
3. 停止服务
docker compose down
4. 重启服务
docker compose restart
5. 更新镜像
docker compose pull
docker compose up -d
6. 查看资源占用
docker stats chatgpt-web
十五、常见问题排查
1. 页面无法访问
可以按以下顺序排查:
docker ps
确认容器是否运行。
docker logs -f chatgpt-web
查看是否有启动错误。
curl http://127.0.0.1:3000
确认本机是否可访问。
如果本机可访问但公网无法访问,通常是防火墙、安全组或 Nginx 配置问题。
2. API 请求失败
常见原因包括:
- API Key 填写错误;
- API Key 没有余额或权限;
BASE_URL配置不正确;- 服务器无法访问模型服务;
- 模型名称填写错误;
- 第三方接口不完全兼容 OpenAI 格式。
可以进入服务器执行:
curl -I https://api.openai.com
如果无法访问,需要检查网络环境。
3. 返回 401 Unauthorized
通常是 API Key 无效或没有正确传入。
检查 .env:
cat .env
确认:
OPENAI_API_KEY=sk-xxxxxxxx
然后重启容器:
docker compose down
docker compose up -d
4. 返回 404 Not Found
如果使用第三方 API,可能是 BASE_URL 路径不对。
尝试在是否包含 /v1 之间切换,例如:
BASE_URL=https://api.example.com
或:
BASE_URL=https://api.example.com/v1
5. 回答很慢或经常超时
可能原因:
- 模型服务响应较慢;
- 网络链路不稳定;
- Nginx 超时时间过短;
- 使用了较大的模型;
- 请求上下文过长。
可以在 Nginx 中增加:
proxy_read_timeout 600s;
proxy_send_timeout 600s;
十六、安全建议
如果你的服务部署在公网,务必注意安全。
1. 设置访问密码
.env 中建议配置:
CODE=your_strong_password
不要使用简单密码,例如 123456、password。
2. 不要暴露 API Key
API Key 是敏感信息,不要提交到 GitHub,也不要在截图、日志、文章中泄露。
建议:
chmod 600 .env
3. 使用 HTTPS
HTTPS 可以防止访问密码和会话内容在传输过程中被明文监听。
4. 限制端口暴露
推荐使用:
ports:
- "127.0.0.1:3000:3000"
然后通过 Nginx 代理访问,避免 3000 端口直接暴露公网。
5. 配置云服务器安全组
只开放必要端口:
| 端口 | 用途 |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
如果不需要公网直接访问 3000,建议关闭 3000 端口。
十七、完整文件汇总
下面给出一个推荐的完整配置示例。
1. .env
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
BASE_URL=https://api.openai.com
DEFAULT_MODEL=gpt-4o-mini
CODE=your_access_password
SITE_TITLE=My ChatGPT
HIDE_USER_API_KEY=1
WEB_PORT=3000
2. docker-compose.yml
version: "3.8"
services:
chatgpt-web:
image: yidadaa/chatgpt-next-web:latest
container_name: chatgpt-web
restart: unless-stopped
ports:
- "127.0.0.1:${WEB_PORT}:3000"
environment:
OPENAI_API_KEY: "${OPENAI_API_KEY}"
BASE_URL: "${BASE_URL}"
DEFAULT_MODEL: "${DEFAULT_MODEL}"
CODE: "${CODE}"
HIDE_USER_API_KEY: "${HIDE_USER_API_KEY}"
SITE_TITLE: "${SITE_TITLE}"
networks:
- chatgpt-net
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
networks:
chatgpt-net:
driver: bridge
3. Nginx 配置
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_buffering off;
proxy_cache off;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
十八、总结
通过 Docker 部署 ChatGPT Web 服务非常方便,整体流程可以概括为:
- 安装 Docker 和 Docker Compose;
- 创建项目目录;
- 编写
.env环境变量文件; - 编写
docker-compose.yml; - 启动容器;
- 配置 Nginx 反向代理;
- 申请 HTTPS 证书;
- 做好访问密码和端口安全限制。
对于个人用户来说,这种方式可以快速拥有一个自己的 ChatGPT Web 页面;对于团队来说,也可以将模型能力统一封装为内部 AI 助手入口,便于统一管理、统一接入和统一维护。
如果只是测试使用,可以直接通过 服务器IP:3000 访问;如果用于长期运行,建议使用域名、HTTPS、访问密码以及 Nginx 反向代理,从而提升安全性和可维护性。