Nginx 配置与项目部署解耦:envsubst + 独立 Workflow
543 字
3 分钟
Nginx 配置与项目部署解耦:envsubst + 独立 Workflow
问题
博客的 nginx 一直跑着官方默认配置——Gzip 没开、安全头没有、缓存策略全无。更麻烦的是,nginx 配置和博客内容耦合在同一个部署流程里:
deploy-server.yml: pnpm build → SCP dist/ → docker run想改个缓存时间?得改项目代码、走完整构建、等 CI/CD 跑完。改完容器重启,配置又丢了(无状态容器)。
方案:四层解耦
1. 模板 + envsubst
仓库是公开的,敏感信息(域名/IP)不能明文存。用 envsubst 做模板变量替换:
server { server_name ${BLOG_DOMAIN}; # ...}CI/CD 中替换后上传:
- run: envsubst '${BLOG_DOMAIN}' < template > default.confenvsubst '${BLOG_DOMAIN}' 精确替换指定变量,nginx 自身的 $ 变量(如 $remote_addr)不受影响。
GitHub Secrets 里存 BLOG_DOMAIN,仓库里只有模板,不留明文。
2. 独立 Workflow
新增 .github/workflows/deploy-nginx.yml,只做一件事:
手动触发 → envsubst → SCP default.conf → nginx -t 测试 → nginx -s reload和博客内容部署完全独立:
改 nginx 配置 → 编辑模板 → 手动触发 Deploy Nginx Config → 10 秒生效改博客内容 → git push → Deploy to Server 自动触发 → 3 分钟3. 条件挂载
博客部署时检测配置文件是否存在:
CONFIG_MOUNT=""if [ -f /path/to/conf/default.conf ]; then CONFIG_MOUNT="-v /path/to/conf/default.conf:/etc/nginx/conf.d/default.conf:ro"fi
docker run -d --name myFireflyBlog \ -v /path/to/dist:/usr/share/nginx/html:ro \ $CONFIG_MOUNT \ -p 80:80 --restart always nginx:alpine配置存在则挂载,不存在则退化到默认配置——零耦合故障点。
4. 配置与内容目录分离
服务器上配置文件和静态文件分开放:
/path/to/blog/├── dist/ # 博客静态文件(SCP 上传)├── conf/│ └── default.conf # nginx 配置(独立 workflow 管理)两个目录互不覆盖,内容 deploy 不会丢配置,配置更新不影响内容。
结果
| 操作 | 之前 | 之后 |
|---|---|---|
| 改缓存策略 | 改代码 → push → 等 3 分钟构建 | 改模板 → 触发 workflow → 10 秒 reload |
| 改博客内容 | 同上流程 | git push → 自动部署(不影响配置) |
| 回滚配置 | 无解 | git revert → 触发 workflow |
| 服务器重建 | 手配 nginx | 跑 workflow 一键恢复 |
最直接的收益:改 nginx 配置从”半小时的项目发布”变成了”10 秒的运维操作”。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
Nginx 配置与项目部署解耦:envsubst + 独立 Workflow
https://www.sanyablog.cn/posts/nginx-config-separation-practice/相关文章智能推荐
1
使用 GitHub Actions + Docker 自动化部署 Astro 静态博客
技术实践从手动 SCP 上传到一键 CI/CD 部署,记录 myFireflyBlog 的自动化部署方案演进
2
让博客文章携带可下载文件:随文附件功能实现记录
博客搭建给静态博客加上随文附件下载功能:附件不随整站部署,单独上传到服务器专用目录,正文用超链接即可下载;记录了重试兜底、只读挂载点踩坑与下载限流。
3
博客 AI 助手“无回复”根因:反代网关地址缓存过期导致 502
技术实践博客 AI 助手无回复的排查经历:根因是 Nginx 反代对后端容器名解析出旧地址导致 502;通过容器内 DNS + 变量转发,让网关每次请求重新解析后端容器地址实现自愈。
4
隐藏的博客文章还在首页显示?排查 Astro draft 机制问题
技术实践排查 Astro 博客中 draft: true 文章仍显示预览和分类计数错误的经历,以及 HTML 缓存策略的优化
5
mdoc 定制化工具包:把修复文档管理系统搬到新机器
工具搭建一套便携部署工具包,在新机器上重建定制化的修复文档管理系统:技能、子代理、CLI 与配置模板全部就绪,按配置清单填好路径即可获得同等功能,附带 Claude Code 用法与 AI 部署教程。
随机文章随机推荐













