Files
Jyotisha/debug-staging-admin-api-500.md
T
linmeng 2f4d00c528
Deploy staging to test server / deploy (push) Successful in 6m34s
fix: complete self-hosted staging identity integration
Align staging deployment, authentication, and admin access with the self-hosted identity boundary, including regression coverage and deployment diagnostics.
2026-07-30 14:54:46 +08:00

33 lines
2.5 KiB
Markdown

# Debug Session: staging-admin-api-500
- **Status**: [OPEN]
- **Issue**: staging 部署后,支付管理与套餐管理调用后端仍失败;期望两个后台 API 在管理员会话下正常返回。
- **Debug Server**: pending
- **Log File**: .dbg/trae-debug-log-staging-admin-api-500.ndjson
## Reproduction Steps
1. 登录 https://staging.jyotisha.chat/admin。
2. 打开支付管理,触发 GET /api/admin/payments?limit=20&offset=0。
3. 打开套餐管理,触发 GET /api/admin/packages。
4. 记录 HTTP 状态、当前部署 SHA 与 web 容器脱敏错误类别。
## Hypotheses & Verification
| ID | Hypothesis | Likelihood | Effort | Evidence |
|----|------------|------------|--------|----------|
| A | admin_runtime 缺支付/套餐对象权限 | High | Low | Pending:预期 PostgreSQL permission denied |
| B | staging migration 未执行或仍 pending | High | Low | Pending:预期 migration ledger 缺授权 migration |
| C | staging 正在运行旧 SHA/旧镜像 | High | Low | Pending:预期 health SHA 与 staging head 不一致 |
| D | ADMIN_DATABASE_URL 指向错误数据库或角色 | Medium | Medium | Pending:预期 current_user/database 与预期不符 |
| E | SQL 与 staging schema 不匹配 | Medium | Low | Pending:预期 undefined table/column/function |
| F | deploy 用户无法直接访问 Docker socket | Confirmed | Low | run 1309:访问 `/var/run/docker.sock` 返回 permission denied;既有自动部署使用 `sudo docker`。 |
## Log Evidence
| Evidence | Observation |
|---|---|
| staging health | 当前部署 SHA 仍为 `dd8e2ad`。 |
| required permission migration | `d44a414` 尚未部署。 |
| Gitea migration | run 1309 在远端 Docker 操作失败,错误为 deploy 用户访问 `/var/run/docker.sock` permission denied。 |
| known privilege boundary | `.gitea/workflows/backend-quality-gate.yml` 的同主机自动部署已使用 `sudo docker`,证明可用边界是非交互 sudo Docker,而不是 docker 组直连。 |
## Verification Conclusion
Pre-fix 结论:后台 500 的已知权限迁移尚未落库;run 1309 暴露 Docker socket 权限,run 1313 又证明只将 Docker 子命令改为 sudo 仍不足,root-owned 部署树的 mutation lock 会在迁移执行前拒绝 deploy 用户。修复应以 `sudo -n env` 启动整个受控脚本,脚本内直接使用 `docker`,并以 sudo 清理可能成为 root-owned 的 incoming。修复后仍需实际运行迁移、确认 health 切换到目标 SHA,并完成管理员登录态支付/套餐 smoke;在这些证据完成前保持 OPEN。