-
Notifications
You must be signed in to change notification settings - Fork 209
Deployment
Sliverkiss edited this page Sep 14, 2026
·
1 revision
仓库根目录提供 Dockerfile 与 docker-compose.yml。
services:
wb2api:
build: .
ports:
- "7863:7863"
volumes:
- ./auths:/app/auths
- ./data:/app/data
- ./config.json:/app/config.json:ro
environment:
- TZ=Asia/Shanghai
restart: unless-stoppeddocker compose up -d --build
docker compose logs -f要点:
-
7863:7863— 网关 HTTP 端口; - 挂载
auths/(凭证目录)与data/(state.json落盘);data/属主须与容器内 uid 匹配,见下方权限说明; -
config.json以只读挂载;修改后docker compose restart生效; -
TZ=Asia/Shanghai— 定时任务与「次日 04:00」等冷却恢复时刻按北京时间计算。
- 多阶段构建:
golang:1.23-alpine编译 →alpine:3.20运行; - 非 root 运行:
app用户,uid 10001; - 内置 6 个预编译二进制:
wb2api、signin_bin、login、credit、trial_bin、activity_bin; -
HEALTHCHECK探测wget /healthz。
池状态 state.json 由网关周期性原子写入(tmp + rename,0600 权限)。若用 bind mount 且宿主编解码 uid 与 10001 不匹配,会落盘失败。日志会给出行之有效的修复建议:
fix=chown -R 10001:10001 ./data
或改用 named volume。Dockerfile 内镜像默认 WORKDIR /app,/app/data 建议以 named volume 或 chown 10001:10001 后的 bind mount 挂载。
# 要求 Go 1.22.5+
git clone https://github.com/Sliverkiss/workbuddy2api.git
cd workbuddy2api
# 主网关
go build -o wb2api ./cmd/server
./wb2api
# 其余内置工具(可选)
go build -o signin_bin ./cmd/signin
go build -o login ./cmd/login
go build -o credit ./cmd/credit
go build -o trial_bin ./cmd/trial
go build -o activity_bin ./cmd/activity-
cp config.example.json config.json,按需修改(见 Configuration); -
./login.sh登录至少一个 CN 账号(国际版用./login.sh --realm=global,见 International); - 启动后访问
http://localhost:7863/status确认账号已加载;/healthz无鉴权可直接探活。
镜像内置的辅助二进制,均可直接使用:
| 工具 | 命令 | 说明 |
|---|---|---|
| 查询状态 | curl localhost:7863/status |
池健康、冷却、禁用、realm 分组、限额台账(见 API-Reference) |
| 即时签到对账 | ./signin_bin auths |
逐账号表格输出 uid/nick/status/remain/detail + 汇总行;token 临近过期自动预刷新 |
| 签到辅助脚本 | ./checkin.sh [-v] [auths_dir] |
先探 /status 判活,再构建并执行 signin_bin;-v 追加 fail 明细(FAIL/LOAD_ERR/AUTH_INVALID) |
| 登录 | ./login url|poll|realm |
设备授权获取凭证;见 International |
| 积分日报 | ./credit [-pretty|-json] |
realm 感知的余额查询 |
| Global trial | ./trial.sh [auths_dir] |
一次 only global 的 trial 加油包领取(OK / ALREADY 幂等 / N/A CN 不适用) |
| 活跃上报 | ./activity_bin |
单次对话活跃上报(复用 config.json 的 schedule 配置) |
容器内
signin_bin/trial_bin/activity_bin已预置(无需 go 工具链);本地则首次自动go build到/tmp/workbuddy2api-bin缓存。
login.sh 落盘的 JSON(auths/workbuddy-<uid>.json)结构:
{
"auth": {
"accessToken": "...",
"refreshToken": "...",
"expiresAt": "2026-01-01T00:00:00+08:00",
"domain": "www.workbuddy.ai",
"realm": "global"
},
"account": { "uid": "...", "enterpriseId": "...", "nickname": "..." },
"device_token": "..."
}-
realm为cn/global;凭证缺少该字段时按域判定规则回填(见 International); - 文件以 0600 权限、tmp + rename 原子写入;
- 同一 UID 重复出现时启动打警告,后加载者覆盖。
- 池状态(积分、冷却、禁用、成功率、软退避计数)→
state.json,每 5s 脏标记落盘 + 退出时Flush; - 可选
upstash配置后同时镜像到 Redis(7 天 TTL),启动时与本地文件择新恢复; - 会话粘性绑定 → 内存 TTL 滚动续期(GC 5m);配置
upstash后同样镜像 Redis; -
modelCooldowns(6004 模型级冷却)与modelCost(实测扣费账本)为运行态,重启清零(成本随上游活动变化,持久化旧值反而是脏数据)。