Skip to content

Commit cf78f00

Browse files
longsizhuoclaudeCopilot
authored
fix(deploy): AUTH_URL 透传 + 强制重建容器(生产 SignIn / /api/events 全都失效的根因) (#11)
* fix(deploy): AUTH_URL 透传 + 强制重建容器 修两条独立但叠加的生产部署 bug: 1) docker-compose.yml 的 environment 缺 AUTH_URL 透传。 application.properties 里 justauth redirect-uri 是 ${AUTH_URL:http://localhost:3000}/api/auth/callback/github, compose 不显式透传时 .env 的 AUTH_URL=https://involutionhell.com 进不到容器,生产 /oauth/render/github 302 的 redirect_uri 变成 localhost,跳 GitHub 必报 redirect_uri_mismatch。 docker inspect 查到运行中容器 AUTH_URL=http://localhost:3010 是老容器手工 docker run 遗留。 2) deploy.yml 的 docker compose up -d 没加 --force-recreate。 CI 的 docker build 会把 :latest 标签指向新 sha,但 compose 看 image 名没变就不重建容器,:latest 指向新 sha 而运行中容器仍 绑死老 sha —— PR #9 / #10 的 SaToken /api/events 白名单、 events controller 全都躺在新镜像里没生效,/api/events 一直 401。 合起来就是"部署全 success 但生产没变化"的伪成功。 后续 merge 这个 PR 触发 deploy workflow 后,验证: curl -I https://api.involutionhell.com/oauth/render/github | grep -i location # → redirect_uri=https%3A%2F%2Finvolutionhell.com%2Fapi%2Fauth%2Fcallback%2Fgithub curl https://api.involutionhell.com/api/events # → {"success":true,"data":[...]} ⚠️ GitHub OAuth App 的 Authorization callback URLs 需要手动加 https://involutionhell.com/api/auth/callback/github(若还没加)。 * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix(deploy): 回滚路径也加 --force-recreate + --no-deps CR 指出:回滚分支把 rollback tag 覆盖回 latest 后 image 名依旧是 :latest, compose 同样会判断"无需重建",导致回滚等于没回(容器还绑着失败那版的 sha)。 - --force-recreate 保证 rollback tag 切换后容器真的重建 - --no-deps 限定只重建 backend 服务,不碰 postgres 等依赖, 避免部署失败同时顺带重启 DB 扩大爆炸半径 --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 46e5c1b commit cf78f00

2 files changed

Lines changed: 14 additions & 3 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ jobs:
4141
# 构建新镜像(失败则整个 workflow 标红,旧容器不受影响)
4242
docker build -t involutionhell-backend:latest .
4343
44-
# 用新镜像重启服务
45-
docker compose up -d --remove-orphans
44+
# 用新镜像重启服务。
45+
# --force-recreate 是必须的:compose 看 image 名(始终是 :latest)没变就不会重建容器,
46+
# 结果 CI 的 docker build 虽然把 :latest 标签指向新 sha,但运行中容器仍绑死老 sha,
47+
# 部署一直 "success" 但实际 JAR 没换。用 --force-recreate backend 强制销毁重建。
48+
docker compose up -d --remove-orphans --force-recreate backend
4649
4750
# 等待服务启动,最多 60 秒
4851
echo "等待服务健康检查..."
@@ -68,6 +71,9 @@ jobs:
6871
# 用备份镜像回滚
6972
echo "❌ 健康检查失败,正在回滚到上一个版本..."
7073
docker tag involutionhell-backend:rollback involutionhell-backend:latest
71-
docker compose up -d --remove-orphans
74+
# 回滚同样需要 --force-recreate:rollback tag 覆盖回 latest 后 image 名依旧是 :latest,
75+
# compose 看不出变化就不会重建容器,运行中容器仍绑死着失败那版的 sha,回滚等于没回。
76+
# --no-deps 避免顺带重建 postgres 等依赖服务,减小爆炸半径。
77+
docker compose up -d --remove-orphans --force-recreate --no-deps backend
7278
echo "回滚完成,workflow 标红以提示本次部署失败"
7379
exit 1

docker-compose.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ services:
1818
AUTH_GITHUB_ID: ${AUTH_GITHUB_ID:-}
1919
AUTH_GITHUB_SECRET: ${AUTH_GITHUB_SECRET:-}
2020
AUTH_SECRET: ${AUTH_SECRET:-}
21+
# OAuth 回调前缀:JustAuth 的 redirect-uri 用 ${AUTH_URL:http://localhost:3000}/api/auth/callback/github
22+
# 拼接(见 application.properties)。当前 compose 已通过 env_file: .env 和
23+
# environment 把 AUTH_URL 注入容器;如果生产上仍是旧值/回退到 localhost,
24+
# 通常是因为容器未重建,环境变量变更需要 recreate 后才会生效,否则会报 redirect_uri_mismatch。
25+
AUTH_URL: ${AUTH_URL:-https://involutionhell.com}
2126
# AI 模型(默认 GLM-4.6V-Flash 免费 fallback,OpenAI 兼容协议)
2227
# 变量名沿用 OPENAI_*:Java 用的是 /chat/completions 规范协议,URL+Key+Model
2328
# 三件套指哪打哪,OpenAI / 智谱 / Anthropic-compat 任选,无需改代码。

0 commit comments

Comments
 (0)