2024年8月20日(playbook nginx任务 mariadb)

一、剧本部署nginx
javascript 复制代码
[root@m0 ~]# mkdir /etc/ansible/playbook
[root@m0 ~]# vim /etc/ansible/playbook/nginx.yml 
---
-       hosts:          group02
        remote_user:    root
        tasks:
        -       name:   卸载httpd
                yum:    name=httpd      state=absent

        -       name:   安装nginx
                yum:    name=nginx      state=present

        -       name:   修改资源文件
                shell:  echo 'I am nginx,port is 80' > /usr/share/nginx/html/index.html

        -       name:   修改端口
                command:        sed -i '/listen/s/80/8080/g' /etc/nginx/nginx.conf
                notify:
                -       restart nginx
        -       name:   启动服务
                service:        name=nginx      state=started   enabled=yes
        handlers:
        -       name:   restart nginx
                service:        name=nginx      state=restarted    
二、roles(难点)

roles介绍

roles(角色):就是通过分别将variables,tasks及handlers等放置于单独的目录中,并可以便捷地调用它们的一种机制。

假设我们要写一个playbook来安装管理lamp环境,那么这个playbook就会写很长。所以我们希望把这个很大的文件分成多个功能拆分,分成apache管理,php管理,mysql管理,然后在需要使用的时候直接调用就可以了,以免重复写。就类似编程里的模块化的概念,以达到代码复用的效果。

1、创建roles的目录结构

files:用来存放由copy模块或script模块调用的文件。

tasks:至少有一个main.yml文件,定义各tasks。

handlers:有一个main.yml文件,定义各handlers。

templates:用来存放jinjia2模板。

vars:有一个main.yml文件,定义变量。

meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。

注意:在每个角色的目录中分别创建files,tasks,handlers,templates,vars和meta目录,用不到的目录可以创建为空目录.

javascript 复制代码
[root@m0 ~]# cd /etc/ansible/roles/
[root@m0 roles]# mkdir nginx
[root@m0 roles]# cd nginx/
[root@m0 nginx]# ls
[root@m0 nginx]# mkdir files
[root@m0 nginx]# mkdir tasks
[root@m0 nginx]# mkdir handlers
[root@m0 nginx]# mkdir templates
[root@m0 nginx]# mkdir vars
[root@m0 nginx]# mkdir meta

[root@m0 nginx]# touch handlers/main.yml
[root@m0 nginx]# touch tasks/main.yml
[root@m0 nginx]# touch vars/main.yml
[root@m0 nginx]# tree
.
├── files
├── handlers
│   └── main.yml
├── meta
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml


[root@m0 nginx]# vim /etc/ansible/playbook/test001.yml
---
-       hosts:          s
        remote_user:    root
        roles:
                -       nginx

[root@m0 nginx]# ansible-playbook /etc/ansible/playbook/test001.yml 
[root@m0 nginx]# ansible s -m yum -a 'name=nginx state=absent'

[root@m0 nginx]# vim /etc/ansible/roles/nginx/tasks/main.yml 
---
-       name:   卸载httpd
        yum:    name=httpd      state=absent
-       name:   卸载nginx
        yum:    name=nginx      state=absent
-       name:   安装nginx
        yum:    name=nginx      state=present
-       name:   启动服务 
        service:        name=nginx      state=started   enabled=yes
...

[root@m0 nginx]# ansible-playbook /etc/ansible/playbook/test001.yml

[root@m0 nginx]# vim /etc/ansible/playbook/test001.yml
---
-       hosts:          s
        remote_user:    root
        roles:
                -       nginx
                -       mysql
...

[root@m0 nginx]# cp /etc/ansible/roles/nginx/ /etc/ansible/roles/mysql -r
[root@m0 nginx]# ansible-playbook /etc/ansible/playbook/test001.yml 
 
2、练习

使用role实现lnmp

nginx改配置 8080端口

mariadb中创建eleme数据库

创建表t_user

id int 编号 主键约束 自增 遍号

username varchar 非空约束 账号

password varchar 非空约束 密码

remark varchar 非空约束 账号权限说明
yum remove mariadb-libs-5.5.56-2.el7.x86_64

yum -y install mariadb

yum -y install mariadb-server

systemctl start mariadb.service

mysql

javascript 复制代码
[root@m0 ~]# mysql << EOF
> create database if not exists eleme charset utf8mb4;
> use eleme;
> create table user(id int primary key auto_increment,username varchar(45) not null,password varchar(45) not null,remark varchar(45));
> quit
> EOF
[root@m0 ~]# mysql
javascript 复制代码
[root@m0 ~]# vim /etc/ansible/roles/nginx/tasks/main.yml
---
-       name:   卸载mariadb
        yum:    name=mariadb,mariadb-server,mariadb-devel       state=absent

-       name:   安装mariadb
        yum:    name=mariadb,mariadb-server,mariadb-devel       state=present

-       name:   启动mariadb
        service:        name=mariadb    state=started   enabled=yes

-       name:   执行脚本,创建数据库和数据表
        script: /etc/ansible/script/dbtable.sh


[root@m0 ~]# cd /etc/ansible/roles/
[root@m0 roles]# mkdir mariadb
[root@m0 roles]# cd mariadb/
[root@m0 mariadb]# mkdir tasks
[root@m0 mariadb]# touch tasks/main.yml
[root@m0 mariadb]# vim /etc/ansible/playbook/test003.yml
---
-   hosts:          s
    remote_user:    root
    roles:
        -    mariadb


[root@m0 mariadb]# cd /etc/ansible/
[root@m0 ansible]# mkdir script
[root@m0 ansible]# vim /etc/ansible/script/dbtable.sh
#!/bin/bash
mysql << EOF
create database if not exists eleme charset utf8mb4;
use eleme;
create table user(id int primary key auto_increment,username varchar(45) not null,password varchar(45) not null,remark varchar(45));
quit
EOF


[root@m0 ansible]# ansible-playbook /etc/ansible/playbook/test003.yml
相关推荐
ltl21 分钟前
实时 OS 巡礼:VxWorks、QNX、Zephyr 与 PREEMPT_RT
linux
我是谁??30 分钟前
Ubuntu22.04更换清华源
linux·运维·服务器
白狐_79836 分钟前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
圣殿骑士-Khtangc1 小时前
Go字符串高效拼接性能对比与底层原理分析
服务器·前端·golang
zander2581 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
码匠许师傅1 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
Shell运维手记1 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
朴马丁1 小时前
国际与国产PLM在精细化工赛道的布局:2026年主要厂商技术特色
大数据·运维·人工智能·流程行业plm·化工新材料
Kendra9192 小时前
从 0 到上线:单文件网页 App 部署到阿里云 ECS 全流程(Nginx+Node+PM2+PostgreSQL)
nginx·阿里云·云计算·部署·个人开发·今天吃什么
这个DBA有点耶2 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构