day43-Ansible-PlayBook
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 # 如果后面接东西那么冒号后面必须有空格
列表 使用短横线 - 加空格来表示列表项。所有列表项具有相同的缩进级别。 <pre>- 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: webstasks: - name: touch a.txtfile:path: /root/a.txtowner: rootgroup: rootmode: 0644state: touch#检测语法有无问题
root@Ansible01 /etc/ansible# ansible-playbook --syntax-check a.ymlplaybook: a.yml#执行
ansible-playbook a.yml
案例2.复制文件到目标b.txt
[root@m01 ansible]# cat b.yml
- hosts: webstasks:- name: copy file to webs /root/copy:src: /etc/hostsdest: /root/owner: root group: rootmode: 0600
[root@m01 ansible]# ansible-playbook --syntax-check b.ymlplaybook: b.ymlansible-playbook b.yml
案例3.在web02上创建虚拟用户oldboy01 uid 888 gid 888
[root@m01 ansible]# cat user.yml
- hosts: 10.0.0.8tasks:- name: Create Group oldboy01group: name: oldboy01gid: 888state: present- name: Create User oldboy01user:name: oldboy01uid: 888group: oldboy01state: presentshell: /sbin/nologincreate_home: false
[root@m01 ansible]# ansible-playbook --syntax-check user.ymlplaybook: 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: backuptasks:- name: Install Rsync Serveryum:name: rsyncstate: present- name: Configure Rsync Servercopy:src: rsyncd.confdest: /etc/- name: Create Group wwwgroup:name: wwwgid: 666state: present- name: Create User wwwuser:name: wwwuid: 666group: wwwshell: /sbin/nologincreate_home: false- name: Create pass filecopy:content: rsync_backup:123dest: /etc/rsync.passwdmode: 0600- name: Create /backup dirfile:path: /backupstate: directoryowner: wwwgroup: www- name: Start Rsync Serversystemd:name: rsyncdstate: startedenabled: yes
- 测试playbook
[root@m01 ansible]# ansible-playbook --syntax-check backup.ymlplaybook: 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: nfstasks:- name: Install NFS Serveryum:name: nfs-utilsstate: present- name: Configure NFS Servercopy:src: exportsdest: /etc/- name: Create Group wwwgroup:name: wwwgid: 666state: present- name: Create User wwwuser:name: wwwuid: 666group: wwwshell: /sbin/nologincreate_home: false- name: Create /data/wpfile:path: /data/wpstate: directoryowner: wwwgroup: www- name: Start nfs Serversystemd:name: nfsstate: startedenabled: yes- hosts: webstasks:- name: Install nfs yum:name: nfs-utilsstate: present- name: mountmount:src: 172.16.1.31:/data/wppath: /mntfstype: nfsstate: mounted
[root@m01 ansible]# ansible-playbook --syntax-check nfs.ymlplaybook: 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.8tasks:- name: Configure Nginx Repoyum_repository:name: nginxdescription: Nginx YUM repobaseurl: http://nginx.org/packages/centos/7/$basearch/gpgcheck: noenabled: yes- name: Install Nginx Serveryum:name: nginxstate: present- name: Create Group wwwgroup:name: wwwgid: 666state: present- name: Create User wwwuser:name: wwwuid: 666group: wwwshell: /sbin/nologincreate_home: false- name: Configure Nginx Servercopy:src: nginx.confdest: /etc/nginx/- name: Start Nginx Serversystemd:name: nginxstate: startedenabled: yes
[root@m01 ansible]# ansible-playbook --syntax-check nginx.ymlplaybook: nginx.yml[root@m01 ansible]# ansible-playbook nginx.yml
[root@m01 ansible]# cat php.yml
- hosts: 10.0.0.8tasks:- name: Install PHP Serveryum: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-jsonstate: present- name: Configure PHP Servercopy:src: www.confdest: /etc/php-fpm.d/- name: Start PHP Serversystemd:name: php-fpmstate: startedenabled: yes
[root@m01 ansible]# ansible-playbook --syntax-check php.ymlplaybook: 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.8tasks:- name: delete default config filefile:path: /etc/nginx/conf.d/default.confstate: absent- name: Copy wp Configure to WEB02copy:src: wp.confdest: /etc/nginx/conf.d/- name: Restart Nginx Serversystemd:name: nginxstate: restarted- name: Create code dirfile:path: /codestate: directory- name: wget wordpres codeget_url:url: https://cn.wordpress.org/wordpress-6.0-zh_CN.tar.gzdest: /opt/- name: unarchive wordpress code unarchive:src: /opt/wordpress-6.0-zh_CN.tar.gzdest: /code/remote_src: yescreates: /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 |
+--------------------+
4.今日总结
- 使用playbook重构backup🍟🍟🍟🍟🍟
- 使用playbook重构nfs服务🍟🍟🍟🍟🍟
- 使用playbook重构nginx服务🍟🍟🍟🍟🍟
- 使用playbook重构PHP服务🍟🍟🍟🍟🍟
- 使用playbook重构wordpress业务🍟🍟🍟🍟🍟