一、实验环境:
7.10 还原至快照ansible、7.11还原至快照 新系统、7.12还原至快照 新系统
二、ansible机器上将本地 SSH 公钥部署到远程服务器(192.168.7.11)的 root 用户账户
[root@ansible ~]# ssh-copy-id root@192.168.7.11 将本地 SSH 公钥部署到远程服务器(192.168.7.11)的 root 用户账户,从而为后续的免密码登录(基于密钥认证)做好准备
三、创建安装数据库的任务和变量的目录、创建安装nginx的文件、任务和变量的目录
[root@ansible ~]# mkdir -p roles/ins_nginx/{files,tasks,vars} 创建安装nginx的文件、任务和变量的目录
四、创建剧本
[root@ansible ~]# vim playbook_sample.yaml 创建剧本
- hosts: servers 主机使用servers单元,
become: yes 以管理员权限执行
become_method: sudo 执行方式以sudo(普通用户用suso)
roles: 角色
- ins_mariadb 安装数据库
- ins_nginx 安装nginx
五、创建安装数据库的主配置文件
[root@ansible ~]# vim roles/ins_mariadb/vars/main.yml 创建安装数据库的主配置文件
mariadb_package: 数据库的数据包
- mariadb-server 数据库的服务端
- python3-PyMySQL python3支持数据库的软件
六、创建安装数据库任务的主配置文件
[root@ansible ~]# vim roles/ins_mariadb/tasks/main.yml 创建安装数据库任务的主配置文件
- name: mariadb is installed 任务名称:安装数据库
dnf: 采用dnf模块
name: "{{mariadb_package}}" 安装数据库软件包大括号表示之前定义的变量(数据库的服务端、python3支持数据库的软件)
state: present
tags: install_mariadb 打安装数据库的标记
- name: mariadb is running and enabled 任务名称:启动数据库并设置开机启动
service: 采用服务模块
name: mariadb 启动数据库并设置开机启动
state: started
enabled: yes
七、创建安装nginx变量的主配置文件
[root@ansible ~]# vim roles/ins_nginx/vars/main.yml 创建安装nginx变量的主配置文件
nginx_package: nginx数据包
- nginx 数据包内容nginx
八、创建安装nginx任务的主配置文件
[root@ansible ~]# vim roles/ins_nginx/tasks/main.yml 创建安装nginx任务的主配置文件
- name: nginx is installed 任务1:安装nginx
dnf: 采用dnf模块
name: "{{ nginx_package }}" 安装nginx数据包
state: installed
tags: install_nginx 打nginx标记
- name: edit nginx.conf 任务2:编辑nginx配置文件
lineinfile: 使用lineinfile模块(lineinfile作用:用于在文件中插入、修改或删除行)
path: /etc/nginx/nginx.conf nginx配置文件的路径
regexp: "^ *server_name _;" 匹配以任何数量空格开头的server_name _匹配项,这是一种正则表达式的表示方法
line: "server_name {{ ansible_fqdn }};" 使用ansible内置变量ansible_fqdn注入完全限定域名
tags: edit_nginx.conf 打编辑nginx配置文件的标记
- name: nginx is running and enabled 第三个任务:启动nginx,并设置开机启动
service: 采用服务模块
name: nginx 启动nginx,并设置开机启动
state: started
enabled: yes
- name: put index.html 任务4:创建测试页面
copy: 采用copy模块
src: index.html 源文件index.html
dest: /usr/share/nginx/html 目标文件目录:
owner: root 用户:root
group: root 组:root
mode: 0644 权限:644
- name: check nginx 任务5:检查nginx
uri: 采用uri模块
url: http://{{ ansible_fqdn }} 使用统一资源标识符,完整域名(就是网址的全名称)
九、在安装nginx文件的目录下创建测试页面
[root@ansible ~]# echo "nginx index page" > roles/ins_nginx/files/index.html 在安装nginx文件的目录下创建测试页面
十、运行playbook_sample的剧本
[root@ansible ~]# ansible-playbook playbook_sample.yaml 运行playbook_sample的剧本
十一、server11和server12机器上查看nginx和mariadb的状态


十二、本机上测试验证:


十三、相关知识:
+--- playbook.yml +--- playbook_sample.yml
| |
+--- roles/ +--- roles/
| |
+--- role01/ +--- ins_mariadb/
| | |
+--- files/ | +--- vars/
| | | |
+--- templates/ | | +--- main.yml
| | +--- tasks/
+--- tasks/ | |
| | +--- main.yml
+--- handlers/ |
| +--- ins_nginx/
+--- vars/ |
| +--- files/
+--- defaults/ | |
| | +--- index.html
+--- meta/ +--- vars/
| |
| +--- main.yml
|
+--- tasks/
|
+--- main.yml
该任务通过lineinfile模块实现了对Nginx配置文件的动态修改
正则匹配规则
regexp: "^ *server_name _;"
匹配以任意数量空格开头的server_name _;配置项
动态内容替换
line: "server_name {{ ansible_fqdn }};"
使用Ansible内置变量ansible_fqdn注入完全限定域名
实现配置从默认占位符_到实际主机名的转换
url: http://{{ ansible_fqdn }} 这种形式借助 Ansible 的变量机制,能够方便地根据目标主机的实际情况动态生成特定的 URL,以满足各种与网络服务相关的配置和应用需求
Playbook的lineinfile是一种Ansible模块,用于在文件中插入、修改或删除行。
lineinfile模块的主要参数如下:
path:必须参数,指定要操作的文件。
line:使用此参数指定文本内容。
regexp:使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这些行都会被删除。
insertbefore:借助此参数可以将文本插入到“指定的行”之前。
Ansible的Copy模块是一个非常实用的功能,它允许用户在远程服务器之间复制文件和目录。
Copy模块的语法如下:
yaml- name: Copy file or directory
copy:
src: /path/to/source
dest: /path/to/destination
owner: owner_name
group: group_name
mode: file_permissions
其中,src表示源文件或目录的路径,dest表示目标文件或目录的路径。可以在复制文件的同时指定所需的权限和所有权信息。Ansible的Copy模块不仅可以复制文件,还可以复制目录。如果想复制整个目录,只需指定源目录和目标目录即可。
Ansible的uri模块是用于发送HTTP、HTTPS请求到web服务端点,并能够处理不同的HTTP请求,如GET、POST、PUT等。
在ansible uri模块中,可以通过使用url、method、用户名、密码等参数来发送不同类型的请求
Tomcat 默认使用 HTTP 协议的 8080 端口和 HTTPS 协议的 8443 端口
统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作
在WWW上,每一信息资源都有统一的且在网上的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位器)
1)完整域名 fqdn
2)主要用正则表达式匹配到相应字符串并进行替换。主要使用的选项是rege
3)统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串
4)统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。它最初是由蒂姆·伯纳斯·李发明用来作为万维网的地址
register
用于注册一个变量,保存命令的结果 (shell 或 command 模块),这个变量可以在后面的 task、when 语句或模板文件中使用。