首页 > 系统相关 >playbook+roles安装nginx实战

playbook+roles安装nginx实战

时间:2024-07-29 19:51:25浏览次数:12  
标签:name roles nginx html playbook conf include yml

基本目录结构

image

host文件夹

用于存放主机清单文件

hosts文件

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

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

playbook-all-roles.yml文件

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

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

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

- hosts: proxy
  remote_user: root
  gather_facts: no
  roles:
    - 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: restart
  shell: 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-devel
    state: 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: 编译并安装nginx
  shell: 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=yes
  notify: 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: nginx
    state: started
    enabled: yes
firewall_open_port.yml

开放相关端口

文件内容如下:

- name: 开放80、99、89端口
  firewalld:
    port: "{{ item }}"
    permanent: yes
    immediate: yes
    state: enabled
  with_items:
    - 80/tcp
    - 89/tcp
    - 99/tcp

整体校验是否通过

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

playbook: playbook-all-roles.yml

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

执行

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

标签:name,roles,nginx,html,playbook,conf,include,yml
From: https://www.cnblogs.com/yohoolook/p/18330910

相关文章

  • ansible实战__使用安装包安装nginx
    目录结构[root@mastertar_install_nginx]#tree.├──nginx-1.22.1.tar.gz├──nginx_install_tar.yaml└──nginx.service文件解释nginx-1.22.1.tar.gznginx安装包,其他版本也可以nginx.service为了设置系统启动(systemctlstartnginx)等具体文件[Unit]De......
  • ansible实战__使用yum方法安装nginx
    目录结构[root@masteryum_install_nginx]#tree.├──CentOS-Base.repo└──nginx_install.yaml如果yum源有问题需要建CentOS-Base.repo文件,没有则不需要报错信息可参考如下链接:CentOS-Base.repo文件内容#CentOS-Base.repo##Themirrorsystemusesthecon......
  • Nginx 如何处理 WebSocket 连接?
    ......
  • Nginx 如何实现请求的缓存过期策略?
    ......
  • Linux中安装Nginx教程
    Nginx离线部署一.下载包链接: 链接:https://pan.baidu.com/s/1V11osYIsgDjwW9_qBJU9Dw 提取码:6868二、安装开始安装1.把包放在一个文件夹中,tarzxvfnginxOfflinePack.tar.gz解压cd到nginxOfflinePack目录2.然后运行命令:rpm-Uvh*.rpm--nodeps--force3.安装pcr......
  • nginx 配置代理服务地址最后多加反斜杠和不加反斜杠的区别
    在使用Nginx配置代理服务时,地址最后是否添加反斜杠(/)会对代理的URL处理产生影响。1.地址最后不加反斜杠当配置的代理服务地址最后没有反斜杠时,Nginx会将请求的URL路径原封不动地传递给后端服务器。例如:location/backend/{proxy_passhttp://backend-server;}请......
  • 从零手写实现 nginx-33-http_proxy 代理验证测试
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅读:从零......
  • 从零手写实现 nginx-34-proxy_pass 配置加载处理
    前言大家好,我是老马。很高兴遇到你。我们为java开发者实现了java版本的nginxhttps://github.com/houbb/nginx4j如果你想知道servlet如何处理的,可以参考我的另一个项目:手写从零实现简易版tomcatminicat手写nginx系列如果你对nginx原理感兴趣,可以阅......
  • nginx 代理php
    centos7.6nginx编译安装./configure--prefix=/data/apps/nginx\--user=nginx\--group=nginx\--with-http_stub_status_module\--with-http_ssl_module\--with-http_gzip_static_module\--with-stream\--with-http_v2_module\--with-http_realip_mo......
  • nginx批量封禁黑名单ip
    nginx批量封禁黑名单ip昨天搞到差不多1点,今天又是忙到6点半,连我领导都说“搞得我们加一好憔悴呀”。有很长一段时间没更新博客了,想着怎么做个人IP。。。谋出路 一、需求介绍废话少说,需求就是怎么批量封禁别人给来的一大堆黑名单ip。甲方每天不定期发来几百、上千个ip,我......