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

从零搭建自己的 ChatGPT 网页版:Docker 部署与配置文件实战

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

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 私有化访问方案主要有以下几种:

  1. 直接使用 OpenAI 官方 ChatGPT

    • 优点:体验稳定,功能完整。
    • 缺点:无法自定义部署,访问和权限管理不够灵活。
  2. 部署 ChatGPT Web UI

    • 优点:界面可控,可配置自己的 API Key,可接入多种模型。
    • 缺点:仍需要依赖大模型 API。
  3. 部署本地大模型 + 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_URLOPENAI_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

不要使用简单密码,例如 123456password


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 服务非常方便,整体流程可以概括为:

  1. 安装 Docker 和 Docker Compose;
  2. 创建项目目录;
  3. 编写 .env 环境变量文件;
  4. 编写 docker-compose.yml
  5. 启动容器;
  6. 配置 Nginx 反向代理;
  7. 申请 HTTPS 证书;
  8. 做好访问密码和端口安全限制。

对于个人用户来说,这种方式可以快速拥有一个自己的 ChatGPT Web 页面;对于团队来说,也可以将模型能力统一封装为内部 AI 助手入口,便于统一管理、统一接入和统一维护。

如果只是测试使用,可以直接通过 服务器IP:3000 访问;如果用于长期运行,建议使用域名、HTTPS、访问密码以及 Nginx 反向代理,从而提升安全性和可维护性。

目录结构
全文