sub2api部署

简介

Sub2API 是一款开源、自托管的中转网关程序

核心使命:网页订阅账号(ChatGPT‑Plus、Claude Max/Team 订阅这类没有官方 API‑Key、只能浏览器网页登录) → 转换成标准 OpenAI 兼容接口 /v1/chat/completions,然后你可以自己生成 sk‑xxx 的密钥,供给 Hermes‑Agent、Cursor、各类 AI 客户端调用

工作原理:

  • 你在后台添加账号:浏览器登录 ChatGPT/Claude 网页,完成 OAuth 授权,网关拿到 access_token + refresh_token
  • 网关自动用 refresh_token 刷新会话(自动续期令牌),不需要你浏览器一直开着网页
  • Hermes‑Agent 向你的网关地址(http://ip:port/v1)+ 你生成的自定义 ApiKey 发起请求
  • Sub2API 把标准 OpenAI 格式请求,逆向转换成网页端的 HTTP 请求发给 OpenAI 服务器
  • 将网页返回的数据,重新包装成标准 OpenAI JSON,返回下游程序

部署

1、直接使用docker-compose搞定,如下:

services:
  sub2api:
    image: weishaw/sub2api:latest
    ports:
      - "8080:8080"
    environment:
      - DATABASE_URL=postgres://postgres:Postgres1234@db:5432/sub2api?sslmode=disable
      - REDIS_URL=redis://redis:6379
    depends_on:
      - db
      - redis

  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=Postgres1234
      - POSTGRES_DB=sub2api
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

注意:只能使用8080端口,使用其他端口会导致启动报错,国内可能无法直接拉取镜像回来,可选择其他方法拉回来然后修改docker-compose.yml中指定镜像名字

2、启动后打开IP:8080,进入安装页面,连接postgresql,如图:

注意:主机位置就填写容器的CONTAINER ID,就是docker 启动后容器名对应的那个ID

然后连接redis,如图:

最后下一步填写管理员信息,最后提交后服务会重启,如果应用起不来就自己手动重启下

3、打开登录界面,输入刚才设置的管理员账号和密码最后登录

登录后页面长这个样子,如图:

示例

sub2api配置接入GROK

1、先注册GORK账号,实现可以正常网页登录

2、网络登录后在F12控制台的请求头的cookies里找到sso信息,从ey开始到第一个分号结束,如图:

在subapi账号管理页面,添加账号,选择GROK,下一步后把SSO的值粘贴进去,如图:

3、最后测试下,已经成功了,然后正常在sub2api申请apikey就行了,如图:

附加.

1、配置Nginx通过http代理到sub2api,如下:

server {
    listen 80;
    server_name sub2api.abrdns.com;  # ← 换成你的域名

    # 客户端请求体大小限制(上传文件/长对话用)
    client_max_body_size 50m;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket 支持(Sub2API 的 SSE 流式响应需要)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 超时设置(AI 回复可能很慢)
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
        proxy_connect_timeout 10s;
    }
}

2、配置https代理到sub2api,如下:

server {
    listen 80;
    server_name sub2api.abrdns.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name sub2api.abrdns.com;

    ssl_certificate /etc/letsencrypt/live/sub2api.abrdns.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sub2api.abrdns.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    client_max_body_size 50m;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket / SSE
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
        proxy_connect_timeout 10s;
    }
}