好文集ChatGPT Plus¥119

有 VPS 的别闲着,自己搭个 AI 中转站玩玩

文章目录

本教程需要的技术(版本仅作为参考):

  • VPS(云服务器):2c2g(2个CPU核数2G的内存),地区选择硅谷

  • Linux:CentOS Linux release 7.6.1810 (Core)

  • Docker:26.1.4

  • Docker Compose:2.27.1

  • CLI Proxy API(CPA):latest(v6.10.9)

  • New API:latest(v1.0.0-rc.4)

  • Nginx:latest(1.29.8)

CPA在本教程中只作为New API的一个渠道,用于管理认证文件;token监控和代理节点都交给New API,所以CPA用最新版本即可。

本教程需要的工具:

VPS选择

我买了腾讯云的服务器用来做教学,全程可用国内网访问 有VPS的佬可以跳过这一步了

活动页:腾讯云最新活动

这是新人优惠,2c2g一年99米 这是两个图片拼接起来的,颜色不同的大框表示不同的图片,这两个图片的截取在同一个页面,下滑即可

文章配图

购买完毕后进入控制台

这也是两张图片拼接起来的,颜色不同的大框表示不同的图片,上面黄框是腾讯云主页的头部标签,下面红框是点击控制台后进入控制台的页面

文章配图

查看服务器IP

也是由黄框和红框分别不同的图片 由于腾讯云默认安全组打开了22端口(SSH服务),这里就不进安全组了,后文有讲到如何配置安全组,这里不过多赘述

文章配图

使用FinalShell连接到服务器

填写名称、主机IP、用户名和密码即可连接到我们的服务器 FinalShell的好处就是修改文件或者上传下载文件时是可视化的,不用一遍一遍敲命令行

文章配图

一、准备工作

1、创建一个文件夹用于存文件,并进入该文件夹

proxy:用于存放docker-compose.yml文件(启动文件夹) cpa:用于存放CPA的配置文件(config.yaml)和其他的挂载卷信息(日志、OAuth认证文件) newapi:用于存放New API的挂载卷信息(日志、配置文件)

mkdir -p /opt/proxy/{cpa/{logs,auths},newapi/{data,logs}} && cd /opt/proxy && touch docker-compose.yml cpa/config.yaml

执行上述命令后,我们就可以看到下面图片所示内容 newapi里面就不展示了,里面的文件是空的 需要修改proxy文件夹中的docker-compose.yml和cpa目录下的config.yaml文件 目录结构如下

/opt/proxy/
├── docker-compose.yml
├── cpa/
│   ├── logs/
│   ├── auths/
│   └── config.yaml
└── newapi/
    ├── data/
    └── logs/

文章配图

2、cpa目录下的config.yaml文件

包含⚠️的参数是需要修改的,包含❓的是可修改的,其他的可以照抄

# 留空则完全禁用管理API(所有 /v0/management 路由返回404)。
secret-key: "$2a$10$5dHykttqHWAU.WcYFg0qgOXhDoxC1P7wpZ7i2T8Kj9xqwvVRfTUm2"    # ⚠️ 请修改密码
# true时禁用内置管理面板资源与路由。默认false
disable-control-panel: false
# 认证目录(支持 ~ 展开为主目录)
auth-dir: "~/.cli-proxy-api"
# apikeys自己设置
api-keys:
  - sk-8SGCShq021BAFgpBE  # ⚠️ 请修改密钥
# 调试日志。默认false
debug: true
# 写入滚动日志文件而非stdout。默认false
logging-to-file: true
# 日志目录大小上限,0表示不限制。
logs-max-total-size-mb: 100
# 403/408/500/502/503/504时的重试次数。
request-retry: 3
# 冷却凭据等待秒数上限,超出即触发重试。
max-retry-interval: 30
routing:
  # 多匹配凭据的选择策略:round-robin 或 fill-first。默认round-robin
  strategy: "round-robin"
# 是否为 /v1/ws 启用认证。默认false
ws-auth: false
# 为false时禁用内存用量统计聚合,默认false
# 1.10版本后失效,我这里用的最新版本,并且后续通过New API统计,这里false即可
# ❓ 如果选择CPA对外的话,并且参照我之前的文章,需要监控token消耗,这里可以改为true
usage-statistics-enabled: false

3、proxy目录下的docker-compose.yml文件

包含⚠️的参数是需要修改的,包含❓的是可修改的,其他的可以照抄

# New API docker-compose 配置参考:
# https://docs.newapi.ai/zh/docs/installation/config-maintenance/docker-compose-yml
# 启动的全部服务
services:
  # 服务名
  new-api:
    # 镜像名
    image: calciumion/new-api:latest
    # 容器名
    container_name: new-api
    # 退出时总是自动重启,确保服务意外挂掉后能恢复。
    restart: always
    # 启动容器后,会执行这个自定义命令,它将应用的日志目录设置为 /app/logs
    command: --log-dir /app/logs
    # 端口映射
    ports:
      - '3000:3000'  # ❓注意后面的3000不能修改,不然后面的healthcheck心跳检测,检测不到
    # 卷挂载
    volumes:
      - ./newapi/data:/data
      - ./newapi/logs:/app/logs
    # 环境变量
    environment:
      - SQL_DSN=postgresql://root:123456@postgres:5432/new-api # ⚠️ 请修改密码
      #      - SQL_DSN=root:123456@tcp(mysql:3306)/new-api  # 如果用mysql的话,取消这条注释,并注释上面那条
      - REDIS_CONN_STRING=redis://redis
      # 设置容器时区为上海
      - TZ=Asia/Shanghai
      # 是否启用错误日志记录
      - ERROR_LOG_ENABLED=true
      # 是否启用批量更新 batch update enabled
      - BATCH_UPDATE_ENABLED=true
      #      - STREAMING_TIMEOUT=300  # 流模式无响应超时时间,单位秒,默认120秒,如果出现空补全可以尝试改为更大值
      #      - SESSION_SECRET=random_string  # 多机部署时设置,必须修改这个随机字符串!!
      #      - SYNC_FREQUENCY=60  # 如果需要定期数据库同步,请取消注释
    # 定义启动顺序,它会等待cpa、redis、postgres容器启动后,再启动
    depends_on:
      - redis
      - postgres
      #      - mysql  # 如果用mysql的话,取消这条注释,并注释上面那条
      - cpa
    # 心跳检查,在容器内检查,间隔30s,超时时间10s,重复机制3次
    healthcheck:
      # test的内容是向本机(容器内)发送一个请求,如果在响应中找不到success关键字就报错
      test:
        [
          'CMD-SHELL',
          "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1",
        ]
      interval: 30s
      timeout: 10s
      retries: 3

  # 下面的同上,不同的参数我再做解释
  redis:
    image: redis:latest
    container_name: redis
    restart: always

  postgres:
    image: postgres:15
    container_name: postgres
    restart: always
    environment:
      # 数据库用户名
      POSTGRES_USER: root # ❓ 设置用户名,改为你自己的
      # 数据库密码
      POSTGRES_PASSWORD: 123456 # ⚠️ 设置密码,改为你自己的
      # 数据库名
      POSTGRES_DB: new-api
    volumes:
      - pg_data:/var/lib/postgresql/data
    #    ports:
    #      - "5432:5432"  # 如果这个服务要对外,需要解开这个注释

  #  mysql:
  #    image: mysql:8.2
  #    container_name: mysql
  #    restart: always
  #    environment:
  #      MYSQL_ROOT_PASSWORD: 123456  # ⚠️ 设置密码,改为你自己的
  #      MYSQL_DATABASE: new-api
  #    volumes:
  #      - mysql_data:/var/lib/mysql
  #    ports:
  #      - "3306:3306"  # 如果这个服务要对外,需要解开这个注释

  # cpa服务
  cpa:
    image: eceasy/cli-proxy-api:latest
    container_name: cpa
    #   ports:
    #     - "9999:8317" # ❓因为这次是通过New API对外提供服务,CPA只是作为认证文件管理工具
    volumes:
      - ./cpa/config.yaml:/CLIProxyAPI/config.yaml # 配置文件输出
      - ./cpa/auths:/root/.cli-proxy-api # 认证文件,config.yaml中的~代表主目录,在Linux中就是/root
      - ./cpa/logs:/CLIProxyAPI/logs # 日志文件输出
    restart: always

# 顶级挂载,避免文件权限问题,挂载地址:/var/lib/docker/volumes/pg_data
volumes:
  pg_data:
#  mysql_data:

4、把认证文件放进 /opt/proxy/cpa/auths 目录下

文章配图

5、去Linux的防火墙打开3000端口

先查看下防火墙状态:

# 看防火墙是否在运行
systemctl status firewalld
# 启动防火墙(不会断SSH,放心)
systemctl start firewalld
# 设置开机自启
systemctl enable firewalld
# 看看当前默认放行了哪些服务
firewall-cmd --list-services
# 看开放了哪些端口
firewall-cmd --list-ports

如果防火墙没有开启,则不用执行下面的步骤;或者你要安全,可以打开防火墙后再执行下面命令。 打开后,后续如果要对外开放端口,都需要重新配置一遍。 比如你只想用CPA对外,就需要把--add-port改成你自己的参数。

firewall-cmd --zone=public --add-port=3000/tcp --permanent && firewall-cmd --reload && firewall-cmd --list-ports

比如下面我的操作就说明可以了(供参考):

[root@VM-0-16-centos proxy]# firewall-cmd --zone=public --add-port=3000/tcp --permanent && firewall-cmd --reload && firewall-cmd --list-ports
success
success
3000/tcp
[root@VM-0-16-centos proxy]# firewall-cmd --list-ports
3000/tcp

6、打开云服务器的安全组

我用的是腾讯云的VPS,这里用腾讯云举例,其他的也是大同小异

(1)先去控制台,选择我们的服务器

文章配图

(2)选择防火墙并添加规则,下面三个是官方配置的,不要动,特别是SSH登录(22端口)

文章配图

(3)添加规则:配置来源和端口号

文章配图

(4)确认好后就多了一条

文章配图

二、执行Docker Compose文件

在 /opt/proxy 目录下(你的 docker-compose.yml 文件所在目录) 执行命令docker compose up -d即可

[root@VM-0-16-centos proxy]# docker compose up -d
WARN[0000] /opt/proxy/docker-compose.yml: `version` is obsolete 
[+] Running 27/10
 ✔ redis Pulled                                                                    8.2s 
 ✔ postgres Pulled                                                                26.0s 
 ✔ new-api Pulled                                                                 27.3s 
[+] Running 6/6
 ✔ Network proxy_default   Created                                                 0.1s 
 ✔ Volume "proxy_pg_data"  Created                                                 0.0s 
 ✔ Container cpa           Started                                                 0.8s 
 ✔ Container postgres      Started                                                 0.7s 
 ✔ Container redis         Started                                                 0.8s 
 ✔ Container new-api       Started

PS:关闭Docker Compose后重启报错

关闭Docker Compose命令

docker compose down

我重启时遇见了下面的问题 这里只需要重启docker再启动Docker Compose即可 重启docker:systemctl restart docker 启动Docker Compose:docker compose up -d

[root@VM-0-16-centos proxy]# docker compose up -d
WARN[0000] /opt/proxy/docker-compose.yml: `version` is obsolete
[+] Running 1/0
 ✘ Network proxy_default Error 0.0s
failed to create network proxy_default: Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-b977b99684c8 -j RETURN: iptables: No chain/target/match by that name. (exit status 1))

三、我们通过 http://ip:3000 就可以访问我们中转站了

文章配图

四、New API配置

1、登录

我们通过管理员登录,就可以看见只有管理员才能看见的菜单了 而这些菜单就是最关键的配置 我这里只讲一下几个关键菜单配置 这些菜单也只是挑重点讲一下,最后能使用即可,如果自用或者公益站这些足以,如果商用就得自己下功夫去看官网文档,或者把源码下载下来二次开发了 如果感兴趣可以去官网查看文档,写的很详细:渠道管理 | New API

2、渠道管理

文章配图

添加渠道

这里填写我们CPA配置的apikey和Docker Compose配置的服务名(因为在同一个Docker Compose文件中,它们共享同一个Docker网络)名称:随意 密钥:CPA中config.yaml配置的密钥 API地址(放个可以复制粘贴的:http://cpa:8317):就是CPA的地址 模型:密钥和API地址填好后点击获取即可

文章配图

点击测试后发现报错,我们就根据报错提示去配置价格。

文章配图

3、系统管理

设置模型价格

文章配图

我们再去点击测试,发现就可以通过了。

文章配图

在模型广场里面也可以看见我们配置的模型了

文章配图

其他

系统设置里面有很多功能,比如修改可见菜单。

文章配图

设置签到功能。

文章配图

设置公告、API信息、支付等等。

文章配图

4、配置令牌

文章配图

5、本地连接测试(CC Switch)

配置一下刚才我们复制的密钥

文章配图

测试一下,没有问题。

文章配图

在数据看板中也可以看见使用情况。

五、域名配置

这里可以简单的配置一下DNS做映射,但不安全,所以我们这里添加一个项目Nginx,用于添加SSL证书 这里我使用的是Cloudflare做的代理,所以我按Cloudflare讲解,其他的云服务商配置也是大同小异 如果不想配置Nginx和SSL,只想单纯的通过域名解析到IP,直接看第三步:配置DNS解析服务 我买的顶级域名为(严格来说这是二级域名,我习惯说这是顶级域名):wudike.online 需要创建一个二级域名来映射我的网站:api.wudike.online

1、使用Cloudflare的DNS代理我们的域名

这里我的域名是之前在阿里云买的,所以我用阿里云作为演示,各个云服务商的操作都是大同小异的

(1)进入域名与网站

(2)选择域名进行购买

查询之后下滑点击购买就可以了 域名这里买了之后要实名认证,审核要几个工作日吧,有点忘记了

文章配图

由于文章添加图片上限了,不往下写了,完整的放在夸克上了

🔗:https://pan.quark.cn/s/2a77f9323697

文章配图

全文完
查看原文