服务器一次性部署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格式)。

非 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 下来:

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 等工具会十分方便。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955616.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习项目--基于LSTM的火灾预测研究(pytorch实现)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 LSTM模型一直是一个很经典的模型,这个模型当然也很复杂,一般需要先学习RNN、GRU模型之后再学,GRU、LSTM的模型讲解将…

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…

.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)

系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…

人参t2t基因组-文献精读100

Telomere-to-telomere reference genome for Panax ginseng highlights the evolution of saponin biosynthesis 人参的端粒到端粒参考基因组揭示皂苷生物合成的进化 摘要 人参(Panax ginseng)是中药的代表性植物之一,并在全球范围内广泛使…

一、1-2 5G-A通感融合基站产品及开通

1、通感融合定义和场景(阅读) 1.1通感融合定义 1.2通感融合应用场景 2、通感融合架构和原理(较难,理解即可) 2.1 感知方式 2.2 通感融合架构 SF(Sensing Function):核心网感知控制…

机器学习之SVD奇异值分解实现图片降维

SVD奇异值分解实现图片降维 目录 SVD奇异值分解实现图片降维1 SVD奇异值分解1.1 概念1.2 基本步骤1.2.1 矩阵分解1.2.2 选择奇异值1.2.3 重建矩阵1.2.4 降维结果 1.3 优缺点1.3.1 优点1.3.2 缺点 2 函数2.1 函数导入2.2 函数参数2.3 返回值2.4 通过 k 个奇异值降维 3 实际测试3…

Linux《Linux简介与环境的搭建》

在学习了C或者是C语言的基础知识之后就可以开始Linux的学习了,现在Linux无论是在服务器领域还是在桌面领域都被广泛的使用,所以Linxu也是我们学习编程的重要环节,在此接下来我们将会花大量的时间在Linxu的学习上。在学习Linux初期你可以会像初…

二进制/源码编译安装mysql 8.0

二进制方式: 1.下载或上传安装包至设备: 2.创建组与用户: [rootopenEuler-1 ~]# groupadd mysql [rootopenEuler-1 ~]# useradd -r -g mysql -s /bin/false mysql 3.解压安装包: tar xf mysql-8.0.36-linux-glibc2.12-x86_64.ta…

boss直聘 __zp_stoken__ 逆向分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间头像私信联系我删…

pyspark连接clickhouse数据库的方式(其它数据库同样适用)

目录 一、背景简记二、pyspark连接clickhouse方式记录三、结语参考学习博文 一、背景简记 实际工作中,大部分所用的数据存储地址都是在数据库中,如我司现在常用的数据库是clickhouse,相关数据的统计分析都在此上操作。如果想用pyspark连接cl…

【JSqlParser】Java使用JSqlParser解析SQL语句总结

简述 Java解析SQL语句有很多工具都可以做到,比如Mybatis、Druid、目前用来用去最全面的仍然是Jsqlparser,它是一个Github上的开源项目,JSqlParser是一个用于解析SQL语句的Java库,它可以帮助开发者分析和操作SQL语句的结构。无论是…

Ubuntu本地部署网站

目录 1.介绍 2.安装apache 3.网页升级 1.介绍 网站其实就相当于一个文件夹,用域名访问一个网页,就相当于访问了一台电脑的某一个文件夹,在网页中看见的视频,视频和音乐其实就是文件夹里面的文件。为什么网页看起来不像电脑文件夹…

C++异常处理详解

概述 这篇博客将深入探讨 C异常处理的工作原理, 最佳实践以及如何编写异常安全的代码, 配有代码示例和详细说明. 1. 异常的挑战 性能开销: 异常在失败情况下会带来显著的运行时成本. 图片来自: Introduction to proposed std::expected - Niall Douglas - Meeting C 2017 推…

零基础构建最简单的 Tauri2.0 桌面项目 Star 88.4k!!!

目录 预安装环境 安装nodejs windows下安装 linux下安装 nodejs常遇问题 安装C环境 介绍 下载 安装 安装Rust语言 Tauri官网 安装 vscode 安装 rust 插件 安装 Tauri 插件 运行成果 预安装环境 安装nodejs windows下安装 NodeJs_安装及下载_哔哩哔哩_bilibi…

Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

【AI插件】在VS Code中免费使用GitHub Copilot

什么是GitHub Copilot GitHub Copilot 是由 GitHub 和 OpenAI 合作开发的一款 AI 编程助手,旨在帮助开发者提高编程效率。它通过分析大量的开源代码,生成上下文相关的代码建议和自动补全,支持多种编程语言和框架。GitHub Copilot 是基于 Ope…

map和set c++

关联式容器也是⽤来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是⾮线性结构,两个位置有紧密的关联关系,交换⼀下,他的存储结构就被破坏了。顺序容器中的元素是按关键字来保存和访问的。关联式容器有map/…

2025年01月蓝桥杯Scratch1月stema选拔赛真题—美丽的图形

美丽的图形 编程实现美丽的图形具体要求: 1)点击绿旗,角色在舞台中心,如图所示; 2)1秒后,绘制一个边长为 140的红色大正方形,线条粗细为 3,正方形的中心为舞台中心,如图所示; 完整题目可点击下…

hive连接mysql报错:Unknown version specified for initialization: 3.1.0

分享下一些报错的可能原因吧 1.要开启hadoop 命令&#xff1a;start-all.sh 2.检查 hive-site.xml 和 hive-env.sh。 hive-site.xml中应设置自己mysql的用户名和密码 我的hive-site.xml如下&#xff1a; <configuration><property><name>javax.jdo.opt…

AI编程工具使用技巧——通义灵码

活动介绍通义灵码1. 理解通义灵码的基本概念示例代码生成 2. 使用明确的描述示例代码生成 3. 巧妙使用注释示例代码生成 4. 注意迭代与反馈原始代码反馈后生成优化代码 5. 结合生成的代码进行调试示例测试代码 其他功能定期优化生成的代码合作与分享结合其他工具 总结 活动介绍…