服务器一次性部署One API + ChatGPT-Next-Web
Contents
1.0 One API + ChatGPT-Next-Web 介绍
自从 OpenAI 公布旗下产品 ChatGPT 后,AIGC 的热潮已经到来很久了,我一直都只是及其轻度的翻墙使用 ChatGPT 或者使用手机品牌自带的产品。最近终于下定决心多了解一下,才发现类 ChatGPT 的产品已经多到一双手不够数了(实在太落伍了 〒▽〒 )。
为了更方便的体验多家的AI,遂决定在自己的服务器上使用 docker-compose 搭建一个可以集中多家 API 并方便切换的服务。One API + ChatGPT-Next-Web 的组合为我提供了这样可能。
1.1 One API
项目GitHub
One API 是一个多平台大模型 API 的接口管理 & 分发系统,支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元等绝大部分模型。
在开发中我们会遇到这样的问题:大量的开源或成熟的项目是基于 OpenAI 的 API 编写的,但是我们需要对接的资源是非 OpenAI 的;或者我们需要在多个不同 API 接口的模型间进行切换。这都要求我们学习或频繁切换多家的 API。
如果我们有一个系统,可以把多个产品集中起来,并以一种统一的 API 接口暴露出来,那我们就可以方便的部署所有基于 OpenAI API 的项目了;在多家 AI 之间切换时也不再需要修改 API 格式。
One API 就可以实现这样的功能:它作为一个 Agent ,把多家大模型 API 接口接收进来,用户通过 One API 分发的 key 访问,实现以标准的 OpenAI API 格式访问所有的大模型(也可以统一使用非 OpenAI格式)。
1.2 ChatGPT-Next-Web
项目GitHub
一个很优秀的开源项目,可以方便的部署跨平台的私人 ChatGPT 应用, 原生支持大量模型。在我的项目中主要用看来以标准的 OpenAI API 和 One API 对接,作为一个聊天前端使用。
2.0 docker-compose 部署One API + ChatGPT-Next-Web
docker-compose 一次性部署多个服务的方法可以参考我以前的笔记:
docker compose部署nginx+php+mysql+phpmyadmin环境
本次的项目只有两个,相比于 LNMP 环境更加简单,本笔记分别记录最终的 compose 文件中的两个部分,如果只想部署其中一个服务的话,只使用对应的部分就好了。
2.1 Open API docker-compose 配置
最推荐自己阅读 github 上官方的 docker-compose 文件。
推荐先把镜像 pull 下来:
docker pull justsong/one-api:v0.6.10 # 最好指定版本号,默认tag可能会获得测试版镜像导致不稳定。
这里我的配置文件如下:
docker-compose.yml
version: '3.4'
services:
one-api:
image: justsong/one-api:v0.6.10
container_name: one-api
restart: always
# network: host
command: --log-dir /app/logs
ports:
- "yourport:3000" # 填写映射到服务器上的端口号
volumes:
- yourdatapath:/data # 填写自己本地的数据保存路径
- yourlogpath:/app/logs # 填写自己本地的日志保存路径
environment:
- SQL_DSN=oneapi:123456@tcp(db:3306)/one-api # 修改此行,或注释掉以使用 SQLite 作为数据库
- REDIS_CONN_STRING=redis://redis
- SESSION_SECRET=random_string # 修改为随机字符串
- TZ=Asia/Shanghai
# - NODE_TYPE=slave # 多机部署时从节点取消注释该行
# - SYNC_FREQUENCY=60 # 需要定期从数据库加载数据时取消注释该行
# - FRONTEND_BASE_URL=https://openai.justsong.cn # 多机部署时从节点取消注释该行
depends_on:
- redis
- db
healthcheck:
test: [ "CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $2}'" ]
interval: 30s
timeout: 10s
retries: 3
redis:
image: "${REGISTRY:-docker.io}/redis:latest"
container_name: redis
restart: always
db:
image: "${REGISTRY:-docker.io}/mysql:8.2.0"
restart: always
container_name: mysql
volumes:
- ./data/mysql:/var/lib/mysql # 挂载目录,持久化存储
ports:
- '3306:3306'
environment:
TZ: Asia/Shanghai # 设置时区
MYSQL_ROOT_PASSWORD: 'OneAPI@justsong' # 设置 root 用户的密码
MYSQL_USER: oneapi # 创建专用用户
MYSQL_PASSWORD: '123456' # 设置专用用户密码
MYSQL_DATABASE: one-api # 自动创建数据库
注意:上述的文件会使用镜像内部的数据库,如果我们服务器上已经有了数据库,那可以在环境变量部分直接指定本机的数据库,redis 和 db 部分将不再需要。形如下面:
version: '3.4'
services:
one-api:
image: justsong/one-api:v0.6.10
container_name: one-api
restart: always
# network: host
command: --log-dir /app/logs
ports:
- "yourport:3000" # 填写映射到服务器上的端口号
volumes:
- yourdatapath:/data # 填写自己本地的数据保存路径
- yourlogpath:/app/logs # 填写自己本地的日志保存路径
environment:
- SQL_DSN=数据库专用用户:用户密码@tcp(数据库地址:数据库端口)/数据库名称 # 修改此行,或注释掉以使用 SQLite 作为数据库
- SESSION_SECRET=random_string # 修改为随机字符串
- TZ=Asia/Shanghai
# - NODE_TYPE=slave # 多机部署时从节点取消注释该行
# - SYNC_FREQUENCY=60 # 需要定期从数据库加载数据时取消注释该行
# - FRONTEND_BASE_URL=https://openai.justsong.cn # 多机部署时从节点取消注释该行
healthcheck:
test: [ "CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $2}'" ]
interval: 30s
timeout: 10s
retries: 3
在使用本地服务器时,推荐先把数据库建好,使用类似 phpmyadmin 等工具会十分方便。
2.2 ChatGPT-Next-Web docker-compose 配置
最推荐自己阅读 github 上官方的 docker-compose 文件。
推荐先把镜像 pull 下来:
docker pull yidadaa/chatgpt-next-web:v2.15.8
这里我的配置文件如下:
docker-compose.yml
version: '3.4'
services:
chatgpt-next-web:
# profiles: [ "no-proxy" ]
container_name: chatgpt-next-web
image: yidadaa/chatgpt-next-web:v2.15.8
ports:
- yourport:3000
environment:
- OPENAI_API_KEY=$OPENAI_API_KEY
- GOOGLE_API_KEY=$GOOGLE_API_KEY
- CODE=指定一个登录字段
- BASE_URL=$BASE_URL
- OPENAI_ORG_ID=$OPENAI_ORG_ID
- HIDE_USER_API_KEY=$HIDE_USER_API_KEY
- DISABLE_GPT4=$DISABLE_GPT4
- ENABLE_BALANCE_QUERY=$ENABLE_BALANCE_QUERY
- DISABLE_FAST_LINK=$DISABLE_FAST_LINK
- OPENAI_SB=$OPENAI_SB
2.3 docker-compose 启动容器
如果只需要部署一个服务的话,直接使用上面某个服务的文件即可;如果要一次性部署两个服务,则需要将两个文件合并在一个文件内,注意删除重复的version: ‘3.4’ services:字段,最终形如下面的格式:
# Creat container for One API + ChatGPT-Next-Web
version: '3.4'
services:
one-api:
###
###
###
chatgpt-next-web:
###
###
###
最后运行命令:
docker-compose up -d
使用命令docker ps
查看当前运行的容器里面是否有我们的 one-api 和 chatgpt-next-web,如果有的话,那就运行成功了。
此时我们通过浏览器分别访问地址:
One API
yourdomain:oneapi_port
首次访问需要登录,默认用户为 root ,默认密码是 12345。
ChatGPT-Next-Web:
yourdomain:chatgptnextweb_port
3.0 后续配置
笔记只记录了两个平台的搭建过程。后续会以讯飞的 SparkDesk 模型为例,介绍如何联通两个服务,实现个人服务器访问类 ChatGPT AI。
后续笔记已更新:
配置 One API + ChatGPT-Next-Web,以讯飞星火认知大模型为例