推荐以Ansible构建可复用、可验证、可回滚的Nginx源码部署流程:统一准备源码与依赖,预检主机环境,分步上传、编译、安装并清理,结合模板化配置、systemd服务管理、健康检查与二进制快照回滚机制。
源码安装 Nginx 并批量部署到多台服务器,关键不是“写一个万能脚本”,而是构建可复用、可验证、可回滚的自动化流程。手动编译虽然灵活,但极易因系统差异(如 OpenSSL 版本、GCC 选项、依赖路径)导致失败;直接用 shell 循环 SSH 执行又缺乏幂等性与错误收敛能力。推荐以 Ansible 为核心工具链,兼顾安全性、可读性和生产就绪性。
在控制节点统一准备:下载 Nginx 源码包(如 nginx-1.24.0.tar.gz)、所需模块(如 lua-nginx-module、headers-more)、以及编译依赖清单(gcc、make、pcre-devel、openssl-devel、zlib-devel)。所有文件放入 Ansible 的 files/ 目录下。不建议在远程主机上 wget,避免网络波动或镜像失效。
编写一个预检 playbook(如 precheck.yml),检查每台目标主机是否满足:内核版本 ≥ 3.10、可用内存 ≥ 1GB、磁盘空间 ≥ 500MB、基础开发包已安装。未通过的节点自动跳过后续步骤并告警。
核心逻辑分三步:上传源码 → 远程编译安装 → 清理临时文件。不依赖远程主机已有构建工具链,全部由 playbook 显式声明:
/tmp/nginx-src,设置 copy: no 表示从控制节点拉取--prefix=/usr/local/nginx、--with-http_ssl_module 等参数,禁用交互(creates 参数防止重复执行)make -j$(nproc) 和 make install,添加 args: executable: /bin/bash 支持管道和变量/usr/local/nginx/conf/nginx.conf 指向 Git 管理的标准化配置模板编译安装只是开始。真正体现自动化价值的是配置与服务治理:
worker_processes: "{{ ansible_processor_vcpus | int }}")/usr/lib/systemd/system/nginx.service 文件,定义 Type=forking、PIDFile 和 reload 命令,确保 systemctl daemon-reload 后可管理enabled: yes 和 state: started,Ansible 自动处理依赖关系http://{{ inventory_hostname }}:80,响应码为 200 则标记成功,否则触发回滚(调用上一版二进制备份)源码部署后必须闭环安全与升级机制:
user nginx;,并用 user 模块创建 nginx 用户和组{% if env == 'prod' %}server_tokens off;{% endif %}
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-$(date +%Y%m%d)
cp /usr/local/nginx/sbin/nginx-20260810 /usr/local/nginx/sbin/nginx 回退