一,ansible使用role的用途?

roles分别将变量/文件/任务/模板/handler等放置于单独的目录中,

并可以方便的include各目录下的功能

roles使playbook能实现代码被调用,避免了代码的重复

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,ansible例子:安装nginx

1,配置hosts

[root@centos8 roles]# vi /etc/ansible/hosts

内容:

[web]
172.18.1.1:22
172.18.1.2:22
172.18.1.3:22

2,role的目录结构

[root@centos8 roles]# tree
.
├── nginx
│ ├── files
│ │ ├── installnginx.sh
│ │ ├── nginx-1.18.0.tar.gz
│ │ └── nginx.service
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ │ └── nginx.conf.j2
│ └── vars
└── webinstallnginx.yml 5 directories, 6 files

各文件的用途说明:

webinstallnginx.yml是nginx这个role被执行的playbook的入口文件

tasks目录下的main.yml是task的执行入口文件

files目录存放需要用到的文件

installnginx.sh是安装nginx的脚本

nginx-1.18.0.tar.gz是下载好的nginx源码

nginx.conf:配置文件

nginx.service: 供systemd管理用的service文件

三,role目录下各文件的代码

1,webinstallnginx.yml

# roles: 调用role

[root@centos8 roles]# more webinstallnginx.yml
- hosts: web
remote_user: root
roles:
- nginx

2,nginx/tasks/main.yml

#gcc,make,pcre-devel,openssl-devel是编译nginx需要的软件

#/usr/local/soft:  软件安装目录

#/usr/local/source:   源文件、安装包保存的目录

#/data/nginx/logs:  保存nginx日志的目录

#user/group:添加用户nginx,用来运行nginx服务

[root@centos8 roles]# more nginx/tasks/main.yml
- name: install gcc
dnf: name=gcc disable_gpg_check=yes
- name: install make
dnf: name=make disable_gpg_check=yes
- name: install pcre-devel
dnf: name=pcre-devel disable_gpg_check=yes
- name: install openssl-devel
dnf: name=openssl-devel disable_gpg_check=yes
- name: Configure soft dir
file: path=/usr/local/soft/ state=directory mode=0755
- name: Configure source dir
file: path=/usr/local/source/ state=directory mode=0755
- name: copy nginx source file
copy: src=nginx-1.18.0.tar.gz dest=/usr/local/source/
- name: install nginx
script: installnginx.sh
- name: Configure log dir
file: path=/data/nginx/logs/ state=directory mode=0755
- name: add group:nginx
group: name=nginx
- name: add user:nginx
user: name=nginx group=nginx createhome=no shell=/sbin/nologin
- name: template conf file
template: src=nginx.conf.j2 dest=/usr/local/soft/nginx-1.18.0/conf/
- name: copy service file
copy: src=nginx.service dest=/usr/lib/systemd/system/
- name: start service
service: name=nginx state=started enabled=yes

3,nginx/files/installnginx.sh

#--with-http_stub_status_module:查看http状态的模块

#--with-http_ssl_module:实现对https的支持

[root@centos8 roles]# more nginx/files/installnginx.sh
cd /usr/local/source/;
tar -zxvf nginx-1.18.0.tar.gz;
cd /usr/local/source/nginx-1.18.0/;
./configure --prefix=/usr/local/soft/nginx-1.18.0 --with-http_stub_status_module --with-http_ssl_module;
make && make install;

4,nginx/templates/nginx.conf.j2

说明:在nginx.conf后加j2,表示这是一个jinja2文件,

也可以不加,不会影响ansible对它的处理

说明:{{ ansible_processor_cores }}  这个变量代表受控端机器的核心数量,

是供nginx优化使用的,因为受控机上的核心数量可能并不一致

这个变量的值通过setup模块可以看到,例子:

        [root@centos8 roles]# ansible 172.18.1.1 -m setup | grep processor_cores
"ansible_processor_cores": 1,

nginx.conf.j2 的内容:

[root@centos8 roles]# more nginx/templates/nginx.conf.j2
user nginx nginx;
worker_processes {{ ansible_processor_cores }};
error_log /data/nginx/logs/error.log;
pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream;
server_tokens off;
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 /data/nginx/logs/access.log main;
sendfile on;
keepalive_timeout 60 45; gzip on;
gzip_disable "MSIE [1-6]\.";
gzip_comp_level 9;
gzip_types application/json text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_http_version 1.1;
gzip_vary on;
gzip_proxied any; server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

5,nginx/files/nginx.service

[root@centos8 roles]# more nginx/files/nginx.service
[Unit]
Description=nginx-The High-performance HTTP Server
After=network.target [Service]
Type=forking
PIDFile=/usr/local/soft/nginx-1.18.0/logs/nginx.pid
ExecStartPre=/usr/local/soft/nginx-1.18.0/sbin/nginx -t -c /usr/local/soft/nginx-1.18.0/conf/nginx.conf
ExecStart=/usr/local/soft/nginx-1.18.0/sbin/nginx -c /usr/local/soft/nginx-1.18.0/conf/nginx.conf
ExecReload=/usr/local/soft/nginx-1.18.0/sbin/nginx -s reload
ExecStop=/usr/local/soft/nginx-1.18.0/sbin/nginx -s stop
PrivateTmp=true [Install]
WantedBy=multi-user.target

四,安装nginx功能的执行效果:

1,执行playbook

[root@centos8 roles]# ansible-playbook  webinstallnginx.yml

2,完成后登录到服务器,检查状态

[root@web2 sbin]# systemctl status nginx
● nginx.service - nginx-The High-performance HTTP Server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-05-14 09:24:59 UTC; 1h 18min ago
...

五,查看ansible的版本

[root@centos8 roles]# ansible --version
ansible 2.9.7
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]

ansible:安装nginx1.18.0(使用role功能)的更多相关文章

  1. centos7 安装 nginx-1.18.0 并设置开机自启动

    一.到官网下载nginx Mainline  version:  nginx主力版本,为开发版 Stable version: 稳定版,在生产环境中选择此版本进行安装 Legacy versions: ...

  2. centos8平台编译安装nginx1.18.0

    一,nginx的官网: http://nginx.org/ 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest 对应的源码 ...

  3. 手动编译部署LNMP环境(CentOS7.5+Nginx-1.18.0+MySQL-5.7.30+PHP-7.4.14)

    在平时运维工作中,经常需要用到LNMP应用框架.LNMP环境是指在Linux系统下,由Nginx + MySQL + PHP组成的网站服务器架构. 可参考前面的文章: 如何在CentOS 7上搭建LA ...

  4. nginx集群:nginx配置负载均衡集群(nginx1.18.0)

    一,nginx的负载均衡集群的特点: 1,nginx集群和lvs的不同? lvs集群:工作在第4层(传输层) nginx集群:工作在第7层(应用层) lvs集群:性能更强 nginx集群:功能更强:可 ...

  5. CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14

    准备篇: CentOS 7.0系统安装配置图解教程 http://www.osyunwei.com/archives/7829.html 一.配置防火墙,开启80端口.3306端口 CentOS 7. ...

  6. CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13

    CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.132013-10-24 15:31:12标签:服务器 防火墙 file 配置文件 written 一.配置好I ...

  7. CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法分享

    一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  8. CentOS6.7上安装nginx1.8.0

    主题: CentOS6.7上安装nginx1.8.0 环境准备: 1.gcc-c++ 示例:yum install gcc-c++ 安装:gcc-c++ gcc-c++编译工具 2.PCRE(Perl ...

  9. nginx优化:配置gzip压缩页面提高访问速度(nginx1.18.0)

    一,为什么nginx要使用gzip 1,压缩的作用: 页面使用gzip压缩之后, 页面大小可以压缩到原来的1/7左右, 传输速度和页面打开时间都可以大幅度提高, 有利于用户访问页面体验的提升 2,Ng ...

随机推荐

  1. java中包名命名规范

    在idea中创建package遇到的问题 发现一个问题,当我创建一个lesson-02的package时,输入这个包名后,package自动变成了文件夹 在网上搜索发下java包名一般是小写字母进行命 ...

  2. synchronized底层是怎么实现的?

    前言 面试的时候有被问到,synchronized底层是怎么实现的,回答的比较浅,面试官也不是太满意,所以觉得要好好总结一下,啃啃这个硬骨头. synchronized使用场景 我们在使用synchr ...

  3. oracle之三资源管理

    Oracle 资源管理 12.1 为什么要使用Oracle资源管理器 传统意义上,系统的资源分配是由OS来完成的,但是对于数据库资源,OS分配资源会带来一些问题: 以Linux为例,最为突出的一个问题 ...

  4. 吴恩达《深度学习》-课后测验-第二门课 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)-Week 1 - Practical aspects of deep learning(第一周测验 - 深度学习的实践)

    Week 1 Quiz - Practical aspects of deep learning(第一周测验 - 深度学习的实践) \1. If you have 10,000,000 example ...

  5. [LeetCode]23. 合并K个排序链表(优先队列;分治待做)

    题目 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1 ...

  6. web网站——nginx,LNMP部署03

    nginx功能: (1)web服务器: 默认网页目录为:/usr/share/nginx/html (2)反向代理服务器: nginx代替客户端访问后端服务器,后端服务器只知道是nginx的请求,并将 ...

  7. FastDFS不同步怎么破

    一.背景说明 FastDFS是一款开源的分布式文件系统,具体介绍就不说了,有兴趣的可以自行百度下. 以下是官方的架构图: 一次完整的写交互过程如下: 1.Client向Tracker查询可用的Stor ...

  8. vue-router-next 通过hash模式访问页面不生效,直接刷新页面一直停留在根路由界面的解决办法

    vue3中,配合的vueRouter版本更改为vue-router-next通过 npm i vue-router@next 的方式进行引入添加,随后创建 router.js,在main.js里面引入 ...

  9. Java中toCharArray()方法

    Java中 toCharArray() 方法详解 <Thinking in Java>Chapter11中存在下列代码 package holding; import java.util. ...

  10. 4.案例 - NIO实现TCP通信

    服务端: package cn.tedu.nio.channel; import java.net.InetSocketAddress; import java.nio.ByteBuffer; imp ...