Ansible自动化运维实战--通过role远程部署nginx并配置(8/8)

文章目录

在 Ansible 中,使用角色(Role)来远程部署并配置 Nginx 是一种非常高效且可复用的方式。

1、准备工作

首先,查看系统:

bash 复制代码
cat /etc/redhat-release

然后,ansible检查各个主机的连通性:(主机组名为webserves,包括4台机子)

bash 复制代码
ansible webserves -m ping -o

2、创建角色结构

在ansible服务器主机创建文件夹:

bash 复制代码
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p

相应的文件夹中创建对应文件:

bash 复制代码
touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml

在index.html中输入有些信息:

bash 复制代码
echo 1234 > roles/nginx/files/index.html 

安装nginx,并拷贝nginx配置文件到指定目录下:

bash 复制代码
yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2

安装tree,检查创建的roles目录结构:

bash 复制代码
yum install tree -y

tree roles/

补充一点:这里,工作中我们也可以如下命令一键快速创建 nginx 的角色目录结构

bash 复制代码
ansible-galaxy init nginx

这会生成如下的目录结构:

bash 复制代码
nginx/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

3、编写任务

  • 配置 tasks/main.yml
    该文件定义了部署和配置 Nginx 的主要任务:
bash 复制代码
vim roles/nginx/tasks/main.yaml
yaml 复制代码
---
- name: install epel-release pacakge
  yum: name=epel-release state=latest

- name: intall nginx package
  yum: name=nginx state=latest

- name: copy index.html
  copy: src=index.html dest=/usr/share/nginx/html/index.html

- name: copy nginx.conf template
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  notify: restart nginx

- name: make sure nginx service running
  service: name=nginx state=started enabled=yes

4、准备配置文件(金甲模板)

bash 复制代码
vim roles/nginx/templates/nginx.conf.j2

修改nginx的金甲模板,使其成为各个主机的nginx的配置文件

bash 复制代码
##修改两处
worker_processes {{ ansible_processor_cores }} #调用内部已知变量
worker connections {{ worker_connections }} #自定义变量
bash 复制代码
#查看host01中的ansible_processor_cores核心数
ansible host01 -m setup -a 'filter=ansible_processor_cores'

template模板(金甲模板)是一套灵活的,可扩展,编辑的配置文件,用来推送给各个主机,作为自己的配置模板使用;里面可以存放变量等,非常灵活,便于扩展操作。

5、编写变量

bash 复制代码
vim roles/nginx/vars/main.yaml

编辑内容为:

yaml 复制代码
worker_connections: 10240

6、编写处理程序

bash 复制代码
vim roles/nginx/handlers/main.yaml

修改内容如下:

yaml 复制代码
---
- name: restart nginx
  service: name=nginx state=restarted

7、编写剧本

bash 复制代码
vim roles/site.yaml

修改内容如下:

yaml 复制代码
- hosts: webserves
  roles:
  - nginx

大概意思可以用剧本形象的比喻解释一下:针对webserves组中的所有主机,编写一个叫nginx的角色,里面包括群演files、武术指导handlers、任务主角tasts、模板替身templates和变量道具vars;整个一个剧本通site.yaml(场地)进行实施演出。

8、执行剧本Playbook

首先进行yaml的语法检查:

bash 复制代码
cd roles
ansible-playbook site.yaml --syntax-check

上述显示证明没有问题了;

执行实施site.yaml

bash 复制代码
ansible-playbook site.yaml

9、验证-游览器访问每台主机的nginx页面

访问4台主机的nginx-index.html

检查每个主机的nginx配置,两个变量都是获取变量值。

bash 复制代码
cat /etc/nginx/nginx.conf

注意事项

  • 权限问题:由于安装软件和修改系统配置需要特权,使用了 become: true,确保你有足够的权限执行这些操作。
  • 不同操作系统:上述示例主要针对基于 yum 或 apt 的系统。如果使用其他操作系统,可能需要调整 package 模块的相关配置。
  • 防火墙:部署完成后,确保防火墙允许 Nginx 使用的端口(通常是 80 和 443)的流量通过。

人生当中总是有你能力所不及的范围,但是如果在你能力所及的范畴内,你尽到了自己全部的努力,那你还有什么可以遗憾呢?


相关推荐
前端 贾公子3 小时前
速通Docker === Dockerfile
运维·docker·容器
dntktop7 小时前
Fort Firewall:全方位守护网络安全
运维·windows
一张假钞8 小时前
Ubuntu 20.04 Realtek 8852无线网卡驱动
linux·运维·ubuntu
7yewh8 小时前
嵌入式知识点总结 Linux驱动 (三)-文件系统
linux·运维·驱动开发·stm32·嵌入式硬件·mcu·物联网
青春:一叶知秋9 小时前
【Linux网络编程】数据链路层
运维·服务器·网络
真正的醒悟9 小时前
智能安全策略-DPL
运维·服务器
爱吃喵的鲤鱼9 小时前
Linux——网络基础(1)
linux·运维·网络
Lilixxs10 小时前
开发环境搭建-3:配置 JavaScript 开发环境 (fnm+ nodejs + pnpm + nrm)
linux·运维·javascript·pnpm·fnm
我的运维人生10 小时前
备份与恢复管理系统深度解析及代码实践
linux·运维·服务器·运维开发·技术共享