云计算百科
云计算领域专业知识百科平台

服务器一次性部署One API + ChatGPT-Next-Web

服务器一次性部署One API + ChatGPT-Next-Web

  • One API + ChatGPT-Next-Web 介绍
      • One API
      • ChatGPT-Next-Web
  • docker-compose 部署One API + ChatGPT-Next-Web
    • Open API docker-compose 配置
    • ChatGPT-Next-Web docker-compose 配置
    • docker-compose 启动容器
  • 后续配置

同步发布在个人笔记服务器一次性部署One API + ChatGPT-Next-Web

One API + ChatGPT-Next-Web 介绍

自从 OpenAI 公布旗下产品 ChatGPT 后,AIGC 的热潮已经到来很久了,我一直都只是及其轻度的翻墙使用 ChatGPT 或者使用手机品牌自带的产品。最近终于下定决心多了解一下,才发现类 ChatGPT 的产品已经多到一双手不够数了(实在太落伍了 〒▽〒 )。

为了更方便的体验多家的AI,遂决定在自己的服务器上使用 docker-compose 搭建一个可以集中多家 API 并方便切换的服务。One API + ChatGPT-Next-Web 的组合为我提供了这样可能。

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格式)。

#mermaid-svg-BFdJWsJzUIYBXlV3 {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BFdJWsJzUIYBXlV3 .error-icon{fill:#552222;}#mermaid-svg-BFdJWsJzUIYBXlV3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BFdJWsJzUIYBXlV3 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-BFdJWsJzUIYBXlV3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BFdJWsJzUIYBXlV3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BFdJWsJzUIYBXlV3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BFdJWsJzUIYBXlV3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BFdJWsJzUIYBXlV3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BFdJWsJzUIYBXlV3 .marker.cross{stroke:#333333;}#mermaid-svg-BFdJWsJzUIYBXlV3 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BFdJWsJzUIYBXlV3 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-BFdJWsJzUIYBXlV3 .cluster-label text{fill:#333;}#mermaid-svg-BFdJWsJzUIYBXlV3 .cluster-label span{color:#333;}#mermaid-svg-BFdJWsJzUIYBXlV3 .label text,#mermaid-svg-BFdJWsJzUIYBXlV3 span{fill:#333;color:#333;}#mermaid-svg-BFdJWsJzUIYBXlV3 .node rect,#mermaid-svg-BFdJWsJzUIYBXlV3 .node circle,#mermaid-svg-BFdJWsJzUIYBXlV3 .node ellipse,#mermaid-svg-BFdJWsJzUIYBXlV3 .node polygon,#mermaid-svg-BFdJWsJzUIYBXlV3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BFdJWsJzUIYBXlV3 .node .label{text-align:center;}#mermaid-svg-BFdJWsJzUIYBXlV3 .node.clickable{cursor:pointer;}#mermaid-svg-BFdJWsJzUIYBXlV3 .arrowheadPath{fill:#333333;}#mermaid-svg-BFdJWsJzUIYBXlV3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BFdJWsJzUIYBXlV3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BFdJWsJzUIYBXlV3 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-BFdJWsJzUIYBXlV3 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-BFdJWsJzUIYBXlV3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BFdJWsJzUIYBXlV3 .cluster text{fill:#333;}#mermaid-svg-BFdJWsJzUIYBXlV3 .cluster span{color:#333;}#mermaid-svg-BFdJWsJzUIYBXlV3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BFdJWsJzUIYBXlV3 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

非 OpenAI 格式模型

标准 OpenAI 格式模型

One API 分发的 key

讯飞星火认知

其他大模型

OpenAI

Azure

其他大模型

用户

One API

ChatGPT-Next-Web

项目GitHub 一个很优秀的开源项目,可以方便的部署跨平台的私人 ChatGPT 应用, 原生支持大量模型。在我的项目中主要用看来以标准的 OpenAI API 和 One API 对接,作为一个聊天前端使用。

#mermaid-svg-PfxncnfYo6N00GEB {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PfxncnfYo6N00GEB .error-icon{fill:#552222;}#mermaid-svg-PfxncnfYo6N00GEB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PfxncnfYo6N00GEB .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-PfxncnfYo6N00GEB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PfxncnfYo6N00GEB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PfxncnfYo6N00GEB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PfxncnfYo6N00GEB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PfxncnfYo6N00GEB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PfxncnfYo6N00GEB .marker.cross{stroke:#333333;}#mermaid-svg-PfxncnfYo6N00GEB svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PfxncnfYo6N00GEB .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-PfxncnfYo6N00GEB .cluster-label text{fill:#333;}#mermaid-svg-PfxncnfYo6N00GEB .cluster-label span{color:#333;}#mermaid-svg-PfxncnfYo6N00GEB .label text,#mermaid-svg-PfxncnfYo6N00GEB span{fill:#333;color:#333;}#mermaid-svg-PfxncnfYo6N00GEB .node rect,#mermaid-svg-PfxncnfYo6N00GEB .node circle,#mermaid-svg-PfxncnfYo6N00GEB .node ellipse,#mermaid-svg-PfxncnfYo6N00GEB .node polygon,#mermaid-svg-PfxncnfYo6N00GEB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PfxncnfYo6N00GEB .node .label{text-align:center;}#mermaid-svg-PfxncnfYo6N00GEB .node.clickable{cursor:pointer;}#mermaid-svg-PfxncnfYo6N00GEB .arrowheadPath{fill:#333333;}#mermaid-svg-PfxncnfYo6N00GEB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PfxncnfYo6N00GEB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PfxncnfYo6N00GEB .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-PfxncnfYo6N00GEB .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-PfxncnfYo6N00GEB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PfxncnfYo6N00GEB .cluster text{fill:#333;}#mermaid-svg-PfxncnfYo6N00GEB .cluster span{color:#333;}#mermaid-svg-PfxncnfYo6N00GEB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PfxncnfYo6N00GEB :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

浏览器访问

标准 OpenAI API 格式

用户

One API

ChatGPT-Next-Web

docker-compose 部署One API + ChatGPT-Next-Web

docker-compose 一次性部署多个服务的方法可以参考我以前的笔记: docker compose部署nginx+php+mysql+phpmyadmin环境 本次的项目只有两个,相比于 LNMP 环境更加简单,本笔记分别记录最终的 compose 文件中的两个部分,如果只想部署其中一个服务的话,只使用对应的部分就好了。

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/oneapi:v0.6.10
container_name: oneapi
restart: always
# network: host
command: logdir /app/logs
ports:
"yourport:3000"# 填写映射到服务器上的端口号
volumes:
yourdatapath:/data# 填写自己本地的数据保存路径
yourlogpath:/app/logs# 填写自己本地的日志保存路径
environment:
SQL_DSN=oneapi:123456@tcp(db:3306)/oneapi # 修改此行,或注释掉以使用 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: oneapi # 自动创建数据库

注意:上述的文件会使用镜像内部的数据库,如果我们服务器上已经有了数据库,那可以在环境变量部分直接指定本机的数据库,redis 和 db 部分将不再需要。形如下面:

version: '3.4'

services:
one-api:
image: justsong/oneapi:v0.6.10
container_name: oneapi
restart: always
# network: host
command: logdir /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 等工具会十分方便。

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: chatgptnextweb
image: yidadaa/chatgptnextweb: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

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 在这里插入图片描述

后续配置

笔记只记录了两个平台的搭建过程。后续会以讯飞的 SparkDesk 模型为例,介绍如何联通两个服务,实现个人服务器访问类 ChatGPT AI。 后续笔记已更新: 配置 One API + ChatGPT-Next-Web,以讯飞星火认知大模型为例

赞(0)
未经允许不得转载:网硕互联帮助中心 » 服务器一次性部署One API + ChatGPT-Next-Web
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!