图龙网络科技

问答社区

原创作者: 图龙网络科技 发布时间: 2023-09-23 229.8K 人阅读

One API Wiki一键使用 Docker Compose 进行部署

图龙网络科技 发布于 7个月前 分类:SDAPI

部署:

仓库源码下载:https://github.com/MartialBE/one-api/archive/refs/heads/main.zip

SSH终端镜像拉起:git@github.com:MartialBE/one-api.git

Docker 部署

以下是使用 Docker 进行部署的命令:

使用 SQLite

docker run -d -p 3000:3000 \
  --name one-api \
  --restart always \
  -e TZ=Asia/Shanghai \
  -v /home/ubuntu/data/one-api:/data \
  ghcr.io/martialbe/one-api

使用 MySQL

在 SQLite 的基础上,添加 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"。请根据实际情况修改数据库连接参数。

docker run -d -p 3000:3000 \
  --name one-api \
  --restart always \
  -e TZ=Asia/Shanghai \
  -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" \
  -v /home/ubuntu/data/one-api:/data \
  ghcr.io/martialbe/one-api

使用 PostgreSQL

docker run -d -p 3000:3000 \
  --name one-api \
  --restart always \
  -e TZ=Asia/Shanghai \
  -e SQL_DSN="postgres://postgres:123456@localhost:5432/oneapi" \
  -v /home/ubuntu/data/one-api:/data \
  ghcr.io/martialbe/one-api

注意:

  • -p 3000:3000 中的第一个 3000 是宿主机的端口,可以根据需要进行修改。
  • 数据和日志将会保存在宿主机的 /home/ubuntu/data/one-api 目录,请确保该目录存在且具有写入权限,或者更改为合适的目录。
  • 如果启动失败,请添加 --privileged=true,具体参考 issue #482
  • 如果你的并发量较大,务必设置 SQL_DSN

部署完毕后,访问 http://localhost:3000 即可。

使用 Docker Compose 进行部署

注意:虽然启动方式有所不同,但参数设置保持不变。具体的参数设置请参考基于 Docker 部署部分。

以下是使用 Docker Compose 进行部署的步骤:

  1. 请在你本机创建一个目录用于存放数据,例如/home/ubuntu/data/one-api, 注意:以下操作都是基于你处于/home/ubuntu/data/one-api目录下进行的。如果你的目录不是/home/ubuntu/data/one-api,请自行进入到你的目录。
  2. 在你的本地目录下创建 ./data/mysql 文件 和 ./data/one-api 文件, 也在你本地目录下执行以下命令:
mkdir -p ./data/mysql
mkdir -p ./data/one-api
  1. 下载 docker-compose.yml 文件到你的本地目录 (上面的列子是:/home/ubuntu/data/one-api)。
  2. 修改 docker-compose.yml 文件,将你需要的环境变量填入。 如果你想使用配置文件,可以下载配置文件,并重命名为config.yaml 放入 ./data/one-api 目录中。
  3. 启动服务
docker-compose up -d
  1. 启动服务后,你可以通过运行以下命令来查看部署状态:
docker-compose ps

请确保所有的服务都已经成功启动,并且状态为 'Up'。

手动部署

以下是手动部署的步骤:

  1. 获取源码:从 GitHub Releases 下载最新的可执行文件,或者直接从源码编译。如果你选择编译源码,可以使用以下命令:
    git clone https://github.com/MartialBE/one-api.git
  2. 构建:进入代码目录,构建:
    cd one-api
    make
  3. 运行应用:为构建的应用添加执行权限,并运行:
    chmod u+x one-api
    ./one-api --port 3000 --log-dir ./logs
  4. 访问应用:在浏览器中访问 http://localhost:3000/ 并登录。初始账号用户名为 root,密码为 123456
  5. 重新编译:如果需要重新编译,可以使用以下命令:
    make clean
    make

请确保在执行以上步骤时,你的环境已经安装了必要的工具,如 Git、Node.js、yarn 和 Go。

多机部署

  1. 所有服务器 SESSION_SECRET 设置一样的值。
  2. 必须设置 SQL_DSN,使用 MySQL 数据库而非 SQLite,所有服务器连接同一个数据库。
  3. 所有从服务器必须设置 NODE_TYPE 为 slave,不设置则默认为主服务器。
  4. 设置 SYNC_FREQUENCY 后服务器将定期从数据库同步配置,在使用远程数据库的情况下,推荐设置该项并启用 Redis,无论主从。
  5. 从服务器可以选择设置 FRONTEND_BASE_URL,以重定向页面请求到主服务器。
  6. 从服务器上分别装好 Redis,设置好 REDIS_CONN_STRING,这样可以做到在缓存未过期的情况下数据库零访问,可以减少延迟。
  7. 如果主服务器访问数据库延迟也比较高,则也需要启用 Redis,并设置 SYNC_FREQUENCY,以定期从数据库同步配置。

环境变量的具体使用方法详见环境变量。

环境变量

  1. REDIS_CONN_STRING:设置之后将使用 Redis 作为缓存使用。
    • 例子:REDIS_CONN_STRING=redis://default:redispw@localhost:49153
    • 如果数据库访问延迟很低,没有必要启用 Redis,启用后反而会出现数据滞后的问题。
  2. SESSION_SECRET:设置之后将使用固定的会话密钥,这样系统重新启动后已登录用户的 cookie 将依旧有效。
    • 例子:SESSION_SECRET=random_string
  3. 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,单位分钟。
  4. FRONTEND_BASE_URL:设置之后将重定向页面请求到指定的地址,仅限从服务器设置。
    • 例子:FRONTEND_BASE_URL=https://openai.justsong.cn
  5. MEMORY_CACHE_ENABLED:启用内存缓存,会导致用户额度的更新存在一定的延迟,可选值为 true 和 false,未设置则默认为 false
    • 例子:MEMORY_CACHE_ENABLED=true
  6. SYNC_FREQUENCY:在启用缓存的情况下与数据库同步配置的频率,单位为秒,默认为 600 秒。
    • 例子:SYNC_FREQUENCY=60
  7. NODE_TYPE:设置之后将指定节点类型,可选值为 master 和 slave,未设置则默认为 master
    • 例子:NODE_TYPE=slave
  8. CHANNEL_UPDATE_FREQUENCY:设置之后将定期更新渠道余额,单位为分钟,未设置则不进行更新。
    • 例子:CHANNEL_UPDATE_FREQUENCY=1440
  9. CHANNEL_TEST_FREQUENCY:设置之后将定期检查渠道,单位为分钟,未设置则不进行检查。
    • 例子:CHANNEL_TEST_FREQUENCY=1440
  10. POLLING_INTERVAL:批量更新渠道余额以及测试可用性时的请求间隔,单位为秒,默认无间隔。
    • 例子:POLLING_INTERVAL=5
  11. BATCH_UPDATE_ENABLED:启用数据库批量更新聚合,会导致用户额度的更新存在一定的延迟可选值为 true 和 false,未设置则默认为 false
    • 例子:BATCH_UPDATE_ENABLED=true
    • 如果你遇到了数据库连接数过多的问题,可以尝试启用该选项。
  12. BATCH_UPDATE_INTERVAL=5:批量更新聚合的时间间隔,单位为秒,默认为 5
    • 例子:BATCH_UPDATE_INTERVAL=5
  13. 请求频率限制:
    • GLOBAL_API_RATE_LIMIT:全局 API 速率限制(除中继请求外),单 ip 三分钟内的最大请求数,默认为 180
    • GLOBAL_WEB_RATE_LIMIT:全局 Web 速率限制,单 ip 三分钟内的最大请求数,默认为 60
  14. 编码器缓存设置:
    • TIKTOKEN_CACHE_DIR:默认程序启动时会联网下载一些通用的词元的编码,如:gpt-3.5-turbo,在一些网络环境不稳定,或者离线情况,可能会导致启动有问题,可以配置此目录缓存数据,可迁移到离线环境。
    • DATA_GYM_CACHE_DIR:目前该配置作用与 TIKTOKEN_CACHE_DIR 一致,但是优先级没有它高。
  15. RELAY_TIMEOUT:中继超时设置,单位为秒,默认不设置超时时间。
  16. SQLITE_BUSY_TIMEOUT:SQLite 锁等待超时设置,单位为毫秒,默认 3000
  17. TG_BOT_API_KEY: 你的 Telegram bot 的 API 密钥。你可以在 BotFather 获取这个密钥。
  18. TG_WEBHOOK_SECRET:(可选)你的 webhook 密钥。你可以自定义这个密钥。如果设置了这个密钥,将使用webhook的方式接收消息,否则使用轮询(Polling)的方式。
  19. AUTO_PRICE_UPDATES:自动更新价格,可选值为 true 和 false,未设置则默认为 true。开启后每次启动程序时,会检测数据库中的数据和程序中默认模型价格,如果数据库中的模型价格有缺失将会自动同步到数据库中。 开启带来的问题:你删不掉程序默认的模型价格,删除后,重启又回来了,这个选项适合跟官网一致价格的用户使用。

1个回复

  • 图龙网络科技

    部署好(oneapi)转发,从此不再需要购买openapi的key秘钥了

提供中小企业建站高端正版精品系统

正品模板 购买协议