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业务🍟🍟🍟🍟🍟
相关推荐
Duo1J7 小时前
【OpenGL】LearnOpenGL学习笔记25 - 法线贴图 NormalMap
笔记·学习·图形渲染·贴图·着色器
Duo1J7 小时前
【OpenGL】LearnOpenGL学习笔记26 - 视差贴图 Parallax Map
笔记·学习·图形渲染·贴图·着色器
伞啊伞7 小时前
自动化运维工具 Ansible 集中化管理服务器
运维·自动化·ansible
一只花里胡哨的程序猿7 小时前
odoo18应用、队列服务器分离(SSHFS)
运维·服务器·odoo
风车带走过往7 小时前
部署开源PPTagent 生成工具
linux·开源
风已经起了8 小时前
FPGA学习笔记——图像处理之亮度调节(乘法型)
图像处理·笔记·学习·fpga开发·fpga
能不能别报错8 小时前
K8s学习笔记(五) Velero结合minnio业务数据备份与恢复
笔记·学习·kubernetes
能不能别报错8 小时前
K8s学习笔记(六) K8s升级与节点管理
笔记·学习·kubernetes
范桂飓8 小时前
在 Windows GPU 机器上运行 Linux CUDA
linux·运维·windows
今天也好累8 小时前
贪心算法之分数背包问题
c++·笔记·学习·算法·贪心算法