跳到主要内容

自建部署(面向维护者)

本站基于 New API 二次开发版,含缓存断点注入与层级模型映射。

目录结构​

projects/new-api/
├── deploy/ 生产部署包
│ ├── deploy.sh 一键部署
│ ├── docker-compose.yml New API + MySQL + Redis
│ ├── nginx/ 反向代理配置
│ ├── cloudflare/ CF 接入 + 100s 超时说明
│ ├── compliance/ 合规文案
│ └── scripts/ 合规落地、映射导出、渠道迁移
├── relay/ 中转核心
├── controller/ 控制器
└── docs/ 上游文档 + OpenAPI

构建顺序铁律​

:::danger 顺序反了会"前端是新的、服务端跑的是旧的" New API 用 //go:embed web/dist 把前端编译进 Go 二进制。 必须:前端构建 → Go 编译 → 重启。 :::

用固化脚本:

bash dev/build.sh # 4 步 + 哈希一致性校验,不一致直接失败

服务托管​

:::danger 别用 exec 拉长驻进程 exec 起的子进程会随会话 cgroup 清理被 SIGTERM。setsid nohup & disown 也挡不住。 :::

正确做法:systemd-run --user --collect。

systemd-run --user --unit=newapi-backend --collect \
--working-directory=/path/to/new-api \
--setenv=PORT=3000 \
--setenv='SQL_DSN=root:pw@tcp(127.0.0.1:13306)/newapi' \
--setenv='REDIS_CONN_STRING=redis://default:@127.0.0.1:16379' \
--setenv=TZ=Asia/Shanghai --setenv=SYNC_FREQUENCY=10 \
/path/to/new-api-bin --port 3000 --log-dir /path/to/devdata/logs

生产部署​

cd deploy
docker build -t 187api/new-api:local .. # 本机构建,避免服务器 OOM
docker save 187api/new-api:local | gzip > new-api-local.tar.gz
scp new-api-local.tar.gz root@<IP>:/root/
sudo ./deploy.sh --image-tar /root/new-api-local.tar --domain 187api.com
./healthcheck.sh

规格:2C4G 起步,低于 4G 必开 Swap(deploy.sh 自动加 2G)。

运维要点​

事项命令 / 说明
看状态docker compose ps && ./healthcheck.sh
备份每天 03:17,./backup.sh,保留 14 天
恢复./restore.sh --list 后指定目录
渠道密钥由 CRYPTO_SECRET 加密,迁移必须带同一个 secret

渠道配置的坑​

  • dto.ChannelOtherSettings 存在 channels.settings 列,不是 channel_info
  • settings 提交必须是 JSON 字符串
  • UpdateChannel 拒绝带 status 的请求
  • 渠道有 60s+ 内存缓存,改完要等 SYNC_FREQUENCY

测试环境隔离​

:::warning 同一模型名挂两个渠道 → 请求随机分流 实验数据会时好时坏,排查时极易误判成代码 bug。 :::

  • 每个实验用独立模型名(如 ds-flash|autocache)
  • 实验组用独立 group,别用 default,vip(会污染 default)
  • 开工前查:SELECT model, COUNT(*), GROUP_CONCAT(channel_id) FROM abilities GROUP BY model HAVING COUNT(*)>1