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

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

  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。