Sub2API
1. Sub2API 是什么
Sub2API 是一个 AI API gateway,用于把上游账号、订阅或多模型服务统一成可管理的 API 服务。它适合放在 new-api 之前,负责上游接入、账号管理、请求转发和后台管理。
本文采用 Docker 部署:
Sub2API + PostgreSQL + Redis如果服务器访问上游服务需要代理,可以额外加 sing-box:
Sub2API -> sing-box -> VLESS Reality -> Internetsing-box 不是 Sub2API 的必需组件,只是本文 compose 里提供的可选出站代理。
官方文档:
- https://github.com/Wei-Shaw/sub2api
- https://github.com/Wei-Shaw/sub2api/blob/main/deploy/README.md
- https://github.com/SagerNet/sing-box
- https://sing-box.sagernet.org/installation/docker/
2. 推荐架构
配套模板:
完整架构:
new-api
↓ newapi-sub2api
Sub2API
├── PostgreSQL
├── Redis
└── sing-box,可选
↓
代理节点,可选dashboard 默认只监听:
127.0.0.1:38580远程访问建议走 SSH 隧道,或者通过 1Panel / Nginx 加认证反代。
核心约束:
sub2api不直接暴露公网端口- PostgreSQL / Redis 只在内部网络可见
new-api通过 Docker 内网访问http://sub2api:8080- 需要代理时,Sub2API 出站走 sing-box
- 不需要代理时,删除 sing-box 相关配置即可
3. 快速部署
创建目录:
mkdir -p /opt/1panel/docker/compose/sub2api
cd /opt/1panel/docker/compose/sub2api
mkdir -p nginx sing-box sing-box-data sub2api_data postgres_data redis_data创建 new-api 专用内网:
docker network create --driver bridge --internal newapi-sub2api如果网络已存在,报错可以忽略。
准备文件:
docker-compose.yml
.env
nginx/default.conf
sing-box/config.json 可选,只有启用 sing-box 时需要启动:
docker compose up -d
docker compose ps
docker compose logs -f sub2api本机验证:
curl -v http://127.0.0.1:38580/health4. WebUI 访问
模板通过 dashboard-proxy 把 Sub2API WebUI 绑定到宿主机本地:
127.0.0.1:38580本地电脑访问远程服务器:
ssh -p 22 -L 38580:127.0.0.1:38580 user@你的服务器IP然后浏览器打开:
http://127.0.0.1:38580账号密码来自 .env:
ADMIN_EMAIL=
ADMIN_PASSWORD=如果要用 1Panel 反代,目标写:
http://sub2api-dashboard-proxy:80WebUI 不建议无认证直接暴露公网。
5. new-api 接入
把 new-api 容器接入同一个 Docker 内网:
docker network connect newapi-sub2api new-api如果容器名不是 new-api,先查:
docker psnew-api 后台上游地址:
http://sub2api:8080测试:
docker run --rm -it \
--network newapi-sub2api \
curlimages/curl:latest \
http://sub2api:8080/health6. 出站代理,可选
如果 Sub2API 所在服务器能直连上游服务,不需要 sing-box。删除:
sing-box 服务
sub2api-proxy 网络
sub2api-egress 网络
HTTP_PROXY / HTTPS_PROXY / ALL_PROXY / UPDATE_PROXY_URL
depends_on.sing-box如果需要代理,本文模板让 Sub2API 访问:
http://sing-box:7890Sub2API 中的关键环境变量:
HTTP_PROXY=http://sing-box:7890
HTTPS_PROXY=http://sing-box:7890
ALL_PROXY=socks5h://sing-box:7890
NO_PROXY=localhost,127.0.0.1,::1,postgres,redis,sing-box,sub2api,new-api,newapi,*.local
UPDATE_PROXY_URL=http://sing-box:7890NO_PROXY 必须保留内部服务名,否则 PostgreSQL、Redis、new-api 内网访问也可能被送进代理。
sing-box 使用 mixed inbound,7890 同时支持 HTTP proxy 和 SOCKS proxy。出站节点示例使用 VLESS Reality;如果你的节点不是 VLESS Reality,按实际协议修改 outbounds。
7. 数据目录
推荐目录:
/opt/1panel/docker/compose/sub2api
├── docker-compose.yml
├── .env
├── nginx/
│ └── default.conf
├── sing-box/
│ └── config.json
├── sing-box-data/
├── sub2api_data/
├── postgres_data/
└── redis_data/重点备份:
.env
docker-compose.yml
nginx/default.conf
sub2api_data/
postgres_data/
redis_data/
sing-box/config.json 如果启用代理迁移时不要只备份 compose 文件。
8. 常用命令
docker compose up -d
docker compose down
docker compose ps
docker compose logs -f sub2api
docker compose logs -f postgres
docker compose logs -f redis
docker compose logs -f dashboard-proxy启用 sing-box 时:
docker compose logs -f sing-box
docker compose exec sing-box sing-box check -c /etc/sing-box/config.json更新:
docker compose pull
docker compose up -d备份:
cd /opt/1panel/docker/compose
tar -czf sub2api-backup-$(date +%F).tar.gz sub2api9. 验证
验证 WebUI:
curl -v http://127.0.0.1:38580/health验证 new-api 内网访问:
docker run --rm -it \
--network newapi-sub2api \
curlimages/curl:latest \
http://sub2api:8080/health验证代理出口:
docker exec -it sub2api sh
wget -O- https://ipinfo.io如果返回的是代理节点出口 IP,说明 sing-box 生效。没有启用 sing-box 时,这一步应返回服务器自身出口 IP。
10. 排错
10.1 PostgreSQL 密码错误
如果 postgres_data/ 已初始化,之后修改 .env 的 POSTGRES_PASSWORD 不会自动修改数据库内部密码。
新部署可以重置:
docker compose down
rm -rf ./postgres_data ./redis_data ./sub2api_data
docker compose up -d已有数据不要直接删目录。
10.2 Redis 认证失败
检查:
docker compose logs --tail=100 redis
docker compose logs --tail=100 sub2api确认 .env 中 REDIS_PASSWORD 和容器环境变量一致。Redis 数据目录已存在时,也建议先确认是否有旧配置残留。
10.3 dashboard 访问不了
先在服务器上测试:
curl -v http://127.0.0.1:38580
docker logs --tail=100 sub2api-dashboard-proxy服务器本机不通时,SSH 隧道一定不通。
10.4 new-api 访问不到 Sub2API
检查网络:
docker network inspect newapi-sub2api确认 new-api 和 sub2api 都在该网络中,上游地址使用:
http://sub2api:808010.5 sing-box 启动失败
检查配置:
docker compose logs --tail=100 sing-box
docker compose run --rm sing-box check -c /etc/sing-box/config.json常见原因:
- VLESS UUID 不完整
- Reality
public_key/short_id不匹配 - 复制了旧版 DNS 写法
- 复制了旧版 inbound
sniff字段
11. 参考链接
https://github.com/Wei-Shaw/sub2api
https://github.com/Wei-Shaw/sub2api/blob/main/deploy/README.md
https://github.com/SagerNet/sing-box
https://sing-box.sagernet.org/installation/docker/
https://sing-box.sagernet.org/configuration/inbound/mixed/
https://sing-box.sagernet.org/configuration/outbound/vless/