服务器一次性部署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](#docker-compose 部署One API + ChatGPT-Next-Web)
    • [Open API docker-compose 配置](#Open API docker-compose 配置)
    • [ChatGPT-Next-Web docker-compose 配置](#ChatGPT-Next-Web docker-compose 配置)
    • [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格式)。
非 OpenAI 格式模型 标准 OpenAI 格式模型 One API 分发的 key 讯飞星火认知 其他大模型 OpenAI Azure 其他大模型 用户 One API

ChatGPT-Next-Web

项目GitHub

一个很优秀的开源项目,可以方便的部署跨平台的私人 ChatGPT 应用, 原生支持大量模型。在我的项目中主要用看来以标准的 OpenAI API 和 One API 对接,作为一个聊天前端使用。
浏览器访问 标准 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 下来:

bash 复制代码
docker pull justsong/one-api:v0.6.10	# 最好指定版本号,默认tag可能会获得测试版镜像导致不稳定。

这里我的配置文件如下:
docker-compose.yml

yaml 复制代码
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 部分将不再需要。形如下面:

yaml 复制代码
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 等工具会十分方便。

ChatGPT-Next-Web docker-compose 配置

最推荐自己阅读 github 上官方的 docker-compose 文件

推荐先把镜像 pull 下来:

bash 复制代码
docker pull yidadaa/chatgpt-next-web:v2.15.8 

这里我的配置文件如下:
docker-compose.yml

yaml 复制代码
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

docker-compose 启动容器

如果只需要部署一个服务的话,直接使用上面某个服务的文件即可;如果要一次性部署两个服务,则需要将两个文件合并在一个文件内,注意删除重复的***version: '3.4' services:***字段,最终形如下面的格式:

yaml 复制代码
# Creat container for One API + ChatGPT-Next-Web
version: '3.4'

services:
  one-api:
	###
	###
	###

  chatgpt-next-web:
	###
	###
	###

最后运行命令:

bash 复制代码
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,以讯飞星火认知大模型为例

相关推荐
Juttt7 分钟前
【Linux】进程状态
linux·运维·服务器
WG_177 分钟前
Linux:Makefile 以及实现第一个程序:进度条
linux·运维·服务器
癞皮狗不赖皮13 分钟前
WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOM&BEEF-XSS
前端·网络·网络安全·xss
一棵开花的树,枝芽无限靠近你25 分钟前
【PPTist】幻灯片放映
前端·笔记·学习·编辑器·pptist
前端熊猫28 分钟前
CSS3的aria-hidden学习
前端·学习·css3
众多菜狗中的一只菜狗一只30 分钟前
threejs中的相机与物体
前端·javascript·空间计算
码农君莫笑41 分钟前
linux 文件权限设置详解
linux·运维·服务器
癞皮狗不赖皮43 分钟前
WEB攻防-通用漏洞_XSS跨站_权限维持_捆绑钓鱼_浏览器漏洞
前端·web安全·网络安全·xss
周尛先森44 分钟前
专属于你的 Vue3 小指南
前端
_未知_开摆1 小时前
CSS | 实现三列布局(两边边定宽 中间自适应,自适应成比)
前端·css·vue.js·vue·html·css3·html5