playbook+roles安装nginx实战

news/2024/11/15 4:18:00/文章来源:https://www.cnblogs.com/yohoolook/p/18330910

基本目录结构

image

host文件夹

用于存放主机清单文件

hosts文件

hosts文件内容如下:(仅供参考)

[proxy]
node2
[web]
192.168.xx.xx

playbook-all-roles.yml文件

用于指定执行哪个role的文件(命名可以自定义)

文件内容如下:(仅供参考)

因为roles文件夹下只有nginx一个文件夹,所以- role: nginx就指定的是nginx这个role

- hosts: proxyremote_user: rootgather_facts: noroles:- role: nginx

roles文件夹

用于存放各种类型的role,本次只演示nginx这一个

nginx文件夹

代表着nginx这个role,里面存放着各种配置文件

主要框架如下:

  • default:在每个角色文件夹内,‌default文件夹用于存放该角色的默认变量。‌这些变量可以在其他地方被引用,‌用于配置角色的行为。‌
  • files:用于存放角色部署时可能需要用到的一些文件。‌这些文件可以通过Ansible的copy模块传输到远程主机上。‌
  • handlers:包含处理任务的配置文件,‌当某些条件满足时,‌会触发这些处理器执行相应的操作,‌如重启服务或应用配置更改等。‌
  • meta:主要编写依赖关系,即一个独立模块引用另一个role
  • tasks:包含角色的具体任务定义,‌这些任务描述了如何在远程主机上执行操作,‌如安装软件、‌配置服务等。‌
  • templates:模板文件
  • vars:虽然roles目录结构中没有明确提到vars文件夹,‌但在实际使用中,‌有时会在角色内部定义一些变量,‌这些变量可以存放在vars文件夹中,‌以便在任务中使用。‌

本次只讲解使用到的文件夹

files文件夹

目录结构

[root@master files]# tree
.
├── index.html
├── nginx-1.22.1.tar.gz
├── nginx.conf
├── nginx.service
└── yohoo.conf
index.html

自定义的nginx访问首页,按需添加

nginx-1.22.1.tar.gz

nginx安装包

nginx.conf

nginx的主配置文件

内容如下:(仅供参考)

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;#include       /usr/local/nginx/conf.d/yohoo.conf;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#开启gzip的功能,目的:提高传输效率,节约带宽gzip  on;#限制最小压缩,小于一字节文件不会压缩gzip_min_length 1;#定义压缩的级别(压缩比,文件越大,压缩越多,但是cpu使用就越多)gzip_comp_level 3;#include /usr/local/nginx/conf.d/*.conf;server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}include yohoo.conf;server {listen       89;server_name  localhost;location / {root   html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}#include /usr/local/nginx/conf.d/*.conf;
}
nginx.service

用于设置开机自启动,以及系统级启动,例如:systemctl start nginx

内容如下:

[Unit]
Description=nginx web service
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true[Install]
WantedBy=default.target
yohoo.conf

自定义nginx的conf文件,按需使用,需要使用则在nginx.conf中配置include xxx.conf,可参考上面nginx.conf文件配置

文件内容如下:

upstream tomcats {server 192.168.xx.xx1:8080 max_conns=2;server 192.168.xx.xx2:8080 max_conns=2;}server {listen       99;server_name  localhost;location / {proxy_pass http://tomcats;}location /img {root www;}location /static {alias www/img;}#正则匹配location ~ \.(png|jpg) {root www;}#正则匹配不区分大小写location ~* \.(jpg|png) {root www;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}server {listen       100;server_name  localhost;#精准匹配location = / {root www;index index.html;}#前缀匹配location ^~ /img {root www;}#正则匹配location ~ \.(png|jpg) {root www;}
}
handlers文件夹

目录结构

[root@master handlers]# tree
.
└── main.yml

注意:只能定义成main.yml文件名

文件内容如下:(仅供参考)

功能:重启nginx服务

#触发后重启nginx
- name: restartshell: systemctl restart nginx
vars文件夹

目录结构

[root@master vars]# tree
.
└── main.yml

注意:只能定义成main.yml文件名

文件内容如下:(仅供参考)

功能:定义一些参数

src_nginx: "nginx-1.22.1.tar.gz"
nginx_decompress_dir: "/usr/local"
nginx_install_dir: "/usr/local/nginx"
nginx_after_decompress_name: "nginx-1.22.1"
src_nginx_conf: "nginx.conf"
src_nginx_include_conf: "yohoo.conf"
dest_nginx_conf: "/usr/local/nginx/conf/nginx.conf"
dest_nginx_include_conf: "/usr/local/nginx/conf/yohoo.conf"
src_nginx_index: "index.html"
dest_nginx_index: "/usr/local/nginx/html/"
nginx_service: "nginx.service"
tasks文件夹

目录结构

[root@master tasks]# tree
.
├── bianyi_and_install_nginx.yml
├── config_enabled_start.yml
├── config_nginx.yml
├── firewall_open_port.yml
├── index_nginx.yml
├── install_nginx_bianyi.yml
├── install_nginx_yilai.yml
├── main.yml
└── nginx_pkg_transfer_and_jieya.yml

注意:除了main.yml文件必须要有,其他yml文件按需自定义名

main.yml

控制执行顺序

文件内容如下:

- include: install_nginx_bianyi.yml
- include: install_nginx_yilai.yml
- include: nginx_pkg_transfer_and_jieya.yml
- include: bianyi_and_install_nginx.yml
- include: config_nginx.yml
- include: index_nginx.yml
- include: config_enabled_start.yml
- include: firewall_open_port.yml
install_nginx_bianyi.yml

安装编译环境

文件内容如下:

- name: 安装nginx编译环境yum:name:- gcc- gcc-c++state: installed
install_nginx_yilai.yml

安装依赖

文件内容如下:

- name: 安装nginx依赖yum:name:- pcre- pcre-devel- zlib- zlib-devel- openssl- openssl-develstate: installed
nginx_pkg_transfer_and_jieya.yml

nginx安装包传输和解压

文件内容如下:

- name: 传输并解压unarchive:src: "{{ src_nginx }}"dest: "{{ nginx_decompress_dir }}"

注意:这里的"{{}}"就是引用vars中main.yml定义的参数

如果参数不放在最开头,双引号就不用加,例如:

- name: 解释一下什么时候不需要用双引号unarchive: src={{ src_nginx }} dest={{ nginx_decompress_dir }}
- name: 又或者这种情况unarchive:src: /opt/{{ src_nginx }}dest: /usr/{{ nginx_decompress_dir }}
bianyi_and_install_nginx.yml

编译并且安装nginx

文件内容如下:

- name: 创建nginx用户shell: user_name=`cat /etc/passwd|grep nginx|wc -l` &&[ ${user_name} -eq 0 ] && useradd -s /sbin/nologin nginx || break
- name: 编译并安装nginxshell: cd {{ nginx_decompress_dir }} &&cd {{ nginx_after_decompress_name }} &&./configure --user=nginx --group=nginx --prefix={{ nginx_install_dir }} &&make &&make install
config_nginx.yml

配置nginx文件

文件内容如下:

- name: 传输并配置nginx文件copy: src={{ src_nginx_conf }} dest={{ dest_nginx_conf }} backup=yesnotify: restart
- name: 传输并配置include文件copy: src={{ src_nginx_include_conf }} desc={{ dest_nginx_include_conf }}notify: restart

注意:这里的notify对应的就是handles中main.yml的操作,notify后面的名字需要和handlers中main.yml的name名字对应

index_nginx.yml

配置nginx访问首页

文件内容如下:

- name: 传输index首页copy:src: "{{ src_nginx_index }}"dest: "{{ dest_nginx_index }}"notify: restart
config_enabled_start.yml

配置自启动

文件内容如下:

- name: 将自启动配置文件传输copy:src: "{{ nginx_service }}"dest: /usr/lib/systemd/system/
- name: 启动nginx服务,设置自启动service:name: nginxstate: startedenabled: yes
firewall_open_port.yml

开放相关端口

文件内容如下:

- name: 开放80、99、89端口firewalld:port: "{{ item }}"permanent: yesimmediate: yesstate: enabledwith_items:- 80/tcp- 89/tcp- 99/tcp

整体校验是否通过

[root@master ansible-playbook-roles-nginx]# ansible-playbook -i host/hosts playbook-all-roles.yml --syntax-checkplaybook: playbook-all-roles.yml

到playbook-all-roles.yml同级目录执行,没有报错就没有问题

执行

 ansible-playbook -i host/hosts playbook-all-roles.yml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/773767.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024夏中山集训第1周

【NOIP模拟一】20240729 C 注意到答案是s除以区间gcd。 裴蜀定理推广 D像这样建图,跑全源最短路。 在这张图上有 \(1\to 2\to 3\to 4\to 5\) 和 \(7\to 8\to 9\to 3\ to 10\ to 11\) 两条路径。把路径上的点看作车上的点,每个点本身看作车站。 可以发现在车(一条路径)上的点…

关于多模块开发各级目录的用途

参考苍穹外卖 项目整体结构如下各层的用途序号 名称 说明1 sky-take-out maven父工程,统一管理依赖版本,聚合其他子模块2 sky-common 子模块,存放公共类,例如:工具类、常量类、异常类等3 sky-pojo 子模块,存放实体类、VO、DTO等4 sky-server 子模块,后端服务,存放配置文…

WPF实现一个错误信息栏

实现结果一,首先建立一个UserControl 前台代码如下:点击查看代码 <UserControl x:Class="实现一个错误信息栏.ErrorLog"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/x…

c语言中数据的格式化输出

001、输出整型数据,直接输出[root@PC1 test]# ls test.c [root@PC1 test]# cat test.c #include <stdio.h>int main(void) {printf("[%d]\n", 123);return 0; } [root@PC1 test]# gcc test.c -o kkk [root@PC1 test]# ls kkk test.c [root@PC1 test]# ./kkk …

电脑技巧 | 你想拥有这样的自定义工具栏命令按钮吗?QTTabBar帮助你实现!

【电脑技巧】第90期:你想拥有这样的自定义工具栏命令按钮吗?QTTabBar帮助你实现!

window系统使用Tomcat部署若依微服务

安装JAVA 下检查是否安装了JAVAjava -version提示"java: command not found"则表示没有安装,如果安装了会显示JAVA版本信息 CentOS安装JAVAsudo yum install java-11-openjdk-devel 安装完成再执行一下:java -version 说明安装成功,没问题 设置环境变量 设置JAVA_H…

暑假集训CSP提高模拟11

暑假集训CSP提高模拟11 组题人: @KafuuChinocpp\(T1\) P152. Fate \(24pts\)强化版: HDU1688 Sightseeing设 \(dis_{i,0/1}\) 表示从 \(s\) 到 \(i\) 的最短路/次短路长度, \(f_{i,0/1}\) 表示从 \(s\) 到 \(i\) 的最短路/次短路条数。\(dijkstra\) 过程中按照路径长度与最短…

7.29 调试及admin

为什么服务不能启动 go 模块支持 go程序启动过程编译完成之后会在制定目录底下生成一个同名文件, 而不是意向中的service文件 没有搞清楚run是什么的,可以直接运行的 go启动和退出 接口是底层的数据结构 接口的构造过程 反射类型 …

.NET 窗口/屏幕截图

图像采集源除了显示控件(上一篇《.NET 控件转图片》有介绍从界面控件转图片),更多的是窗口以及屏幕。 窗口截图最常用的方法是GDI,直接上Demo吧:1 private void GdiCaptureButton_OnClick(object sender, RoutedEventArgs e)2 {3 var bitmap …

400 Bad Request(错误请求)

400 Bad Request(错误请求):请求无效,服务器无法理解或处理请求。可能的原因包括参数错误、格式错误、缺少必需的字段或数据错误。问题不常见,大多服务器原因,虚拟主机用户联系空间商。 自己购买的服务器,需要寻求三方技术支持排查问题。扫码添加技术【解决问题】专注中…

单细胞转录组上游fasta文件处理

单细胞分析上游fasta文件处理 ——基于cellranger与dropseqRunner###如果测序文件由10X genomics平台产生,则采用cellranger count的基本流程进行fasta文件的上游处理;如果测序文件由dropseq平台产生,则采用dropseqRunner软件进行处理 一、cellranger配置 1、软件安装并查看…

帝国CMS网站忘记后台管理员帐号怎么办?

忘记后台管理员帐号怎么办?使用MySQL数据库管理软件phpmyadmin,查看phome_enewsuser表里的记录:查看username字段的内容。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、…