Ansible批量部署核心是连得上、写得清、跑得稳:通过SSH免密连接目标主机,用Inventory分组管理主机信息,以YAML格式Playbook定义幂等任务序列,内置模块(如apt、copy、service)实现软件安装、文件分发与服务管控,无需客户端,开箱即用。

用 Ansible 批量部署服务器环境,核心就三件事:连得上、写得清、跑得稳。不需要装客户端,不依赖复杂架构,靠 SSH 和 YAML 就能把几十台机器的系统配置、软件安装、服务启动全自动化完成。
控制节点准备与免密连接
Ansible 运行在你的操作机(控制节点)上,目标服务器只需开放 SSH 端口、有 sudo 权限即可。关键一步是打通信任链:
- 在控制节点生成密钥:
ssh-keygen -t rsa(回车默认即可) - 把公钥推到每台目标服务器:
ssh-copy-id user@192.168.1.10 - 测试连通性:
ansible all -m ping -i inventory.ini,返回"pong"表示成功
如果目标服务器用非标准端口或用户名,直接在 inventory 文件里注明,比如:web1 ansible_host=192.168.1.10 ansible_user=deploy ansible_port=2222
主机清单(Inventory)分组管理
inventory 是 Ansible 的“作战地图”,用简单文本或 YAML 定义哪些机器归哪一组、用什么账号登录:
- 支持分组嵌套,例如
[app_servers]和[db_servers]可统一归入[production:children] - 变量可按组定义(
[app_servers:vars]),也可按主机单独指定(web1 ansible_ssh_private_key_file=~/.ssh/key2) - 推荐用
.ini格式起步,清晰易读;后期复杂场景再切 YAML
Playbook 编写:从单任务到模块化
Playbook 是自动化执行的“剧本”,YAML 格式,结构直白:
- 最简 playbook 只需定义
hosts(目标组)、tasks(要做的事),比如安装 Nginx:- name: Install nginx; apt: name=nginx state=present - 重复操作不担心出错——Ansible 天然幂等,装过一次再跑也不会重装或覆盖配置
- 复杂项目建议用 Role:把 Nginx、MySQL、用户配置等拆成独立目录,每个 role 包含
tasks/、templates/、vars/,复用和协作更方便
常用模块与实用技巧
不用写 shell 脚本也能干大部分事,Ansible 内置模块已覆盖高频需求:
-
copy:传文件,支持backup: yes自动备份原配置 -
template:用 Jinja2 模板动态生成配置,比如把{{ db_host }}替换成实际地址 -
service:启停服务,配合enabled: yes开机自启 -
lineinfile:精准修改某行配置,比正则替换更安全可靠 - 调试时加
-v或--check(试运行模式),避免误操作

















