1.每日复盘与今日内容
1.1复盘
- 安装Ansible🍟🍟🍟🍟🍟
- inventory主机清单定义方法🍟🍟🍟🍟🍟
- 8个常用模块
1.2今日内容
- 使用playbook重构backup🍟🍟🍟🍟🍟
- 使用playbook重构nfs服务🍟🍟🍟🍟🍟
- 使用playbook重构nginx服务🍟🍟🍟🍟🍟
- 使用playbook重构PHP服务🍟🍟🍟🍟🍟
- 使用playbook重构wordpress业务🍟🍟🍟🍟🍟
2.Ansible-playbook
- 基本概念
Playbook是Ansible 的自动化脚本,采用 YAML 格式编写,用于描述在远程主机上执行的策略和步骤。与临时命令(ad-hoc commands)相比,Playbook 更强大,适合复杂部署和配置管理场景。它们通常保存在版本控制系统中,用于推送配置或确保远程系统符合规范
- 组成

- 运行结果颜色
|----|--------------|-------------------------------------|
| 颜色 | 含义 | 说明 |
| 绿色 | 成功执行且未发生状态改变 | 任务成功完成,但目标系统没有发生变化(幂等性体现) |
| 黄色 | 成功执行且发生了状态改变 | 任务成功完成,并且目标系统的状态发生了改变(如文件被创建、服务被启动) |
| 红色 | 执行失败 | 任务执行过程中出现错误,需要排查原因。 |
| 紫色 | 警告信息 | 提示可能存在的问题或建议,但任务可能继续执行 |
-
playbook语法
YAML基本语法规则
规则 描述 示例
缩进 使用空格进行缩进(通常为2个空格),禁止使用制表符 (Tab)。不同缩进级别表示不同的层级关系。
键值对 使用冒号 : 加空格来分隔键和值。 name: Install Nginx # 如果后面接东西那么冒号后面必须有空格
列表 使用短横线 - 加空格来表示列表项。所有列表项具有相同的缩进级别。- apple
注释 使用井号 # 来添加注释。 # This is a comment
file:
path:
state: touch扩展名 说明 使用场景
.yml 更常见、更简洁的扩展名。 这是 Ansible Playbook 社区中的事实标准和首选。几乎所有 Ansible 示例和文档都使用 .yml。
.yaml 更正式、更完整的扩展名。 在某些其他生态系统中可能更受青睐,但在 Ansible 领域远不如 .yml 常见。
3.PlayBook实战
案例1.在webs上面创建a.txt
root@Ansible01 /etc/ansible# vim a.yml
- hosts: webs
tasks:
- name: touch a.txt
file:
path: /root/a.txt
owner: root
group: root
mode: 0644
state: touch
#检测语法有无问题
root@Ansible01 /etc/ansible# ansible-playbook --syntax-check a.yml
playbook: a.yml
#执行
ansible-playbook a.yml

案例2.复制文件到目标b.txt
[root@m01 ansible]# cat b.yml
- hosts: webs
tasks:
- name: copy file to webs /root/
copy:
src: /etc/hosts
dest: /root/
owner: root
group: root
mode: 0600
[root@m01 ansible]# ansible-playbook --syntax-check b.yml
playbook: b.yml
ansible-playbook b.yml

案例3.在web02上创建虚拟用户oldboy01 uid 888 gid 888
[root@m01 ansible]# cat user.yml
- hosts: 10.0.0.8
tasks:
- name: Create Group oldboy01
group:
name: oldboy01
gid: 888
state: present
- name: Create User oldboy01
user:
name: oldboy01
uid: 888
group: oldboy01
state: present
shell: /sbin/nologin
create_home: false
[root@m01 ansible]# ansible-playbook --syntax-check user.yml
playbook: user.yml
[root@m01 ansible]# ansible-playbook user.yml
playbook重构backup
步骤:
1.安装rsync
2.配置rsync(提前将rsync配置文件复制到ansible)
3.创建组
4.创建用户
5.创建密码文件
6.修改密码文件权限为600
7.创建共享目录
8.启动rsync并开机自启动
#前期准备
#先将配置好的文件准备好
root@Ansible01 /etc/ansible# scp 10.0.0.7:/etc/rsyncd.conf .
#第一步:初始化41
vm镜像到初始化完成
#第二步:Inventory主机清单配置41backup
root@Ansible01 ~# vim /etc/ansible/hosts
[backup]
10.0.0.41
#第三步:和41做免密钥认证
ssh-copy-id 10.0.0.41
-
编写playbook
[root@m01 ansible]# cat backup.yml
- hosts: backup
tasks:-
name: Install Rsync Server
yum:
name: rsync
state: present -
name: Configure Rsync Server
copy:
src: rsyncd.conf
dest: /etc/ -
name: Create Group www
group:
name: www
gid: 666
state: present -
name: Create User www
user:
name: www
uid: 666
group: www
shell: /sbin/nologin
create_home: false -
name: Create pass file
copy:
content: rsync_backup:123
dest: /etc/rsync.passwd
mode: 0600 -
name: Create /backup dir
file:
path: /backup
state: directory
owner: www
group: www -
name: Start Rsync Server
systemd:
name: rsyncd
state: started
enabled: yes
-
- hosts: backup
-
测试playbook
[root@m01 ansible]# ansible-playbook --syntax-check backup.yml
playbook: backup.yml
#执行playbook
[root@m01 ansible]# ansible-playbook backup.yml#找一台10.0.0.7和41进行进程守护
rsync -avz o.txt rsync_backup@10.0.0.41::backup

playbook重构nfs服务
-
步骤
1.安装nfs-utils
2.配置nfs 将配置文件提前拷贝到ansible
3.创建组
4.创建用户www
5.修改用户属主属组
6.启动nfs
7.客户端挂载 -
前期准备
#第一步: 初始化31
#第二步: Inventory主机清单配置31
[root@m01 ansible]# cat /etc/ansible/hosts
nfs ansible_ssh_host=10.0.0.31[webs]
10.0.0.7
10.0.0.8[dbs]
10.0.0.51[backup]
10.0.0.41#第三步: 和31做免秘钥认证
[root@m01 ansible]# ssh-copy-id 10.0.0.31 -
编写playbook
[root@m01 ansible]# cat nfs.yml
-
hosts: nfs
tasks:-
name: Install NFS Server
yum:
name: nfs-utils
state: present- name: Configure NFS Server
copy:
src: exports
dest: /etc/
- name: Configure NFS Server
-
name: Create Group www
group:
name: www
gid: 666
state: present -
name: Create User www
user:
name: www
uid: 666
group: www
shell: /sbin/nologin
create_home: false -
name: Create /data/wp
file:
path: /data/wp
state: directory
owner: www
group: www -
name: Start nfs Server
systemd:
name: nfs
state: started
enabled: yes
-
-
hosts: webs
tasks:-
name: Install nfs
yum:
name: nfs-utils
state: present -
name: mount
mount:
src: 172.16.1.31:/data/wp
path: /mnt
fstype: nfs
state: mounted
[root@m01 ansible]# ansible-playbook --syntax-check nfs.yml
-
playbook: nfs.yml
[root@m01 ansible]# ansible-playbook nfs.yml -
-
测试nfs



playbook重构nginx服务
-
步骤
1.安装
2.配置(收集nginx.conf)
[root@m01 ansible]# scp 10.0.0.7:/etc/nginx/nginx.conf .
3.启动 -
前期准备
#1.初始化WEB02
#2.免秘钥
[root@m01 ansible]# ssh-copy-id 10.0.0.8 -
编写playbook
- hosts: 10.0.0.8
tasks:-
name: Configure Nginx Repo
yum_repository:
name: nginx
description: Nginx YUM repo
baseurl: http://nginx.org/packages/centos/7/$basearch/
gpgcheck: no
enabled: yes -
name: Install Nginx Server
yum:
name: nginx
state: present -
name: Create Group www
group:
name: www
gid: 666
state: present -
name: Create User www
user:
name: www
uid: 666
group: www
shell: /sbin/nologin
create_home: false -
name: Configure Nginx Server
copy:
src: nginx.conf
dest: /etc/nginx/ -
name: Start Nginx Server
systemd:
name: nginx
state: started
enabled: yes
[root@m01 ansible]# ansible-playbook --syntax-check nginx.yml
-
playbook: nginx.yml
[root@m01 ansible]# ansible-playbook nginx.yml
- hosts: 10.0.0.8


[root@m01 ansible]# cat php.yml
- hosts: 10.0.0.8
tasks:
- name: Install PHP Server
yum:
name:
- php
- php-bcmath
- php-cli
- php-common
- php-devel
- php-embedded
- php-fpm
- php-gd
- php-intl
- php-mbstring
- php-mysqlnd
- php-opcache
- php-pdo
- php-process
- php-xml
- php-json
state: present
- name: Configure PHP Server
copy:
src: www.conf
dest: /etc/php-fpm.d/
- name: Start PHP Server
systemd:
name: php-fpm
state: started
enabled: yes
[root@m01 ansible]# ansible-playbook --syntax-check php.yml
playbook: php.yml
[root@m01 ansible]# ansible-playbook php.yml
PS:
echo php php-bcmath php-cli php-common php-devel php-embedded php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo php-process php-xml php-json |xargs -n1| awk '{print "- "$1}'
可快速将很多安装包规整为如上格式
ps:注意www.conf要修改两处

playbook重构PHP服务
-
方式一: 安装过的wordpress
1.将数据库的wordpress库导出来
2.将已经部署过的wordpress代码导出来
3.将wp.conf拷贝出来
4.playbook将wordpress库导入到51(假如51重新安装的)
5.playbook将wp.conf拷贝到/etc/nginx/conf.d/
6.playbook将代码 /code/wp 拷贝web02的/code下
以上完成后直接打开不走部署流程、直接之前啥样、打开就是啥样。 -
方式二: 未安装过wordpress
vim wp.yml
- hosts: 10.0.0.8
tasks:-
name: delete default config file
file:
path: /etc/nginx/conf.d/default.conf
state: absent -
name: Copy wp Configure to WEB02
copy:
src: wp.conf
dest: /etc/nginx/conf.d/ -
name: Restart Nginx Server
systemd:
name: nginx
state: restarted -
name: Create code dir
file:
path: /code
state: directory -
name: wget wordpres code
get_url:
url: https://cn.wordpress.org/wordpress-6.0-zh_CN.tar.gz
dest: /opt/ -
name: unarchive wordpress code
unarchive:
src: /opt/wordpress-6.0-zh_CN.tar.gz
dest: /code/
remote_src: yes
creates: /code/wordpress
-
#检查
ansible-playbook --syntax-check wp.yml
#运行
ansible-playbook wp.yml#解析
10.0.0.8 www.wp.com#在51重新创建库
[root@db01 ~]# mysql -uroot -plzy123.com -e 'create database wp;'
[root@db01 ~]# mysql -uroot -plzy123.com -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| w |
| wordpress |
| zh |
| zrlog |
+--------------------+ - hosts: 10.0.0.8

4.今日总结
- 使用playbook重构backup🍟🍟🍟🍟🍟
- 使用playbook重构nfs服务🍟🍟🍟🍟🍟
- 使用playbook重构nginx服务🍟🍟🍟🍟🍟
- 使用playbook重构PHP服务🍟🍟🍟🍟🍟
- 使用playbook重构wordpress业务🍟🍟🍟🍟🍟
