fix(config): 完成生产配置向 config.toml 的迁移

This commit is contained in:
2026-09-19 00:39:09 +08:00
parent 4599ea32b2
commit 045d598400
26 changed files with 908 additions and 254 deletions
@@ -380,8 +380,9 @@ JSON-RPC 2.0 服务,是面向上层服务(Go 层)的**主要跨语言边
结果;localized 或历史分发不会绕过 Rust 完整性判断。
- 受保护的 `/admin/control/release-cleanup` 只转发 Rust `release.cleanup`
先 dry-run 获取 `plan_id`,执行时由 Rust 重验证引用、路径和 current 保护。
- 支持 `.env` / 环境变量配置监听端口、public base URL、RPC socket 和 RPC
刷新周期,并预留 database/redis 键供后续 API 持久化;**不**负责资源自动拉取。
- 支持共享 `config.toml``[api]` / 进程环境变量 / CLI 配置监听端口、public
base URL、RPC socket 和 RPC 刷新周期,并预留 database/redis 键供后续 API
持久化;应用不会读取二进制旁 `.env`,也**不**负责资源自动拉取。
- 可选改写 server-info 中的 `AddressablesCatalogUrlRoot` 指向自身;不伪装
完整游戏业务 API。启动前资源 metadata 兼容属于资源 bootstrap;账号、登录、
Gateway、游戏业务 `ApiUrl` 和鉴权全链非本服务关闭条件。
+1 -1
View File
@@ -400,7 +400,7 @@ Addressables 改写后客户端拼接:
**不读** `bat-status.json` / `bat-tasks.json` 作为常规路径。
生产配置:`--socket` / `BAT_API_SOCKET``bat-api``bat` 在同服务器、同容器或同共享文件系统环境内运行。`--resource-root` 只用于本地 fixture 或应急只读诊断,不作为生产资源根配置。`BAT_API_REFRESH_INTERVAL` 控制 bat-api 周期重读 RPC,以跟随 Rust `bat` 发布新 release。`cmd/bat-api/.env.example`
生产配置:二进制旁共享 `config.toml``[api]`,或 `--socket` / `BAT_API_SOCKET` 等 CLI/进程环境覆盖项;`bat-api``bat` 在同服务器、同容器或同共享文件系统环境内运行。`--resource-root` 只用于本地 fixture 或应急只读诊断,不作为生产资源根配置。`BAT_API_REFRESH_INTERVAL` 控制 bat-api 周期重读 RPC,以跟随 Rust `bat` 发布新 release。首次启动只生成 `config.toml.example`,应用不会读取二进制旁 `.env`systemd `EnvironmentFile` 仍可作为外部进程环境注入
---
+15 -1
View File
@@ -367,6 +367,18 @@ sudo ln -sfn \
如果 Rust `bat` 和 Go `bat-api` 使用同一个 release 目录发布,也可以把二者放在同一个 `<version-or-git-sha>` 目录下,分别通过 `/opt/bluearchive-toolkit/bin/bat``/opt/bluearchive-toolkit/bin/bat-api` 暴露稳定 symlink。
### 共享配置文件
两个二进制都从各自真实可执行文件所在目录读取同一个 `config.toml`。发布新版本时,可以从仓库模板创建并设置权限:
```bash
sudo install -o bat -g bat -m 0600 \
cmd/bat-api/config.toml.example \
/opt/bluearchive-toolkit/releases/"${VERSION}"/config.toml
```
Rust `bat` 消费自身的 `[runtime]``[resource]``[localized]``[repository]``[network]``[translation.worker]`Go `bat-api` 消费 `[api]`。每个程序忽略另一个程序的 section,但各自 section 中的未知字段会使启动失败。优先级为 `CLI > 进程环境变量 > config.toml > 内置默认值`。首次启动只生成 `config.toml.example`,应用不会读取或生成二进制旁 `.env`
### bat 侧前置条件
`bat-api` 依赖 live RPC,而不是直接读取 daemon 状态文件。部署 `bat-api` 前,部署所在生产主机上应已有 socket 形态的 Rust `bat`
@@ -416,6 +428,8 @@ BAT_API_RATE_LIMIT_RPS=30
BAT_API_RATE_LIMIT_BURST=120
```
上面的 `bat-api.env` 是 systemd `EnvironmentFile`systemd 将其中的 `BAT_API_*` 作为进程环境变量注入;它不是应用读取的 dotenv 文件。需要固定的共享配置应写入二进制旁 `config.toml``[api]`secret 优先通过 systemd credential 或环境变量注入。
生产反向代理公开后,把 `BAT_API_PUBLIC_BASE_URL` 改成客户端实际访问的 HTTPS 根,例如:
```env
@@ -466,7 +480,7 @@ curl -fsS http://127.0.0.1:18080/admin/
```bash
make test-go-api
make build-go-api
BAT_API_SKIP_ENV_FILE=1 go run ./cmd/bat-api \
go run ./cmd/bat-api \
--listen 127.0.0.1:18080 \
--public-base-url http://127.0.0.1:18080 \
--resource-root internal/api/testdata/release \
+1 -1
View File
@@ -167,7 +167,7 @@ Go 边界与进度以 `docs/reports/GO_STATUS.md` 为准:
```bash
make test-go-api
make bat-api-local-live-smoke
BAT_API_SKIP_ENV_FILE=1 go run ./cmd/bat-api \
go run ./cmd/bat-api \
--listen 127.0.0.1:18080 \
--public-base-url http://127.0.0.1:18080 \
--resource-root internal/api/testdata/release \
+2 -2
View File
@@ -71,7 +71,7 @@
| ID | 约定 |
|---|---|
| K | `.env` / 环境变量 / CLI:端口、public base、RPC socket、RPC 刷新周期;**预留** database/redis |
| K | 共享 `config.toml``[api]` / 进程环境变量 / CLI:端口、public base、RPC socket、RPC 刷新周期;**预留** database/redis。应用不读取二进制旁 `.env` |
| L | 管理面 / bootstrap`/healthz``/readyz``/v1/bootstrap``/v1/release``/v1/resources``/openapi.yaml``/admin/` 控制入口 |
| M | CDN`GET/HEAD /prod-clientpatch.bluearchiveyostar.com/...`,支持 Range、ETag、Last-Modified、长期缓存头 |
| N | server-info 可选;**只改 AddressablesCatalogUrlRoot** |
@@ -96,7 +96,7 @@
|---|---|---|---|
| Module | `go.mod``bat-api` | 已用 | 服务层模块名 |
| RPC client | `internal/backendrpc` | **完成** | Unix socket JSON-RPC transport + typed helpertyped helper 覆盖 daemon 已实现控制/查询、`resource.state/sync/verify/repair/manifest/list``release.attestation/status/list/distribution/cleanup``catalog.*``parse.*``localized.status/publish/rollback``task.*``translation.tasks``translation.handoff``translation.task.update``translation.worker.run``translation.proofread``translation.memory.summary/query/confirm/conflicts/resolve_conflict``translation.glossary.summary/query/diagnose/add/update/approve/deprecate/delete` 和文件级 UnityFS patch 调用;`resource.manifest` typed params 固定 release/publication/manifest identity 和 verification generation`localized.publish` 的 typed params 支持 `translation_file``from_worker``patch_manifest` 三选一;`resource.index``patch.apply` 仍通过通用 `Call` 走同一 contractfake transport 单测和 `internal/api/testdata/contract/` mirror test 固化 Rust 输出字段 |
| 资源 bootstrap/分发 | `cmd/bat-api` + `internal/api` | **MVP+生产控制面** | RPC 发现 + 周期刷新/诊断 + `/v1/bootstrap` + `/v1/launcher/bootstrap` + `/v1/releases` + `/v1/distribution` + launcher 资源 metadata 兼容 + `/readyz` + CDN Range/缓存头 + 鉴权/限流/访问日志/反代适配 + OpenAPI + 管理控制白名单 + release/localized/TM/Glossary admin forwarding + 内嵌 dashboard + `.env` |
| 资源 bootstrap/分发 | `cmd/bat-api` + `internal/api` | **MVP+生产控制面** | RPC 发现 + 周期刷新/诊断 + `/v1/bootstrap` + `/v1/launcher/bootstrap` + `/v1/releases` + `/v1/distribution` + launcher 资源 metadata 兼容 + `/readyz` + CDN Range/缓存头 + 鉴权/限流/访问日志/反代适配 + OpenAPI + 管理控制白名单 + release/localized/TM/Glossary admin forwarding + 内嵌 dashboard + 共享 `config.toml` `[api]` 配置 |
| 试验 CLI | `cmd/bat` | **试验** | doctor 固定 okmanifest/sync 走 FFI |
| FFI | `internal/ffi` | **可选** | 需 `build-ffi` |
| 空骨架 | `api/``pkg/*`、部分 `internal/*` | **空** | 见各目录 README |