2f4d00c528
Deploy staging to test server / deploy (push) Successful in 6m34s
Align staging deployment, authentication, and admin access with the self-hosted identity boundary, including regression coverage and deployment diagnostics.
2.5 KiB
2.5 KiB
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
- 登录 https://staging.jyotisha.chat/admin。
- 打开支付管理,触发 GET /api/admin/payments?limit=20&offset=0。
- 打开套餐管理,触发 GET /api/admin/packages。
- 记录 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。