从零搭建自己的 ChatGPT 网页版:Docker、Nginx 与 HTTPS 配置全流程
ChatGPT 部署完整教程|附配置文件
本文将从零开始讲解如何在一台云服务器上部署一个可访问的 ChatGPT Web 服务。文章包含服务器准备、Docker 环境安装、项目部署、环境变量配置、Nginx 反向代理、HTTPS 证书配置、系统服务管理、安全加固以及常见问题排查,并附带完整配置文件示例。
一、前言说明
很多人提到“部署 ChatGPT”,容易产生一个误解:
ChatGPT 本身并不能被直接私有化部署到自己的服务器上。
严格来说,ChatGPT 是 OpenAI 提供的在线服务,底层模型和官方服务并不开放给用户自行部署。但我们可以通过以下方式搭建一个类似 ChatGPT 的网页应用:
- 使用 OpenAI API;
- 部署一个 ChatGPT Web 前端;
- 将用户输入转发到 OpenAI API;
- 再把模型返回内容展示在网页中。
也就是说,本文部署的是一个 基于 OpenAI API 的 ChatGPT Web 应用。
这种方式适合以下场景:
- 自己搭建一个私有 AI 聊天页面;
- 给团队内部使用;
- 统一管理 API Key;
- 配置访问密码或用户权限;
- 通过自己的域名访问 ChatGPT;
- 与 Nginx、HTTPS、Docker 等环境集成。
二、部署方案概览
本文采用的部署方案如下:
| 组件 | 说明 |
|---|---|
| 云服务器 | Ubuntu 22.04 LTS |
| 部署方式 | Docker Compose |
| Web 应用 | ChatGPT Web 前端项目 |
| 反向代理 | Nginx |
| HTTPS | Certbot + Let’s Encrypt |
| API 服务 | OpenAI API |
| 域名 | 示例:chat.example.com |
整体访问流程如下:
用户浏览器
↓
https://chat.example.com
↓
Nginx 反向代理
↓
ChatGPT Web 容器
↓
OpenAI API
三、准备工作
在开始部署之前,你需要准备以下内容。
1. 一台云服务器
推荐配置:
| 项目 | 推荐配置 |
|---|---|
| 系统 | Ubuntu 22.04 LTS |
| CPU | 1 核及以上 |
| 内存 | 1GB 及以上 |
| 磁盘 | 20GB 及以上 |
| 带宽 | 1Mbps 及以上 |
如果只是个人使用,轻量服务器即可满足需求。
常见云服务商包括:
- 阿里云
- 腾讯云
- 华为云
- AWS
- Google Cloud
- Azure
- DigitalOcean
- Vultr
- Hetzner
2. 一个域名
假设你的域名是:
example.com
你计划使用的二级域名是:
chat.example.com
需要提前在 DNS 控制台添加一条 A 记录:
| 主机记录 | 类型 | 记录值 |
|---|---|---|
| chat | A | 你的服务器公网 IP |
例如:
chat.example.com -> 1.2.3.4
3. OpenAI API Key
你需要在 OpenAI 平台创建 API Key。
获取地址:
https://platform.openai.com/api-keys
创建后会得到类似下面的密钥:
sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
请注意:
- API Key 只会显示一次;
- 不要提交到 GitHub;
- 不要公开分享;
- 建议定期更换;
- 如果泄露,应立即删除旧 Key。
四、连接服务器
使用 SSH 登录服务器:
ssh root@你的服务器IP
例如:
ssh root@1.2.3.4
如果你使用的是普通用户,例如 ubuntu:
ssh ubuntu@1.2.3.4
登录后,先更新系统软件包:
sudo apt update
sudo apt upgrade -y
安装一些基础工具:
sudo apt install -y curl wget git vim ufw ca-certificates gnupg lsb-release
五、安装 Docker
1. 卸载旧版本 Docker
如果服务器之前安装过旧版本 Docker,可以先执行:
sudo apt remove -y docker docker-engine docker.io containerd runc
2. 安装 Docker 官方源
创建密钥目录:
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
添加 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
更新软件源:
sudo apt update
3. 安装 Docker 和 Docker Compose
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
检查 Docker 版本:
docker version
检查 Docker Compose 版本:
docker compose version
4. 设置 Docker 开机自启
sudo systemctl enable docker
sudo systemctl start docker
六、创建项目目录
建议将项目统一放在 /opt 目录下:
sudo mkdir -p /opt/chatgpt-web
cd /opt/chatgpt-web
创建配置文件:
sudo touch docker-compose.yml
sudo touch .env
查看目录结构:
ls -la
预期结果类似:
/opt/chatgpt-web
├── docker-compose.yml
└── .env
七、编写环境变量配置文件
编辑 .env 文件:
sudo vim .env
写入以下内容:
# OpenAI API Key
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# OpenAI API 地址
OPENAI_API_BASE_URL=https://api.openai.com/v1
# 默认模型
OPENAI_API_MODEL=gpt-4o-mini
# 访问密码,建议设置复杂一些
AUTH_SECRET_KEY=your-strong-password
# 网站标题
SITE_TITLE=My ChatGPT
# 运行端口
PORT=3000
说明如下:
| 配置项 | 说明 |
|---|---|
OPENAI_API_KEY |
OpenAI API Key |
OPENAI_API_BASE_URL |
OpenAI API 地址 |
OPENAI_API_MODEL |
默认调用模型 |
AUTH_SECRET_KEY |
访问密码 |
SITE_TITLE |
页面标题 |
PORT |
容器内部服务端口 |
如果你使用的是兼容 OpenAI API 的第三方模型服务,也可以将 OPENAI_API_BASE_URL 修改为对应地址。例如:
OPENAI_API_BASE_URL=https://your-api-provider.com/v1
八、编写 Docker Compose 配置文件
编辑 docker-compose.yml:
sudo vim docker-compose.yml
写入以下内容:
version: "3.8"
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}
BASE_URL: ${OPENAI_API_BASE_URL}
CODE: ${AUTH_SECRET_KEY}
DEFAULT_MODEL: ${OPENAI_API_MODEL}
env_file:
- .env
这里使用的是一个常见的 ChatGPT Web 前端镜像。
如果你有自己的前端项目,也可以替换为自己的镜像。
配置说明:
| 字段 | 说明 |
|---|---|
image |
使用的 Docker 镜像 |
container_name |
容器名称 |
restart |
容器异常退出后自动重启 |
ports |
宿主机端口映射 |
environment |
容器环境变量 |
env_file |
读取 .env 配置文件 |
九、启动 ChatGPT Web 服务
在项目目录下执行:
cd /opt/chatgpt-web
sudo docker compose up -d
查看容器状态:
sudo docker ps
如果看到类似以下内容,说明服务已经启动:
CONTAINER ID IMAGE PORTS
xxxxxxx yidadaa/chatgpt-next-web 0.0.0.0:3000->3000/tcp
查看日志:
sudo docker logs -f chatgpt-web
如果没有明显报错,可以通过浏览器访问:
http://服务器IP:3000
例如:
http://1.2.3.4:3000
如果可以正常打开页面,说明基础部署成功。
十、配置服务器防火墙
如果你使用的是 Ubuntu 自带的 UFW,可以这样配置:
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 3000
sudo ufw enable
查看状态:
sudo ufw status
初期测试可以开放 3000 端口。
但如果后续使用 Nginx 反向代理,建议关闭公网 3000 端口,只保留 80 和 443。
关闭 3000 端口:
sudo ufw delete allow 3000
更安全的做法是在 Docker Compose 中只监听本地地址:
ports:
- "127.0.0.1:3000:3000"
这样外部用户无法直接访问 3000 端口,只能通过 Nginx 访问。
十一、安装 Nginx
安装 Nginx:
sudo apt install -y nginx
启动 Nginx:
sudo systemctl start nginx
sudo systemctl enable nginx
查看状态:
sudo systemctl status nginx
如果你浏览器访问服务器 IP 能看到 Nginx 默认页面,说明安装成功。
十二、配置 Nginx 反向代理
创建站点配置文件:
sudo vim /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;
}
}
将 chat.example.com 替换为你的真实域名。
创建软链接启用站点:
sudo ln -s /etc/nginx/sites-available/chatgpt-web /etc/nginx/sites-enabled/chatgpt-web
测试 Nginx 配置:
sudo nginx -t
如果显示:
syntax is ok
test is successful
说明配置无误。
重载 Nginx:
sudo systemctl reload nginx
此时可以访问:
http://chat.example.com
十三、配置 HTTPS 证书
为了安全访问,建议启用 HTTPS。
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d chat.example.com
执行过程中会提示你输入邮箱、同意协议以及是否强制跳转 HTTPS。
建议选择自动跳转到 HTTPS。
申请成功后,访问:
https://chat.example.com
如果浏览器显示安全锁标识,说明 HTTPS 配置成功。
十四、HTTPS 完整 Nginx 配置示例
Certbot 通常会自动修改配置文件。
一个完整的 HTTPS 配置示例如下:
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_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
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 nginx -t
sudo systemctl reload nginx
十五、配置证书自动续期
Let’s Encrypt 证书有效期通常为 90 天。
Certbot 默认会创建自动续期任务。
你可以执行以下命令测试续期:
sudo certbot renew --dry-run
如果没有报错,说明自动续期正常。
查看定时任务:
systemctl list-timers | grep certbot
十六、优化 Docker Compose 配置
前面的配置已经可以运行,但为了安全和可维护性,推荐使用以下改进版本。
推荐版 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:3000:3000"
environment:
OPENAI_API_KEY: ${OPENAI_API_KEY}
BASE_URL: ${OPENAI_API_BASE_URL}
CODE: ${AUTH_SECRET_KEY}
DEFAULT_MODEL: ${OPENAI_API_MODEL}
env_file:
- .env
networks:
- chatgpt-net
networks:
chatgpt-net:
driver: bridge
修改后重新启动:
cd /opt/chatgpt-web
sudo docker compose down
sudo docker compose up -d
十七、推荐版 .env 配置文件
# ==============================
# OpenAI API 配置
# ==============================
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_API_BASE_URL=https://api.openai.com/v1
OPENAI_API_MODEL=gpt-4o-mini
# ==============================
# 应用访问配置
# ==============================
AUTH_SECRET_KEY=ChangeMeToAVeryStrongPassword
SITE_TITLE=Private ChatGPT
# ==============================
# 服务端口
# ==============================
PORT=3000
建议将访问密码设置为强密码,例如:
N8x$2aPq!2026.chat
不要使用:
123456
password
admin
chatgpt
十八、如何更新 ChatGPT Web
如果你使用的是 Docker 镜像部署,更新非常简单。
进入项目目录:
cd /opt/chatgpt-web
拉取最新镜像:
sudo docker compose pull
重启服务:
sudo docker compose up -d
清理旧镜像:
sudo docker image prune -f
查看当前运行状态:
sudo docker ps
十九、如何查看运行日志
查看实时日志:
sudo docker logs -f chatgpt-web
查看最近 200 行日志:
sudo docker logs --tail=200 chatgpt-web
如果服务异常,日志通常会提供错误原因,例如:
- API Key 错误;
- 模型名称错误;
- 网络无法访问 OpenAI;
- 环境变量未读取;
- 端口被占用。
二十、如何停止和重启服务
停止服务:
cd /opt/chatgpt-web
sudo docker compose down
启动服务:
cd /opt/chatgpt-web
sudo docker compose up -d
重启服务:
sudo docker restart chatgpt-web
查看容器状态:
sudo docker ps -a
二十一、安全加固建议
部署完成后,不建议直接裸奔使用。
至少应做好以下安全措施。
1. 不要暴露 3000 端口
推荐 Docker Compose 使用:
ports:
- "127.0.0.1:3000:3000"
这样用户只能通过 Nginx 访问。
2. 设置访问密码
在 .env 中配置:
AUTH_SECRET_KEY=your-strong-password
如果部署的前端支持多访问码,也可以设置多个访问码。
3. 开启 HTTPS
不要长期使用 HTTP。
HTTPS 可以避免访问密码和聊天内容被明文传输。
4. 保护 API Key
API Key 一旦泄露,可能造成费用损失。
建议:
- 不要写入前端代码;
- 不要提交 Git;
- 不要发给他人;
- 定期轮换;
- 设置账单额度;
- 开启用量监控。
5. 限制服务器 SSH 登录
修改 SSH 默认端口可以降低扫描风险。
编辑配置:
sudo vim /etc/ssh/sshd_config
例如修改:
Port 2222
PermitRootLogin no
PasswordAuthentication no
重启 SSH:
sudo systemctl restart ssh
注意:修改 SSH 前一定要确认新端口已经放行,并保留一个已登录窗口,避免把自己锁在服务器外。
6. 配置防火墙
建议只开放必要端口:
sudo ufw allow 2222
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
如果 SSH 仍使用 22 端口:
sudo ufw allow 22
二十二、常见问题排查
问题 1:访问域名打不开
检查 DNS 是否生效:
ping chat.example.com
检查 Nginx 是否运行:
sudo systemctl status nginx
检查端口监听:
sudo ss -tulnp | grep nginx
检查防火墙:
sudo ufw status
问题 2:Nginx 502 Bad Gateway
通常是后端服务没有启动或端口不正确。
检查容器:
sudo docker ps
检查日志:
sudo docker logs -f chatgpt-web
检查本机访问:
curl http://127.0.0.1:3000
如果本机都无法访问,说明 Docker 服务有问题。
问题 3:提示 API Key 无效
检查 .env 文件:
cat /opt/chatgpt-web/.env
确认:
OPENAI_API_KEY=sk-xxxxxxxx
修改后需要重启容器:
cd /opt/chatgpt-web
sudo docker compose down
sudo docker compose up -d
问题 4:模型无法调用
检查模型名称是否正确,例如:
OPENAI_API_MODEL=gpt-4o-mini
如果你使用的是其他 API 服务商,需要确认该服务商支持该模型名称。
问题 5:HTTPS 证书申请失败
常见原因:
- 域名没有解析到服务器;
- 80 端口未开放;
- Nginx 配置错误;
- 服务器安全组未放行 80/443;
- 已达到 Let’s Encrypt 申请频率限制。
可以先测试:
curl http://chat.example.com
再重新申请:
sudo certbot --nginx -d chat.example.com
二十三、完整文件汇总
1. /opt/chatgpt-web/.env
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENAI_API_BASE_URL=https://api.openai.com/v1
OPENAI_API_MODEL=gpt-4o-mini
AUTH_SECRET_KEY=ChangeMeToAVeryStrongPassword
SITE_TITLE=Private ChatGPT
PORT=3000
2. /opt/chatgpt-web/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:3000:3000"
environment:
OPENAI_API_KEY: ${OPENAI_API_KEY}
BASE_URL: ${OPENAI_API_BASE_URL}
CODE: ${AUTH_SECRET_KEY}
DEFAULT_MODEL: ${OPENAI_API_MODEL}
env_file:
- .env
networks:
- chatgpt-net
networks:
chatgpt-net:
driver: bridge
3. /etc/nginx/sites-available/chatgpt-web
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_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
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 vim /opt/install-chatgpt-web.sh
写入:
#!/bin/bash
set -e
PROJECT_DIR="/opt/chatgpt-web"
echo "Updating system..."
apt update
apt install -y curl wget git vim nginx ufw ca-certificates gnupg lsb-release
echo "Installing Docker..."
if ! command -v docker &> /dev/null; then
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) 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
fi
systemctl enable docker
systemctl start docker
echo "Creating project directory..."
mkdir -p ${PROJECT_DIR}
cat > ${PROJECT_DIR}/docker-compose.yml < ${PROJECT_DIR}/.env <
赋予执行权限:
sudo chmod +x /opt/install-chatgpt-web.sh
执行脚本:
sudo /opt/install-chatgpt-web.sh
执行后一定要修改 .env 文件:
sudo vim /opt/chatgpt-web/.env
修改完成后重启:
cd /opt/chatgpt-web
sudo docker compose down
sudo docker compose up -d
二十五、部署后的使用建议
完成部署后,可以按照以下方式使用:
- 浏览器打开:
https://chat.example.com
- 输入访问密码;
- 选择模型;
- 开始对话。
如果是团队内部使用,建议:
- 给每个人单独分配访问码;
- 定期查看 API 使用量;
- 设置预算上限;
- 不要让页面公开传播;
- 根据业务需要配置日志策略。
二十六、总结
本文完整介绍了如何在 Ubuntu 服务器上部署一个基于 OpenAI API 的 ChatGPT Web 应用,主要步骤包括:
- 准备服务器、域名和 API Key;
- 安装 Docker 和 Docker Compose;
- 编写
.env环境变量文件; - 编写
docker-compose.yml; - 启动 ChatGPT Web 容器;
- 使用 Nginx 做反向代理;
- 使用 Certbot 配置 HTTPS;
- 进行安全加固和常见问题排查。
最终你将得到一个可以通过自定义域名访问的私有 ChatGPT Web 服务:
https://chat.example.com
需要注意的是,所谓“部署 ChatGPT”并不是部署 OpenAI 官方 ChatGPT 本体,而是部署一个调用 OpenAI API 的 Web 客户端。
只要正确配置 API Key、域名、HTTPS 和访问密码,就可以稳定、安全地在自己的服务器上使用。