Files
ds2api/DEPLOY.md
2026-02-16 18:04:12 +08:00

183 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```