Sub2API 是开源 AI API 网关(MIT 协议),基于 Go + Vue 3 + PostgreSQL + Redis 构建,把 Claude、OpenAI、Gemini 等订阅转成标准 API,支持拼车、计费和智能调度。
本文介绍方式三:源码编译——面向开发者,需要自定义功能或参与开发时使用。
适用场景
- 需要修改源码、添加自定义功能
- 参与 Sub2API 开源贡献
- 想了解项目架构深度使用
- 企业内网部署,需要从源码审计和构建
技术栈
| 组件 | 技术 | 版本 |
|---|---|---|
| 后端 | Go + Gin + Ent | Go 1.21+ |
| 前端 | Vue 3 + Vite + TailwindCSS | Node.js 18+ |
| 数据库 | PostgreSQL | 15+ |
| 缓存 | Redis | 7+ |
前置条件安装
Go 环境
bash
# 安装 Go(推荐用官方安装包)
wget https://go.dev/dl/go1.25.7.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.25.7.linux-amd64.tar.gz
echo 'export PATH=/usr/local/go/bin:PATH' >> ~/.zshrc
source ~/.zshrc
go versionNode.js 和 pnpm
bash
# 用 nvm 安装 Node.js 18+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
source ~/.zshrc
nvm install 22
nvm use 22
# 安装 pnpm
npm install -g pnpm
pnpm --versionPostgreSQL 和 Redis
bash
# Ubuntu/Debian
sudo apt update
sudo apt install -y postgresql-15 redis-server
# 创建数据库
sudo -u postgres psql << 'EOF'
CREATE USER sub2api WITH PASSWORD 'your_password';
CREATE DATABASE sub2api OWNER sub2api;
GRANT ALL PRIVILEGES ON DATABASE sub2api TO sub2api;
EOF克隆仓库
bash
git clone https://github.com/Wei-Shaw/sub2api.git
cd sub2api构建前端
bash
cd frontend
pnpm install
pnpm run build
# 构建产物输出到 ../backend/internal/web/dist/构建后端
bash
cd ../backend
# 带 embed 标签构建(将前端嵌入二进制,生产部署用这个)
go build -tags embed -o sub2api ./cmd/server重要:
-tags embed会把前端静态文件嵌入二进制。不加这个标签,二进制不会提供前端 UI,只适合前后端分离开发。
配置文件
bash
# 复制配置模板
cp ../deploy/config.example.yaml ./config.yaml
# 编辑配置
nano config.yaml最小必要配置(config.yaml):
yaml
server:
host: "0.0.0.0"
port: 8080
mode: "release" # 生产用 release,开发用 debug
database:
host: "localhost"
port: 5432
user: "sub2api"
password: "your_password" # 你的数据库密码
dbname: "sub2api"
redis:
host: "localhost"
port: 6379
password: "" # 如无密码留空
jwt:
secret: "change-this-to-a-secure-random-string" # 必须修改!
expire_hour: 24
default:
user_concurrency: 5
user_balance: 0
api_key_prefix: "sk-"
rate_multiplier: 1.0生成安全的 JWT Secret:
bash
openssl rand -hex 32运行
bash
./sub2api访问 http://localhost:8080,进入安装向导完成初始化。
开发模式(热重载)
后端热重载(需要安装 air):
bash
go install github.com/air-verse/air@latest
cd backend
air # 保存文件自动重载或者不用 air:
bash
cd backend
go run ./cmd/server # 改代码需手动重启前端热重载:
bash
cd frontend
pnpm run dev # 前端在 http://localhost:5173 热重载开发时前端请求后端 API,需要在
frontend/vite.config.ts里配置代理到http://localhost:8080。
代码生成(修改数据模型时)
修改 backend/ent/schema 里的数据模型后,需要重新生成:
bash
cd backend
# 重新生成 Ent ORM 代码
go generate ./ent
# 重新生成 Wire 依赖注入
go generate ./cmd/serversystemd 服务(生产部署)
构建好二进制后,用 systemd 管理:
bash
sudo nano /etc/systemd/system/sub2api.serviceini
[Unit]
Description=Sub2API AI Gateway
After=network.target postgresql.service redis.service
[Service]
Type=simple
User=sub2api
WorkingDirectory=/opt/sub2api
ExecStart=/opt/sub2api/sub2api
Restart=always
RestartSec=5
Environment=GIN_MODE=release
[Install]
WantedBy=multi-user.targetbash
# 把二进制复制到目标目录
sudo mkdir -p /opt/sub2api
sudo cp backend/sub2api /opt/sub2api/
sudo cp backend/config.yaml /opt/sub2api/
sudo useradd -r -s /sbin/nologin sub2api
sudo chown -R sub2api:sub2api /opt/sub2api
# 启动
sudo systemctl daemon-reload
sudo systemctl enable --now sub2api配置接入 Claude Code
bash
export ANTHROPIC_BASE_URL="http://你的服务器IP:8080/anthropic"
export ANTHROPIC_AUTH_TOKEN="sk-你生成的APIKey"安全配置要点
CORS 配置(生产环境):
yaml
cors:
allowed_origins:
- "https://your-domain.com"允许 HTTP 上游(仅测试用):
yaml
security:
url_allowlist:
enabled: false
allow_insecure_http: true # 生产环境绝对不要开启!Nginx 反向代理(必须加 underscores_in_headers):
nginx
http {
underscores_in_headers on;
...
}和其他安装方式对比
| 源码编译 | 脚本安装 | Docker Compose | |
|---|---|---|---|
| 难度 | 高 | 低 | 中 |
| 自定义能力 | 完全自定义 | 无 | 有限 |
| 更新方式 | git pull + 重新编译 | 管理后台一键 | docker pull |
| 适合 | 开发者/需定制 | 新手 | 生产环境 |
来源:github.com/Wei-Shaw/sub2api | 整理:ClaudeEagle