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

ChatGPT 网页版 Docker 部署实战:从启动命令到 HTTPS 配置全流程

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

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 服务。

目录结构
全文