fix(deploy): 部署脚本内嵌 nginx 配置,运行时覆盖容器内 upstream #1647
Reference in New Issue
Block a user
Delete Branch "fix/nginx-volume-in-deploy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
PR #1645 修改了
compose.yml添加 nginx volume mount,但实际部署并未生效。根因:
ci_staging_deploy.sh使用docker run直接启动容器,不走 docker compose。所以 compose.yml 的 volume mount 完全不生效。加上 CI path filter 将
infra/改动判为「纯后端」→skip_frontend=true→ Build Staging Web Image 被 skip → retag 旧镜像 → 镜像内 nginx 配置指向xiaoxia-api-production→ staging web 容器 upstream DNS 失败 → 502。修复
在部署脚本中内嵌 nginx 配置,部署时写入服务器本地文件,
docker run时 volume mount 到容器内/etc/nginx/conf.d/default.conf。ci_staging_deploy.sh: 内嵌 staging nginx 配置(upstream →xiaoxia-api-staging:8000)ci_production_deploy.sh: 内嵌 production nginx 配置(upstream →xiaoxia-api-production:8000)与 PR #1645 的关系
PR #1645 修改 compose.yml 的思路仍然有效(给使用 docker compose 的场景提供保障),但当前部署流程不走 compose,所以需要本 PR 补充。两层保护:
web.DockerfileARGNGINX_CONF烘焙正确配置(主路径)🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
location ~* \.(js|css...)$)的优先级高于普通前缀匹配(location /generated-files/)。当访问/generated-files/report.jpg这类路径时,请求会被正则规则拦截,导致 Nginx 去/usr/share/nginx/html/generated-files/寻找文件,而不是预期的/app/generated/,从而导致文件无法访问(404)。location /generated-files/修改为location ^~ /generated-files/。使用^~修饰符可以停止后续的正则表达式匹配,确保该路径下的请求(包括图片等静态资源)能正确命中 alias 规则。💡 改进建议(不阻塞合并)
[scripts/ci_production_deploy.sh: 76 & scripts/ci_staging_deploy.sh: 69] 缺少父目录创建检查
$NGINX_CONF_FILE,但未确保其父目录存在。如果$NGINX_CONF_FILE被自定义为一个不存在的目录路径,脚本执行会报错失败。建议在写入前添加mkdir -p "$(dirname "$NGINX_CONF_FILE")"。[scripts/ci_production_deploy.sh: 88 & scripts/ci_staging_deploy.sh: 87] 冗余的 resolver 配置
resolver 127.0.0.11,但proxy_pass使用的是静态域名(如http://xiaoxia-api-production:8000)。Nginx 会在启动时解析一次该域名,resolver指令仅在proxy_pass中使用变量(如http://$upstream)时才会生效。当前配置下该指令不会产生实际效果,若非为后续变更预留,建议删除以保持配置整洁。[scripts/ci_production_deploy.sh: 85 & scripts/ci_staging_deploy.sh: 84] 上传大小限制过大
client_max_body_size 800m允许上传非常大的文件。请确认后端服务是否支持处理如此大的请求体,否则可能导致后端崩溃或超时。建议根据实际业务需求调整(例如 50m 或 100m),并确保后端限制一致。✅ 良好实践
<< 'NGINX_EOF'引号包裹 Heredoc 结束符,有效防止了 Shell 变量在配置文件写入时被意外展开,安全性良好。:ro(只读)模式,遵循最小权限原则。expires 1y+immutable)。🤖 由 AI 代码审查机器人自动生成 | 2026-09-03 07:47:41 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1647 已关闭或合并,对应的预览环境已被清理。