目录
1、OneApi
OneApi是一个方便管理和分发 API 密钥的工具,它支持多个常用的 LLMs 服务,用户可以轻松管理多个LLMs服务的密钥,并进行二次分发管理。
Github地址:https://github.com/songquanpeng/one-api
2、OneApi本地构建
# 从 GitHub Releases 下载可执行文件或者从源码编译: git clone https://github.com/songquanpeng/one-api.git # 构建前端cd one-api/web/default # 前端技术:react npm install npm run build # 构建后端cd .. # 后端技术:go go mod download go build -ldflags "-s -w" -o one-api # 运行 chmod u+x one-api ./one-api --port 3000 --log-dir ./logs # 访问 http://localhost:3000/ 并登录。初始账号用户名为 root,密码为 123456。
2.1、安装Go
2.1.1、Windows安装
1.下载 Go 的 MSI 安装程序,选择适用于您系统架构的版本(32 位或 64 位):https://go.dev/dl/ 2.运行 MSI 安装程序并按照提示进行安装。 3.配置环境变量。将 Go 的安装路径添加到系统的 PATH 环境变量中。通常,默认安装路径是 C:\Go。 4.打开命令提示符(Command Prompt)或 PowerShell,运行以下命令验证安装是否成功 go version
2.1.2、Mac安装
1.下载 Go 的 PKG 安装程序,选择适用于您系统架构的版本(32 位或 64 位):https://go.dev/dl/ 2.运行 PKG安装程序并按照提示进行安装。 3.配置环境变量。将以下内容添加到您的 ~/.bash_profile 或 ~/.zshrc 文件中: export PATH=$PATH:/usr/local/go/bin export GOPATH=$HOME/go export PATH=$PATH:$GOPATH/bin 4.运行以下命令使更改生效: source ~/.bash_profile 5.或者 source ~/.zshrc 6.打开命令提示符(Command Prompt)或 PowerShell,运行以下命令验证安装是否成功: go version
2.2、Go国内镜像加速
需要运行下面命令或可以把以下命令写到 .bashrc 或 .bash_profile 文件中 # 启用 Go Modules 功能 go env -w GO111MODULE=on # 配置 GOPROXY 环境变量,以下三选一 # 1. 七牛 CDN go env -w GOPROXY=https://goproxy.cn,direct # 2. 阿里云 go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct # 3. 官方 go env -w GOPROXY=https://goproxy.io,direct 查看当前环境变量配置 go env | grep GOPROXY
3、服务器部署
# 本地进入one-api项目 # 在Dockerfile文件所在的根目录构建镜像包 docker build -f Dockerfile -t one-api . #将镜像包转换成tar归档文件 docker save one-api > one-api.tar # 同时上传一个本地根目录下的docker-compose.yml(环境变量)文件到服务器项目的根目录下 # 服务器操作: # 进入到镜像包所在目录,加载导入镜像(自建目录) cd /data/project/one-api/ docker load -i one-api.tar # 因为是内网环境,需要导入mysql镜像包、reids镜像包以 # 同时也需要从外网下载token计数包,这个可以通过导出container,可查看目录(导出container和导入container) # 启动容器 docker start 【container name | container id】 # 需要从容器内部退出 按下 ctrl+p 再按 ctrl+q 退出容器,不会停止容器 # 第一次启动不一样,后续启动可以使用: docker-compose up -d # 查看部署状态 docker-compose ps
4、本地docker部署
# 使用 SQLite 的部署命令: docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api # 使用 MySQL 的部署命令,在上面的基础上添加 `-e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"`,请自行修改数据库连接参数, # 例如: docker run --name one-api -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api # 其中,-p 3000:3000 中的第一个 3000 是宿主机的端口,可以根据需要进行修改。 # 数据和日志将会保存在宿主机的 /home/ubuntu/data/one-api 目录,请确保该目录存在且具有写入权限,或者更改为合适的目录。 # 如果启动失败,请添加 --privileged=true,具体参考 #482 。 # 如果上面的镜像无法拉取,可以尝试使用 GitHub 的 Docker 镜像,将上面的 justsong/one-api 替换为 ghcr.io/songquanpeng/one-api 即可。 # 如果你的并发量较大,务必设置 SQL_DSN 基于 Docker Compose 进行部署 # 目前支持 MySQL 启动,数据存储在 ./data/mysql 文件夹内 docker-compose up -d # 查看部署状态 docker-compose ps
5、本地部署(非docker,可进行二次开发)
# 从 GitHub Releases 下载可执行文件或者从源码编译: git clone https://github.com/songquanpeng/one-api.git # 构建前端cd one-api/web/default npm install npm run build # 构建后端cd .. go mod download go build -ldflags "-s -w" -o one-api # 运行 chmod u+x one-api ./one-api --port 3000 --log-dir ./logs # 访问 http://localhost:3000/ 并登录。初始账号用户名为 root,密码为 123456。
6、导出container和导入container
# 1.查看正在运行的容器: docker ps # 记下你要导出的容器的 CONTAINER ID。 # 2.使用 docker export 导出容器: # 使用以下命令将容器导出到一个 tar 归档文件: docker export CONTAINER_ID > container_export.tar # 将 CONTAINER_ID 替换为你要导出的容器的实际 ID。 # 3.复制 tar 归档文件到另一台机器或位置: # 将 container_export.tar 文件复制到需要导入容器的地方,可以使用 SCP、FTP 或其他文件传输工具。 # 4.在另一台机器上导入容器: # 在另一台机器上,可以使用 docker import 命令导入容器: docker import container_export.tar new_image_name:tag # 将 container_export.tar 替换为你复制的 tar 归档文件的路径,new_image_name:tag 是你为导入的容器设置的新的镜像名称和标签。 docker import container_export.tar my_exported_container:latest # 在这个例子中,容器将被导入并创建一个名为 my_exported_container 的新镜像,标签为 latest。 # 5.检查导入的容器: # 使用 docker images 命令检查新导入的容器: docker images # 确保新创建的镜像在列表中。 # 请注意,docker export 不包括容器的元数据和历史记录,仅包含文件系统快照。这意味着导入的容器不会保留原始容器的一些信息。如果你需要保留这些信息,可以考虑使用 Docker 镜像和 Docker 镜像仓库进行导入和导出。
7、环境变量
REDIS_CONN_STRING:设置之后将使用 Redis 作为缓存使用。 例子:REDIS_CONN_STRING=redis://default:redispw@localhost:49153 如果数据库访问延迟很低,没有必要启用 Redis,启用后反而会出现数据滞后的问题。 SESSION_SECRET:设置之后将使用固定的会话密钥,这样系统重新启动后已登录用户的 cookie 将依旧有效。 例子:SESSION_SECRET=random_string SQL_DSN:设置之后将使用指定数据库而非 SQLite,请使用 MySQL 或 PostgreSQL。 例子: MySQL:SQL_DSN=root:123456@tcp(localhost:3306)/oneapi PostgreSQL:SQL_DSN=postgres://postgres:123456@localhost:5432/oneapi 注意需要提前建立数据库 oneapi,无需手动建表,程序将自动建表。 如果使用本地数据库:部署命令可添加 --network="host" 以使得容器内的程序可以访问到宿主机上的 MySQL。 如果使用云数据库:如果云服务器需要验证身份,需要在连接参数中添加 ?tls=skip-verify。 请根据你的数据库配置修改下列参数(或者保持默认值): SQL_MAX_IDLE_CONNS:最大空闲连接数,默认为 100。 SQL_MAX_OPEN_CONNS:最大打开连接数,默认为 1000。 如果报错 Error 1040: Too many connections,请适当减小该值。 SQL_CONN_MAX_LIFETIME:连接的最大生命周期,默认为 60,单位分钟。 FRONTEND_BASE_URL:设置之后将重定向页面请求到指定的地址,仅限从服务器设置。 例子:FRONTEND_BASE_URL=https://openai.justsong.cn MEMORY_CACHE_ENABLED:启用内存缓存,会导致用户额度的更新存在一定的延迟,可选值为 true 和 false,未设置则默认为 false。 例子:MEMORY_CACHE_ENABLED=true SYNC_FREQUENCY:在启用缓存的情况下与数据库同步配置的频率,单位为秒,默认为 600 秒。 例子:SYNC_FREQUENCY=60 NODE_TYPE:设置之后将指定节点类型,可选值为 master 和 slave,未设置则默认为 master。 例子:NODE_TYPE=slave CHANNEL_UPDATE_FREQUENCY:设置之后将定期更新渠道余额,单位为分钟,未设置则不进行更新。 例子:CHANNEL_UPDATE_FREQUENCY=1440 CHANNEL_TEST_FREQUENCY:设置之后将定期检查渠道,单位为分钟,未设置则不进行检查。 例子:CHANNEL_TEST_FREQUENCY=1440 POLLING_INTERVAL:批量更新渠道余额以及测试可用性时的请求间隔,单位为秒,默认无间隔。 例子:POLLING_INTERVAL=5 BATCH_UPDATE_ENABLED:启用数据库批量更新聚合,会导致用户额度的更新存在一定的延迟可选值为 true 和 false,未设置则默认为 false。 例子:BATCH_UPDATE_ENABLED=true 如果你遇到了数据库连接数过多的问题,可以尝试启用该选项。 BATCH_UPDATE_INTERVAL=5:批量更新聚合的时间间隔,单位为秒,默认为 5。 例子:BATCH_UPDATE_INTERVAL=5 请求频率限制: GLOBAL_API_RATE_LIMIT:全局 API 速率限制(除中继请求外),单 ip 三分钟内的最大请求数,默认为 180。 GLOBAL_WEB_RATE_LIMIT:全局 Web 速率限制,单 ip 三分钟内的最大请求数,默认为 60。 编码器缓存设置: TIKTOKEN_CACHE_DIR:默认程序启动时会联网下载一些通用的词元的编码,如:gpt-3.5-turbo,在一些网络环境不稳定,或者离线情况,可能会导致启动有问题,可以配置此目录缓存数据,可迁移到离线环境。 DATA_GYM_CACHE_DIR:目前该配置作用与 TIKTOKEN_CACHE_DIR 一致,但是优先级没有它高。 RELAY_TIMEOUT:中继超时设置,单位为秒,默认不设置超时时间。 SQLITE_BUSY_TIMEOUT:SQLite 锁等待超时设置,单位为毫秒,默认 3000。 GEMINI_SAFETY_SETTING:Gemini 的安全设置,默认 BLOCK_NONE。
8、One-api 启动命令
docker run --name one-api111 -d \ --restart always -p 3020:3000 -e TZ=Asia/Shanghai \ -v /data/project/one-api/one-api-data:/data \ IP地址/justsong/one-api:v0.6.5-2