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

从零搭一个自己的 ChatGPT 网页版:Docker、Nginx、HTTPS 配置全流程

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

ChatGPT 部署完整教程|附配置文件

本文将从零开始讲解如何在服务器上部署一个可访问的 ChatGPT Web 服务,适合个人使用、团队内部使用或作为 AI 助手入口。教程包含环境准备、项目选择、Docker 部署、Nginx 反向代理、HTTPS 配置、环境变量说明、常见问题排查,并附带完整配置文件示例。


一、前言:部署 ChatGPT 到底是什么意思?

严格来说,ChatGPT 本身并不能直接“私有化部署”

ChatGPT 是 OpenAI 提供的对话式 AI 产品,它背后依赖大模型服务。普通用户无法把官方 ChatGPT 完整部署到自己的服务器上。

但我们通常所说的“部署 ChatGPT”,一般指的是:

  1. 使用 OpenAI API 或其他大模型 API;
  2. 部署一个类似 ChatGPT 的 Web 前端;
  3. 用户通过浏览器访问自己的域名;
  4. 前端调用后端接口;
  5. 后端再请求 OpenAI、Azure OpenAI、DeepSeek、通义千问、智谱、Claude 等模型服务;
  6. 最终实现类似 ChatGPT 的聊天体验。

因此,本文的部署目标是:

在自己的服务器上部署一个 ChatGPT 风格的 Web 应用,并通过 API Key 接入大模型服务。


二、部署方案选择

目前常见的 ChatGPT Web 部署方案主要有以下几类。

1. NextChat

原名 ChatGPT-Next-Web,是非常流行的开源 ChatGPT Web 项目。

优点:

  • 部署简单;
  • 支持 Docker;
  • UI 简洁;
  • 支持多种模型接口;
  • 适合个人和小团队使用。

适合人群:

  • 想快速搭建一个可用 ChatGPT Web 页面的用户;
  • 对后端开发要求不高;
  • 希望通过 Docker 一键部署。

2. LobeChat

LobeChat 是功能更丰富的 AI 聊天应用。

优点:

  • 界面现代;
  • 插件生态较好;
  • 支持多模型;
  • 适合高级用户。

适合人群:

  • 需要更丰富会话管理;
  • 需要模型市场、插件或 Agent 能力;
  • 希望打造更完整 AI 工作台。

3. 自研前后端

如果你有开发能力,也可以使用:

  • Vue / React 前端;
  • Node.js / Python / Go 后端;
  • OpenAI SDK;
  • 数据库存储历史会话。

优点是高度可控,缺点是开发和维护成本较高。


三、本文采用的部署方案

为了兼顾简单性、稳定性和可维护性,本文采用以下方案:

用户浏览器
   ↓
Nginx HTTPS 反向代理
   ↓
ChatGPT Web Docker 容器
   ↓
OpenAI API / 兼容 API 服务

服务器环境示例:

系统:Ubuntu 22.04 LTS
CPU:1 核及以上
内存:1GB 及以上
磁盘:10GB 及以上
域名:chat.example.com
部署方式:Docker Compose
反向代理:Nginx
HTTPS:Let's Encrypt SSL 证书

如果只是个人使用,1 核 1GB 的轻量服务器通常也能运行。因为真正消耗计算资源的是大模型 API 服务,而不是你的 Web 前端服务器。


四、部署前准备工作

在正式部署之前,你需要准备以下内容。

1. 一台云服务器

可以使用以下任意云服务商:

  • 阿里云;
  • 腾讯云;
  • 华为云;
  • AWS;
  • Google Cloud;
  • Azure;
  • Vultr;
  • DigitalOcean;
  • Hetzner。

推荐系统选择:

Ubuntu 22.04 LTS

2. 一个域名

例如:

chat.example.com

将该域名解析到你的服务器公网 IP。

DNS 解析示例:

类型 主机记录 记录值
A chat 你的服务器公网 IP

解析完成后,可以在本地测试:

ping chat.example.com

如果能够解析到服务器 IP,说明 DNS 基本生效。

3. 一个 API Key

如果使用 OpenAI,需要准备 OpenAI API Key。

格式通常类似:

sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

如果使用兼容 OpenAI API 的服务,也需要准备对应平台的 Key,例如:

  • Azure OpenAI;
  • DeepSeek;
  • Moonshot;
  • 通义千问;
  • 智谱 GLM;
  • OpenRouter;
  • SiliconFlow;
  • 火山方舟等。

本文以兼容 OpenAI API 的部署方式为主。


五、服务器基础环境安装

使用 SSH 登录服务器:

ssh root@你的服务器IP

更新系统软件包:

apt update && apt upgrade -y

安装常用工具:

apt install -y curl wget git vim unzip ufw ca-certificates gnupg lsb-release

六、安装 Docker

1. 卸载旧版本 Docker

apt remove -y docker docker-engine docker.io containerd runc

2. 安装 Docker 官方依赖

apt install -y ca-certificates curl gnupg

创建 keyrings 目录:

install -m 0755 -d /etc/apt/keyrings

添加 Docker GPG Key:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
gpg --dearmor -o /etc/apt/keyrings/docker.gpg

设置权限:

chmod a+r /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 \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null

更新软件源:

apt update

安装 Docker:

apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. 验证 Docker 是否安装成功

docker version

查看 Docker Compose:

docker compose version

如果能正常显示版本号,说明 Docker 已安装完成。


七、创建部署目录

建议所有服务统一放到 /opt 目录下:

mkdir -p /opt/chatgpt-web
cd /opt/chatgpt-web

目录结构规划如下:

/opt/chatgpt-web
├── docker-compose.yml
├── .env
└── nginx
    └── chatgpt.conf

创建 nginx 配置目录:

mkdir -p nginx

八、编写环境变量文件

/opt/chatgpt-web 下创建 .env 文件:

vim .env

示例配置如下:

# 站点访问密码,可选
# 如果不希望公开访问,建议设置访问密码
CODE=your_access_password

# OpenAI API Key
OPENAI_API_KEY=sk-your-api-key

# OpenAI API 地址
# 官方地址:
BASE_URL=https://api.openai.com

# 如果你使用的是兼容 OpenAI 的第三方平台,可以改成:
# BASE_URL=https://api.deepseek.com
# BASE_URL=https://openrouter.ai/api
# BASE_URL=https://api.moonshot.cn/v1

# 默认模型
DEFAULT_MODEL=gpt-4o-mini

# 是否隐藏用户 API Key 输入框
HIDE_USER_API_KEY=1

# 是否禁止用户自行设置模型
DISABLE_GPT4=0

# 应用端口
PORT=3000

说明:

配置项 说明
CODE 访问密码,建议设置
OPENAI_API_KEY 模型服务 API Key
BASE_URL API 服务地址
DEFAULT_MODEL 默认使用模型
HIDE_USER_API_KEY 是否隐藏用户自定义 Key
PORT 容器内部监听端口

如果你只给自己使用,可以设置一个较复杂的 CODE,避免别人访问后消耗你的 API 额度。


九、编写 Docker Compose 配置文件

创建 docker-compose.yml

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"
    env_file:
      - .env
    environment:
      - CODE=${CODE}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - BASE_URL=${BASE_URL}
      - DEFAULT_MODEL=${DEFAULT_MODEL}
      - HIDE_USER_API_KEY=${HIDE_USER_API_KEY}
      - DISABLE_GPT4=${DISABLE_GPT4}
    networks:
      - chatgpt-net

networks:
  chatgpt-net:
    driver: bridge

该配置会拉取 chatgpt-next-web 镜像,并将容器的 3000 端口映射到宿主机 3000 端口。

启动服务:

docker compose up -d

查看容器状态:

docker ps

查看日志:

docker logs -f chatgpt-web

如果看到应用正常启动,说明容器运行成功。


十、测试本地端口访问

如果你的服务器安全组开放了 3000 端口,可以临时访问:

http://你的服务器IP:3000

如果无法访问,请检查:

  1. 容器是否运行;
  2. 服务器防火墙是否放行 3000;
  3. 云服务商安全组是否放行 3000;
  4. 应用日志是否有错误;
  5. API Key 是否填写正确。

为了安全起见,正式生产环境不建议直接暴露 3000 端口,而是通过 Nginx 反向代理到 HTTPS 域名。


十一、安装 Nginx

安装 Nginx:

apt install -y nginx

启动 Nginx:

systemctl start nginx

设置开机自启:

systemctl enable nginx

查看状态:

systemctl status nginx

如果显示 active running,说明 Nginx 正常运行。


十二、配置 Nginx 反向代理

创建 Nginx 配置文件:

vim /etc/nginx/sites-available/chatgpt.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_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}

将配置文件启用:

ln -s /etc/nginx/sites-available/chatgpt.conf /etc/nginx/sites-enabled/chatgpt.conf

测试 Nginx 配置是否正确:

nginx -t

如果显示:

syntax is ok
test is successful

则重载 Nginx:

systemctl reload nginx

现在可以访问:

http://chat.example.com

如果正常打开页面,说明反向代理已经配置成功。


十三、配置 HTTPS 证书

生产环境强烈建议开启 HTTPS。

这里使用 Let's Encrypt 免费证书。

1. 安装 Certbot

apt install -y certbot python3-certbot-nginx

2. 申请 SSL 证书

执行:

certbot --nginx -d chat.example.com

按照提示输入邮箱并确认协议。

Certbot 会自动修改 Nginx 配置并启用 HTTPS。

完成后,可以访问:

https://chat.example.com

3. 测试证书自动续期

Let's Encrypt 证书有效期通常为 90 天,Certbot 会自动续期。可以手动测试:

certbot renew --dry-run

如果没有报错,说明自动续期正常。


十四、完整 Nginx HTTPS 配置示例

如果你希望手动维护 Nginx 配置,可以参考以下完整示例:

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_ciphers HIGH:!aNULL:!MD5;

    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 https;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_buffering off;
        proxy_cache off;

        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}

注意将 chat.example.com 替换为你的真实域名。


十五、防火墙与安全组配置

如果你使用 UFW 防火墙,可以执行:

ufw allow OpenSSH
ufw allow 80
ufw allow 443
ufw enable

查看状态:

ufw status

建议不要开放 3000 端口到公网。

如果之前开放过,可以关闭:

ufw deny 3000

同时在云服务器控制台安全组中,只放行:

22
80
443

其中:

  • 22 用于 SSH;
  • 80 用于 HTTP 访问和证书签发;
  • 443 用于 HTTPS 访问。

如果你有固定 IP,SSH 端口最好限制为仅允许自己的 IP 访问。


十六、更新 ChatGPT Web

当项目镜像有新版本时,可以执行:

cd /opt/chatgpt-web
docker compose pull
docker compose up -d

清理无用镜像:

docker image prune -f

查看新容器是否正常:

docker ps
docker logs -f chatgpt-web

十七、重启与停止服务

重启服务:

cd /opt/chatgpt-web
docker compose restart

停止服务:

docker compose down

重新启动:

docker compose up -d

查看日志:

docker logs -f chatgpt-web

十八、使用第三方兼容 OpenAI API 的模型

很多模型平台提供了兼容 OpenAI 格式的 API。通常只需要修改 .env 中的 BASE_URLOPENAI_API_KEYDEFAULT_MODEL

1. 使用 DeepSeek 示例

OPENAI_API_KEY=sk-your-deepseek-key
BASE_URL=https://api.deepseek.com
DEFAULT_MODEL=deepseek-chat

2. 使用 Moonshot 示例

OPENAI_API_KEY=sk-your-moonshot-key
BASE_URL=https://api.moonshot.cn/v1
DEFAULT_MODEL=moonshot-v1-8k

3. 使用 OpenRouter 示例

OPENAI_API_KEY=sk-or-your-openrouter-key
BASE_URL=https://openrouter.ai/api/v1
DEFAULT_MODEL=openai/gpt-4o-mini

修改完成后重启容器:

cd /opt/chatgpt-web
docker compose restart

十九、推荐的生产环境配置

如果你是团队内部使用,建议配置如下:

CODE=一个复杂访问密码
OPENAI_API_KEY=你的服务端统一APIKey
BASE_URL=https://api.openai.com
DEFAULT_MODEL=gpt-4o-mini
HIDE_USER_API_KEY=1
DISABLE_GPT4=0
PORT=3000

同时建议:

  1. 开启 HTTPS;
  2. 不暴露 3000 端口;
  3. 设置访问密码;
  4. 定期查看 API 用量;
  5. 不要把 API Key 写到公开仓库;
  6. 限制服务器 SSH 登录 IP;
  7. 开启云服务商账单告警;
  8. 使用强密码或密钥登录服务器。

二十、常见问题排查

1. 页面打不开

检查容器是否启动:

docker ps

检查端口监听:

ss -tunlp | grep 3000

检查 Nginx 状态:

systemctl status nginx

检查 Nginx 配置:

nginx -t

查看日志:

docker logs -f chatgpt-web
tail -f /var/log/nginx/error.log

2. 提示 API Key 无效

常见原因:

  • API Key 填写错误;
  • API Key 已过期;
  • API Key 没有余额;
  • 使用了错误的 API 地址;
  • 第三方平台模型名称填写错误;
  • 服务商不支持当前模型。

解决方法:

  1. 登录模型服务商后台检查 Key;
  2. 确认账户余额;
  3. 确认 API endpoint;
  4. 修改 .env 后重启容器。

3. 聊天时一直转圈

可能原因:

  • Nginx 超时时间太短;
  • API 服务响应慢;
  • 网络无法访问模型服务;
  • 容器环境变量未生效。

建议检查:

docker logs -f chatgpt-web

同时确认 Nginx 中存在:

proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_buffering off;

4. 修改配置后不生效

如果你修改了 .env,需要重启容器:

cd /opt/chatgpt-web
docker compose down
docker compose up -d

仅 reload Nginx 不会让 Docker 容器重新读取 .env

5. HTTPS 证书申请失败

检查:

  1. 域名是否解析到当前服务器;
  2. 80 端口是否开放;
  3. Nginx 是否正常运行;
  4. 是否有其他程序占用 80 端口;
  5. 云服务商安全组是否放行 80。

查看端口占用:

ss -tunlp | grep ':80'

二十一、备份与迁移

如果你只是使用基础 Docker 部署,一般需要备份以下文件:

/opt/chatgpt-web/docker-compose.yml
/opt/chatgpt-web/.env
/etc/nginx/sites-available/chatgpt.conf

备份命令示例:

tar -czvf chatgpt-web-backup.tar.gz \
/opt/chatgpt-web \
/etc/nginx/sites-available/chatgpt.conf

迁移到新服务器时:

  1. 安装 Docker;
  2. 安装 Nginx;
  3. 解压备份文件;
  4. 修改域名解析;
  5. 重新启动 Docker Compose;
  6. 重新申请或迁移 SSL 证书。

二十二、完整文件汇总

1. .env

CODE=your_access_password
OPENAI_API_KEY=sk-your-api-key
BASE_URL=https://api.openai.com
DEFAULT_MODEL=gpt-4o-mini
HIDE_USER_API_KEY=1
DISABLE_GPT4=0
PORT=3000

2. docker-compose.yml

version: "3.8"

services:
  chatgpt-web:
    image: yidadaa/chatgpt-next-web:latest
    container_name: chatgpt-web
    restart: always
    ports:
      - "127.0.0.1:3000:3000"
    env_file:
      - .env
    environment:
      - CODE=${CODE}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - BASE_URL=${BASE_URL}
      - DEFAULT_MODEL=${DEFAULT_MODEL}
      - HIDE_USER_API_KEY=${HIDE_USER_API_KEY}
      - DISABLE_GPT4=${DISABLE_GPT4}
    networks:
      - chatgpt-net

networks:
  chatgpt-net:
    driver: bridge

这里推荐使用:

ports:
  - "127.0.0.1:3000:3000"

这样 3000 端口只监听本机,不直接暴露到公网,更安全。

3. Nginx 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_ciphers HIGH:!aNULL:!MD5;

    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 https;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_buffering off;
        proxy_cache off;

        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}

二十三、部署完成后的访问方式

部署完成后,在浏览器中访问:

https://chat.example.com

如果你配置了访问密码,首次使用时输入 .env 中的 CODE 即可。

之后你就可以像使用 ChatGPT 一样进行对话。


二十四、总结

本文完整介绍了如何在 Ubuntu 服务器上使用 Docker Compose 部署一个 ChatGPT Web 服务,并通过 Nginx 配置反向代理和 HTTPS 访问。

整体流程可以概括为:

准备服务器和域名
安装 Docker
创建部署目录
编写 .env 配置
编写 docker-compose.yml
启动 ChatGPT Web 容器
安装并配置 Nginx
申请 HTTPS 证书
测试访问
完成部署

对于个人或小团队来说,这种部署方式成本低、维护简单、扩展灵活。你既可以接入 OpenAI 官方 API,也可以根据实际需求切换到兼容 OpenAI API 的其他模型平台。

最后需要特别注意:API Key 一定不要泄露,访问入口也不要完全裸奔公开。建议至少配置访问密码、HTTPS 和服务器防火墙,并定期检查 API 消耗情况,避免产生不必要的费用。

目录结构
全文