ansible自动化部署web环境的核心是将人工操作转化为可复用、可验证、可回滚的声明式任务,需配置控制节点与目标机ssh免密通信,定义yaml格式主机清单分组,按角色拆分playbook,并通过服务状态、uri访问、数据库连接等手段验证每步执行结果。

准备控制节点和免密通信
在一台干净的 Linux 机器(推荐 CentOS 7+/Rocky/Ubuntu 22.04)上安装 Ansible,并配置与所有目标节点的 SSH 免密连接:
- 执行 sudo yum install -y ansible(CentOS/RHEL)或 sudo apt install -y ansible(Ubuntu/Debian)
- 生成密钥:ssh-keygen -t rsa -b 4096,一路回车
- 向每台目标服务器推送公钥:ssh-copy-id root@192.168.2.11(替换为实际 IP),重复执行到 web1/web2/web3/proxy1/database/nfs 等全部节点
- 测试连通性:ansible all -i inventory.yml -m ping,返回 SUCCESS 表示通信正常
定义清晰的主机清单(Inventory)
用 YAML 格式组织节点角色,比传统 hosts 文件更易维护。例如 inventory.yml:
- webservers:包含 web1、web2、web3,用于部署 Nginx/Apache、PHP、WordPress 代码
- proxies:包含 proxy1、proxy2,负责负载均衡和 SSL 终止
- databases:database 节点,部署 MariaDB 或 MySQL 并初始化 wordpress 数据库
- storage:nfs 节点,提供共享存储挂载点(如 /var/www/uploads)
- 每个组可附加变量,比如 ansible_user: root、web_root: /var/www/html
分角色编写可复用 Playbook
避免把所有逻辑堆在一个 yml 文件里。按职责拆分成 Role,例如:
- role/nginx:编译安装或 yum 安装 Nginx,配置 systemd 服务,校验配置语法(nginx -t)
- role/php:安装 PHP-FPM 及扩展(pdo_mysql、gd、mbstring),配置监听 socket,设置 opcache
- role/wordpress:下载解压 WordPress 包、设置 wp-config.php(用 template 模块注入 DB 主机、密码等变量)、创建 uploads 目录并赋权
- role/nfs-client:安装 nfs-utils,挂载 nfs:/data/web 到 /var/www/shared,设为开机自启
- 主 playbook(如 deploy-web.yml)只需引用这些 role,并指定 target group:hosts: webservers
关键细节必须做验证和防护
自动化不是“一键跑完就完事”,而是确保每步都稳:
- 所有软件包安装后,用 service httpd status 或 systemctl is-active nginx 验证服务是否 active
- Web 页面可用性用 uri 模块检查:url: http://localhost/ status_code: 200
- 数据库连接用 mysql_db 模块确认 wordpress 库存在,用 mysql_user 创建专用账号
- 敏感信息(如 DB 密码)不硬编码,通过 ansible-vault encrypt_string 加密后放入 vars 文件
- 首次运行加 --check 参数试运行,确认变更项;生产环境加 --limit web1 逐台灰度发布











