服务器一次性部署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,以讯飞星火认知大模型为例

相关推荐
灯火不休ᝰ12 分钟前
前端处理pdf文件流,展示pdf
前端·pdf
智践行13 分钟前
Trae开发实战之转盘小程序
前端·trae
最新资讯动态19 分钟前
DialogHub上线OpenHarmony开源社区,高效开发鸿蒙应用弹窗
前端
lvbb6629 分钟前
框架修改思路
前端·javascript·vue.js
树上有只程序猿31 分钟前
Java程序员需要掌握的技术
前端
从零开始学安卓34 分钟前
Kotlin(三) 协程
前端
阿镇吃橙子38 分钟前
一些手写及业务场景处理问题汇总
前端·算法·面试
庸俗今天不摸鱼38 分钟前
【万字总结】前端全方位性能优化指南(九)——FSP(First Screen Paint)像素级分析、RUM+合成监控、Lighthouse CI
前端·性能优化
逆袭的小黄鸭39 分钟前
JavaScript:作用域与作用域链的底层逻辑
前端·javascript·面试