diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e45a165..2422e6e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,8 +41,11 @@ jobs: # 构建新镜像(失败则整个 workflow 标红,旧容器不受影响) docker build -t involutionhell-backend:latest . - # 用新镜像重启服务 - docker compose up -d --remove-orphans + # 用新镜像重启服务。 + # --force-recreate 是必须的:compose 看 image 名(始终是 :latest)没变就不会重建容器, + # 结果 CI 的 docker build 虽然把 :latest 标签指向新 sha,但运行中容器仍绑死老 sha, + # 部署一直 "success" 但实际 JAR 没换。用 --force-recreate backend 强制销毁重建。 + docker compose up -d --remove-orphans --force-recreate backend # 等待服务启动,最多 60 秒 echo "等待服务健康检查..." @@ -68,6 +71,9 @@ jobs: # 用备份镜像回滚 echo "❌ 健康检查失败,正在回滚到上一个版本..." docker tag involutionhell-backend:rollback involutionhell-backend:latest - docker compose up -d --remove-orphans + # 回滚同样需要 --force-recreate:rollback tag 覆盖回 latest 后 image 名依旧是 :latest, + # compose 看不出变化就不会重建容器,运行中容器仍绑死着失败那版的 sha,回滚等于没回。 + # --no-deps 避免顺带重建 postgres 等依赖服务,减小爆炸半径。 + docker compose up -d --remove-orphans --force-recreate --no-deps backend echo "回滚完成,workflow 标红以提示本次部署失败" exit 1 diff --git a/docker-compose.yml b/docker-compose.yml index e13834e..34ac7f8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,6 +18,11 @@ services: AUTH_GITHUB_ID: ${AUTH_GITHUB_ID:-} AUTH_GITHUB_SECRET: ${AUTH_GITHUB_SECRET:-} AUTH_SECRET: ${AUTH_SECRET:-} + # OAuth 回调前缀:JustAuth 的 redirect-uri 用 ${AUTH_URL:http://localhost:3000}/api/auth/callback/github + # 拼接(见 application.properties)。当前 compose 已通过 env_file: .env 和 + # environment 把 AUTH_URL 注入容器;如果生产上仍是旧值/回退到 localhost, + # 通常是因为容器未重建,环境变量变更需要 recreate 后才会生效,否则会报 redirect_uri_mismatch。 + AUTH_URL: ${AUTH_URL:-https://involutionhell.com} # AI 模型(默认 GLM-4.6V-Flash 免费 fallback,OpenAI 兼容协议) # 变量名沿用 OPENAI_*:Java 用的是 /chat/completions 规范协议,URL+Key+Model # 三件套指哪打哪,OpenAI / 智谱 / Anthropic-compat 任选,无需改代码。