记一次搭建 API 中转站的过程

2026年05月24日5 次阅读0 人喜欢
frpnginxCloudflareDockerNASNewAPI
所属合集

背景

之前家里 NAS 上跑了好几个 API 代理服务:

  • chat2api:把 ChatGPT 网页版转成 API 接口
  • gemini2api:把 Google Gemini 网页版转成 API
  • CLIProxyAPI:CLI 代理认证网关

这些服务各自独立,端口分散,管理起来挺麻烦。加上我日常用 Hermes Agent 调各种模型(智谱、DeepSeek、OpenRouter),需要一个统一的中转站来管理 API Key 和渠道转发。

于是决定把这些服务整合到一个统一的 API 中转站里。

选型

在开源社区里,API 中转站/分发站最主流的方案是:

  • One API(songquanpeng/one-api):老牌项目,功能成熟,社区大
  • New API(Calcium-Ion/new-api):One API 的增强版 Fork,在 One API 基础上增加了更多功能

对比了一下,New API 作为增强分支,功能更全(支持更多渠道类型、更完善的配额管理),而且 Docker 镜像直接拉就能跑,不需要源码编译。果断选 New API。

部署

环境准备

NAS 上已经有 Docker 环境,直接用 docker-compose 部署。

yaml 复制代码
services:
  new-api:
    image: calciumion/new-api:latest
    container_name: new-api
    restart: always
    ports:
      - "3010:3000"
    volumes:
      - ./data:/data
    environment:
      - TZ=Asia/Shanghai
    networks:
      - private

networks:
  private:
    driver: bridge

把端口映射从默认的 3000 改成其他端口(避免跟其他服务冲突),数据挂载到本地目录持久化。

启动

bash 复制代码
docker-compose up -d

Docker 镜像拉了大概几十 MB,启动后容器 healthcheck 通过,访问 http://localhost:端口 就能看到 NewAPI 的管理面板了。

CLIProxyAPI 合并部署

CLIProxyAPI(eceasy/cli-proxy-api)是给 CLI 工具做认证代理的,之前独立部署。既然 NewAPI 提供了统一的 API 管理,我把 CLIProxyAPI 也放到了同一个 docker-compose 里,共用一个 bridge 网络:

yaml 复制代码
  cli-proxy-api:
    image: eceasy/cli-proxy-api:latest
    container_name: cli-proxy-api
    restart: unless-stopped
    ports:
      - "8317:8317"
    volumes:
      - ./cli-proxy-config.yaml:/CLIProxyAPI/config.yaml
    networks:
      - private

这样 NewAPI 和 CLIProxyAPI 通过 Docker 内部网络通信,延迟更低。

清理旧服务

部署完成后,把之前独立的 chat2api 和 gemini2api 容器和相关数据清理掉了,统一由 NewAPI 管理所有渠道。

配置域名

服务跑起来后,只能通过 localhost 在本地访问。要让外网也能用,需要走 frp 穿透。

整体链路

复制代码
自定义域名
  -> CF DNS (CNAME -> VPS 域名)
  -> VPS nginx (SSL termination + reverse proxy frps)
  -> frp tunnel
  -> NAS localhost:端口 (NewAPI Docker)

很经典的 DNS + nginx + frp 三层穿透,跟之前给其他内网服务搞的一样。

1. Cloudflare DNS

给自定义域名加一条 CNAME 记录,指向 VPS 域名,关闭代理(DNS Only)。因为走的 frp HTTP 代理,不需要 CF 的 CDN。

2. VPS 宝塔 nginx

SSH 到 VPS,在 frp 专用的 nginx 配置里加上新域名,然后 reload。SSL 证书本身是通配配置,新域名自动覆盖。

3. NAS frpc 添加代理

在 frpc 配置中新增代理,绑定自定义域名到本地端口。

踩坑:frpc 热重载不生效

改完配置后尝试了发送重载信号,但 frpc 没有重新读配置。

看日志发现这个进程跑了很久没重启过,期间虽然跟 frps 断连过几次(会自动重连),但新加的代理一直没注册上去。

访问域名时看到的是 frp 的默认 404 页面:"The page you requested was not found"。请求到了 frps,但 frps 找不到匹配的代理。

最终直接 kill 掉 frpc 进程重新拉起来,新配置才生效。

另外,飞牛 OS 的 frpc 有两个配置路径,实际进程读取的跟应用面板展示的路径不一样,改错文件的话重启也不会生效。

验证

bash 复制代码
curl -I https://你的域名/
# HTTP/1.1 200 OK

能正常返回就说明链路通了。

最终架构

复制代码
VPS (宝塔)
  nginx :80/443 -> frps
                         |
                    frp tunnel
                         |
NAS (飞牛 OS)
  new-api (API 中转站 + 渠道管理)
  cli-proxy-api (CLI 认证代理)
  旧服务已清理: chat2api, gemini2api

一次整合,把之前散落的 API 代理服务统一到了 NewAPI,管理起来清爽多了。

加载评论中...