nginx 在 ci/cd 中是前端应用的自包含运行时容器,承担静态资源托管、生产级 http 处理及版本化部署;通过多阶段 dockerfile 构建、github actions 自动化构建推送、ssh 或 compose 更新容器实现零停机交付。

用 Docker 部署 Nginx 结合 CI/CD 实现自动化构建与推送,核心在于把 Nginx 当作前端服务的“交付载体”而非单纯配置文件管理工具。关键不是只跑一个 nginx 容器,而是让每次代码变更都触发:前端构建 → 打包进定制 Nginx 镜像 → 推送镜像 → 更新线上容器。整个过程脱离人工操作,环境完全一致。
明确 Nginx 在流水线中的角色
Nginx 不再是宿主机上手动配置的服务,而是作为前端应用的运行时容器。它的职责包括:
- 托管构建后的静态资源(如 dist 目录)
- 提供 gzip、缓存、HTTPS 重定向等生产级 HTTP 行为
- 通过镜像版本实现可追溯、可回滚的部署单元
编写面向 CI/CD 的 Nginx Dockerfile
基础镜像选 nginx:alpine 或 nginx:stable,重点是把构建产物复制进去,并覆盖默认配置:
- 在项目根目录下新建
Dockerfile.frontend - 第一阶段用
node:18-alpine构建 Vue/React 项目,生成dist/ - 第二阶段用
nginx:alpine,COPY 构建产物和自定义nginx.conf -
COPY ./dist/ /usr/share/nginx/html/替代传统挂载,确保镜像是自包含的 - 配置中启用
try_files $uri $uri/ /index.html;支持前端路由
CI 流水线中集成构建与推送
以 GitHub Actions 为例,在 .github/workflows/deploy.yml 中定义:
- 触发条件:push 到
main分支或特定 tag - 步骤一:检出代码 + 设置 Node.js 环境 + 安装依赖 + 运行
npm run build - 步骤二:使用
docker/build-push-action构建镜像,指定--file Dockerfile.frontend - 步骤三:登录 Docker Hub 或私有仓库(如 Harbor),推送带语义化标签的镜像(如
v1.2.0或sha-abc123) - 避免使用
latest标签,便于精准控制上线版本
CD 阶段完成容器更新(零停机可选)
推送成功后,需让目标服务器拉取新镜像并替换旧容器。常用方式有:
- SSH 方式:流水线末尾执行
ssh user@host 'docker pull xxx/nginx-frontend:v1.2.0 && docker stop nginx-app && docker run -d --name nginx-app -p 80:80 xxx/nginx-frontend:v1.2.0' - Docker Compose 方式:更新
docker-compose.yml中 image 字段,再运行docker-compose up -d - 更健壮的做法:用 Nginx 容器做反向代理,前置一层负载均衡器(如另一台 Nginx 或 Traefik),滚动替换后端容器,实现真正零中断
不复杂但容易忽略的是配置热加载与健康检查——Nginx 容器启动后,建议在 startup.sh 中加入 nginx -t && nginx -s reload 验证配置有效性,再配合 HEALTHCHECK 指令让编排工具感知服务就绪状态。











