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 # 如果后面接东西那么冒号后面必须有空格
    列表 使用短横线 - 加空格来表示列表项。所有列表项具有相同的缩进级别。

    - 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

  • 测试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: 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

复制代码
[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 |
    +--------------------+

4.今日总结

  • 使用playbook重构backup🍟🍟🍟🍟🍟
  • 使用playbook重构nfs服务🍟🍟🍟🍟🍟
  • 使用playbook重构nginx服务🍟🍟🍟🍟🍟
  • 使用playbook重构PHP服务🍟🍟🍟🍟🍟
  • 使用playbook重构wordpress业务🍟🍟🍟🍟🍟
相关推荐
@游子33 分钟前
内网渗透笔记-Day5
运维·服务器
晚风吹人醒.42 分钟前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
记得记得就1511 小时前
【Nginx 性能优化与防盗链】
运维·nginx·性能优化
Yawesh_best1 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
roman_日积跬步-终至千里1 小时前
【Docker】Docker Stop 后到底发生了什么?——从信号机制到优雅停机
运维·docker·容器
喵手1 小时前
云端智变:基于 DevUI 与 MateChat 打造下一代云原生智能运维中台实战教学!
运维·云原生·devui·matechat
Hard but lovely1 小时前
linux: pthread库的使用和理解
linux
roman_日积跬步-终至千里1 小时前
【强化学习基础(2)】被动强化学习:学习价值函数
学习
逢考必过@k2 小时前
6级550学习ing
学习
小五传输2 小时前
常用的文件摆渡系统:让数据安全高效跨越网络界限
大数据·运维·安全