Ansible批量管理服务器,批量推送网站配置

Ansible 批量管理服务器的核心思路是:把要操作的机器写进主机清单,用一个 YAML 格式的 Playbook 描述“先传文件、再校验、通过后重载服务”,然后一条命令并发执行到所有节点。
本文面向零基础运维,带你完成批量推送网站配置的全过程,最终能在多台服务器上同步 Nginx 站点配置,并用 nginx -t 和访问测试确认生效。

准备条件与目录规划

控制端需要能通过 SSH 免密登录被管理服务器,且目标机已安装 Nginx、Python 可用。
建议先约定一个清晰的控制端目录,避免文件散落:

mkdir -p /opt/ansible/site-config/{inventory,playbooks,templates}
  • inventory/hosts:主机清单,记录服务器 IP 和分组。
  • playbooks/:存放 Playbook 文件。
  • templates/:存放网站配置模板。

验证免密登录是否可用:

ssh root@192.168.1.11 "hostname"

能直接返回主机名说明免密正常;
如果提示输入密码,先执行 ssh-copy-id root@192.168.1.11 把公钥推过去。

编写主机清单和网站配置模板

编辑 inventory/hosts,用分组管理不同环境的机器:

[web]
192.168.1.11
192.168.1.12

如果 SSH 端口不是 22 或用户不是 root,写成 192.168.1.11 ansible_port=2222 ansible_user=deploy

templates/site.conf.j2 中放一份 Nginx 站点模板,变量 server_nameroot 由 Playbook 传入:

server {
    listen 80;
    server_name {{ server_name }};
    root {{ web_root }};
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

模板里用双花括号表示变量,所有机器会得到同一份结构、按变量渲染出的配置,避免手工逐台修改。

用 Playbook 批量推送并重载

新建 playbooks/push-site.yml,关键动作是复制配置、校验语法、仅在通过时重载:

- hosts: web
  become: yes
  vars:
    server_name: www.example.cn
    web_root: /var/www/html
  tasks:
    - name: 推送站点配置
      template:
        src: ../templates/site.conf.j2
        dest: /etc/nginx/conf.d/site.conf
        owner: root
        group: root
        mode: "0644"
      notify: reload nginx

    - name: 校验 Nginx 配置语法
      command: nginx -t
      register: nginx_check
      changed_when: false
      failed_when: nginx_check.rc != 0

  handlers:
    - name: reload nginx
      service:
        name: nginx
        state: reloaded

执行前先做一次空跑检查:

cd /opt/ansible/site-config
ansible-playbook -i inventory/hosts playbooks/push-site.yml --check

确认没有报错后再正式执行:

ansible-playbook -i inventory/hosts playbooks/push-site.yml

校验不通过时不要重载nginx -t 返回非 0 会让任务失败,从而阻止错误配置上线。
这是批量操作里最值得保留的一道保险。

避坑与常见报错

  • 权限不足:目标机用普通用户登录时,become: yes 需要该用户能 sudo,否则会报权限错误。
  • 模板路径写错src 相对路径以 Playbook 所在目录为基准,写错会提示文件不存在。
  • 配置被覆盖:如果目标机原本有同名文件,template 会直接覆盖,建议先确认文件名唯一,或先用 --check 观察变化。
  • 重载未触发:只有文件内容真正变化时 notify 才会触发 handler,内容没变就不重载属于正常行为。
  • SSH 连接超时:检查目标机防火墙是否放行控制端 IP,以及 22 端口是否可达。

验证结果与适用场景

推送完成后,逐台确认配置和访问效果:

ansible -i inventory/hosts web -m shell -a "nginx -t && systemctl is-active nginx"

预期输出每台都显示语法测试成功和 active
再用 curl -I http://192.168.1.11 检查返回状态码。

判断是否适合用 Ansible 批量管理:服务器数量在几台到几十台、配置结构基本一致、需要频繁同步时收益明显;
如果只有单台机器或配置差异极大,手工维护反而更省事。

需要注意,不同发行版和 Nginx 安装方式的配置目录可能不同,比如部分环境使用 /etc/nginx/sites-available/,建议以目标机实际路径为准。

可以只推送不重载吗

可以。
去掉 notify: reload nginxhandlers 部分即可,配置会更新但服务保持原状,适合先灰度观察的场景。

推送失败怎么定位到具体哪台机器

Playbook 输出里会标出失败主机名和错误任务,也可以用 ansible -i inventory/hosts web -m ping 先确认哪些机器连通性有问题。

变量怎么按机器区分

在主机清单里为每台机器设置独立变量,或在 host_vars/ 目录下按 IP 建文件,Playbook 会自动读取,适合不同站点绑定不同域名的情况。

分享到:
上一篇
运维自动化脚本编写,批量操作多台服务器
下一篇
服务器日志集中收集,ELK搭建日志分析平台
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意