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

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

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

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

本文将从零开始讲解如何在一台云服务器上部署一个可访问的 ChatGPT Web 服务。文章包含服务器准备、Docker 环境安装、项目部署、环境变量配置、Nginx 反向代理、HTTPS 证书配置、系统服务管理、安全加固以及常见问题排查,并附带完整配置文件示例。


一、前言说明

很多人提到“部署 ChatGPT”,容易产生一个误解:
ChatGPT 本身并不能被直接私有化部署到自己的服务器上。

严格来说,ChatGPT 是 OpenAI 提供的在线服务,底层模型和官方服务并不开放给用户自行部署。但我们可以通过以下方式搭建一个类似 ChatGPT 的网页应用:

  1. 使用 OpenAI API;
  2. 部署一个 ChatGPT Web 前端;
  3. 将用户输入转发到 OpenAI API;
  4. 再把模型返回内容展示在网页中。

也就是说,本文部署的是一个 基于 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 证书申请失败

常见原因:

  1. 域名没有解析到服务器;
  2. 80 端口未开放;
  3. Nginx 配置错误;
  4. 服务器安全组未放行 80/443;
  5. 已达到 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

二十五、部署后的使用建议

完成部署后,可以按照以下方式使用:

  1. 浏览器打开:
https://chat.example.com
  1. 输入访问密码;
  2. 选择模型;
  3. 开始对话。

如果是团队内部使用,建议:

  • 给每个人单独分配访问码;
  • 定期查看 API 使用量;
  • 设置预算上限;
  • 不要让页面公开传播;
  • 根据业务需要配置日志策略。

二十六、总结

本文完整介绍了如何在 Ubuntu 服务器上部署一个基于 OpenAI API 的 ChatGPT Web 应用,主要步骤包括:

  1. 准备服务器、域名和 API Key;
  2. 安装 Docker 和 Docker Compose;
  3. 编写 .env 环境变量文件;
  4. 编写 docker-compose.yml
  5. 启动 ChatGPT Web 容器;
  6. 使用 Nginx 做反向代理;
  7. 使用 Certbot 配置 HTTPS;
  8. 进行安全加固和常见问题排查。

最终你将得到一个可以通过自定义域名访问的私有 ChatGPT Web 服务:

https://chat.example.com

需要注意的是,所谓“部署 ChatGPT”并不是部署 OpenAI 官方 ChatGPT 本体,而是部署一个调用 OpenAI API 的 Web 客户端。
只要正确配置 API Key、域名、HTTPS 和访问密码,就可以稳定、安全地在自己的服务器上使用。

目录结构
全文