mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-02 07:25:26 +08:00
183 lines
3.9 KiB
Markdown
183 lines
3.9 KiB
Markdown
# DS2API 部署指南(Go)
|
||
|
||
语言 / Language: [中文](DEPLOY.md) | [English](DEPLOY.en.md)
|
||
|
||
本指南基于当前 Go 代码库。
|
||
|
||
## 部署方式
|
||
|
||
- 本地运行:`go run ./cmd/ds2api`
|
||
- Docker:`docker-compose up -d`
|
||
- Vercel:`api/index.go` serverless 入口
|
||
- Linux 服务化:systemd
|
||
|
||
## 0. 前置要求
|
||
|
||
- Go 1.24+
|
||
- Node.js 20+(仅在需要本地构建 WebUI 时)
|
||
- `config.json` 或 `DS2API_CONFIG_JSON`
|
||
|
||
## 1. 本地运行
|
||
|
||
```bash
|
||
git clone https://github.com/CJackHwang/ds2api.git
|
||
cd ds2api
|
||
|
||
cp config.example.json config.json
|
||
# 编辑 config.json
|
||
|
||
go run ./cmd/ds2api
|
||
```
|
||
|
||
默认监听 `5001`,可通过 `PORT` 覆盖。
|
||
|
||
构建 WebUI(可选,仅当 `/admin` 缺少静态文件时):
|
||
|
||
```bash
|
||
./scripts/build-webui.sh
|
||
```
|
||
|
||
## 2. Docker 部署
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
# 编辑 .env
|
||
|
||
docker-compose up -d
|
||
docker-compose logs -f
|
||
```
|
||
|
||
更新镜像:
|
||
|
||
```bash
|
||
docker-compose up -d --build
|
||
```
|
||
|
||
说明:
|
||
|
||
- `Dockerfile` 使用多阶段构建(WebUI + Go 二进制)
|
||
- 容器内默认启动命令:`/usr/local/bin/ds2api`
|
||
|
||
## 3. Vercel 部署
|
||
|
||
- serverless 入口:`api/index.go`
|
||
- 路由与缓存头:`vercel.json`
|
||
- 已移除 legacy `builds` 字段,避免 `unused-build-settings` 警告
|
||
|
||
至少配置环境变量:
|
||
|
||
- `DS2API_ADMIN_KEY`
|
||
- `DS2API_CONFIG_JSON`(JSON 或 Base64)
|
||
|
||
可选:
|
||
|
||
- `VERCEL_TOKEN`
|
||
- `VERCEL_PROJECT_ID`
|
||
- `VERCEL_TEAM_ID`
|
||
- `DS2API_ACCOUNT_MAX_INFLIGHT`(每账号并发上限,默认 `2`)
|
||
- `DS2API_ACCOUNT_CONCURRENCY`(同上别名)
|
||
|
||
并发建议值会动态按 `账号数量 × 每账号并发上限` 计算(默认即 `账号数量 × 2`)。
|
||
|
||
部署后建议先访问:
|
||
|
||
- `/healthz`
|
||
- `/v1/models`
|
||
- `/admin`
|
||
|
||
## 3.1 GitHub Release 自动构建
|
||
|
||
仓库包含 `.github/workflows/release-artifacts.yml`:
|
||
|
||
- 仅在 Release `published` 时触发
|
||
- 不在 `push` 时触发
|
||
- 自动构建 Linux/macOS/Windows 二进制包并上传到 Release Assets
|
||
- 生成 `sha256sums.txt` 供校验
|
||
|
||
## 3.2 Vercel 常见报错排查
|
||
|
||
若看到类似报错:
|
||
|
||
```text
|
||
Error: Command failed: go build -ldflags -s -w -o .../bootstrap .../main__vc__go__.go
|
||
```
|
||
|
||
通常是 Vercel 项目里的 Go 构建参数配置不正确(`-ldflags` 没有作为一个整体字符串传递)。
|
||
|
||
处理方式:
|
||
|
||
1. 进入 Vercel Project Settings -> Build and Development Settings
|
||
2. 清空自定义 Go Build Flags / Build Command(推荐)
|
||
3. 若必须设置 ldflags,使用 `-ldflags=\"-s -w\"`(保证它是一个参数)
|
||
4. 确认仓库 `go.mod` 为受支持版本(当前为 `go 1.24`)
|
||
5. 重新部署(建议 `Redeploy` 并清缓存)
|
||
|
||
另一个常见根因(Go 单仓 + `internal/`):
|
||
|
||
```text
|
||
... use of internal package ds2api/internal/server not allowed
|
||
```
|
||
|
||
这通常发生在 Vercel Go 入口文件直接 `import internal/...`。
|
||
当前仓库已通过公开桥接包 `app` 解决:`api/index.go` -> `ds2api/app` -> `internal/server`。
|
||
|
||
## 4. 反向代理(Nginx)
|
||
|
||
如果在 Nginx 后挂载,建议关闭缓冲以保证 SSE:
|
||
|
||
```nginx
|
||
location / {
|
||
proxy_pass http://127.0.0.1:5001;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Connection "";
|
||
proxy_buffering off;
|
||
proxy_cache off;
|
||
chunked_transfer_encoding on;
|
||
tcp_nodelay on;
|
||
}
|
||
```
|
||
|
||
## 5. systemd 示例(Linux)
|
||
|
||
```ini
|
||
[Unit]
|
||
Description=DS2API (Go)
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
WorkingDirectory=/opt/ds2api
|
||
Environment=PORT=5001
|
||
Environment=DS2API_CONFIG_PATH=/opt/ds2api/config.json
|
||
Environment=DS2API_ADMIN_KEY=admin
|
||
ExecStart=/opt/ds2api/ds2api
|
||
Restart=always
|
||
RestartSec=5
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
常用命令:
|
||
|
||
```bash
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable ds2api
|
||
sudo systemctl start ds2api
|
||
sudo systemctl status ds2api
|
||
```
|
||
|
||
## 6. 部署后检查
|
||
|
||
```bash
|
||
curl -s http://127.0.0.1:5001/healthz
|
||
curl -s http://127.0.0.1:5001/readyz
|
||
curl -s http://127.0.0.1:5001/v1/models
|
||
```
|
||
|
||
如果你依赖管理台接口,再检查:
|
||
|
||
```bash
|
||
curl -s http://127.0.0.1:5001/admin
|
||
```
|