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

3.9 KiB
Raw Blame History

DS2API 部署指南Go

语言 / Language: 中文 | English

本指南基于当前 Go 代码库。

部署方式

  • 本地运行:go run ./cmd/ds2api
  • Dockerdocker-compose up -d
  • Vercelapi/index.go serverless 入口
  • Linux 服务化systemd

0. 前置要求

  • Go 1.24+
  • Node.js 20+(仅在需要本地构建 WebUI 时)
  • config.jsonDS2API_CONFIG_JSON

1. 本地运行

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 缺少静态文件时):

./scripts/build-webui.sh

2. Docker 部署

cp .env.example .env
# 编辑 .env

docker-compose up -d
docker-compose logs -f

更新镜像:

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_JSONJSON 或 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 常见报错排查

若看到类似报错:

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/

... 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

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

[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

常用命令:

sudo systemctl daemon-reload
sudo systemctl enable ds2api
sudo systemctl start ds2api
sudo systemctl status ds2api

6. 部署后检查

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

如果你依赖管理台接口,再检查:

curl -s http://127.0.0.1:5001/admin