Ansible运维剧本核心是解决重复性、易错性和扩展性问题:通过标准化结构封装高频操作、幂等设计规避风险、模块组合替代手工;base.yml统一初始化基础环境,LAMP/LEMP剧本快速部署Web栈,批量分发强调原子性与可回退,巡检剧本实现状态监控与自愈。

Ansible 常用运维剧本不是“写得越长越厉害”,而是要解决真实场景中的重复性、易错性和扩展性问题。核心在于:用标准化结构封装高频操作,靠幂等设计规避重复风险,借模块组合替代手工拼凑。
基础环境统一初始化
新服务器上线第一件事不是装服务,而是确保基础环境干净、一致、可追溯。这个剧本通常跑在所有目标主机上,是后续所有部署的前提。
- 关闭 SELinux 或设为 permissive 模式(避免权限拦截)
- 配置国内镜像源(如阿里云或清华源),加速 apt/yum 更新
- 安装常用工具包(vim、curl、jq、rsync、unzip)
- 同步 NTP 时间(用 chrony 或 systemd-timesyncd,避免日志错乱和证书失效)
- 禁用 IPv6(若业务不依赖,减少干扰)或明确配置策略
建议单独存为 base.yml,每次新增服务器都先执行它。它不依赖其他角色,可独立运行,也方便做安全基线检查。
LAMP/LEMP 快速堆栈部署
电商、CMS、内部系统常需标准 Web 环境。一个可复用的 LAMP(Linux + Apache + MySQL + PHP)或 LEMP(Nginx 替代 Apache)剧本,能省掉 80% 的手动配置时间。
- 按发行版自动选择包管理器(apt / yum / dnf),避免硬编码
- MySQL 使用 mysql_root_password 变量传入密码,配合 mysql_user 模块创建应用数据库与用户
- PHP 配置通过 template 模块注入 j2 模板,支持不同版本(7.4 / 8.1 / 8.3)动态适配
- Apache/Nginx 启动后自动测试首页响应码(用 uri 模块),失败则标记为 failed_task
关键点:所有配置文件路径、服务名、端口都定义为变量,便于不同环境(dev/staging/prod)切换,不用改剧本只改 vars 文件。
批量文件分发与配置热更新
日常运维中,“改一处,发百台”是最频繁动作。比如更新 nginx.conf、替换 logrotate 规则、下发新证书——这类任务必须原子、可验、可回退。
- 用 copy 模块时加 backup: yes,自动保留原文件带时间戳备份
- 敏感文件(如 .env、密钥)走 ansible-vault 加密,解密仅在运行时内存中进行
- 配置变更后触发服务重载(notify + handlers),而非盲目 restart,减少服务中断
- 结合 stat 模块校验目标文件 MD5,确保分发完整性
不推荐直接用 shell 执行 scp 或 rsync —— 失去幂等性与错误捕获能力;Ansible 原生模块已足够健壮。
服务状态巡检与异常自愈
部署完成不是终点,持续可用才是目标。一个轻量但有效的巡检剧本,能提前发现单点故障,甚至自动恢复。
- 检查关键进程是否存在(ps + shell 模块组合)
- 验证监听端口是否打开(wait_for 模块,超时即报错)
- 调用健康接口(如 /healthz)并断言返回码与 body 关键字
- 失败时自动执行预设恢复动作:重启服务、切换备用配置、发送告警(集成企业微信/钉钉 webhook)
该剧本可设为定时任务(cron + ansible-playbook),也可嵌入 CI/CD 流水线末尾作为 gate check,真正实现“部署即验证”。
不复杂但容易忽略:每个剧本开头加 gather_facts: no(除非真需要 facts),能显著提速;多组主机时用 serial: 10 控制滚动发布节奏;所有 playbook 都应带 tags,方便局部执行(如 ansible-playbook deploy.yml --tags "nginx,php")。

















