Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(一)--技术流ken

news/2024/5/9 9:33:08/文章来源:https://blog.csdn.net/weixin_34265814/article/details/93464495

 

 

前言

 

截止目前已经写了《Ansible基础认识及安装使用详解(一)--技术流ken》,《Ansible常用模块介绍及使用(二)--技术流ken》《Ansible剧本介绍及使用演示(三)--技术流ken》以及《Git介绍及常用操作演示(一)--技术流ken》,《Gitlab在linux/windows中免密使用(二)--技术流ken》等五篇有关ansible和git系列文章,相信看过我的这几篇博客的小伙伴已经充分掌握了如何使用ansible剧本完成自动化批量管理,以及使用git实现持续化。现在我们来做一个实际项目,来加深我们对这两个非常重要的工具的理解吧。

 

项目需求

 

为了增加项目的难度,特地要求使用role,以及templates来完成该项目。

1. 在gitlab中创建一个项目 nginxinstall
2. 编写playbook,实现一键部署nginx、部署一个静态测试页、测试部署结果
要求:
部署nginx
端口:83
运行身份:root
设置并发连接数:2048
主机名:当前节点的主机名
根目录:/vaw/www/html

其他要求:
部署两个以上节点
用role
用templates

3. 将写好的playbook保存到gitlab仓库中

 

项目实现1

 

为了让大家更方便阅读,上述项目我分为三个部分,每个部分完成一个要求,现在开始吧。

1. 在gitlab中创建一个项目 nginxinstall

这个应该对我们来说很简单了,所以我就不再细说

第一步:打开我们gitlab的web页面添加项目即可

点击create project即可完成项目的创建

roles使用详解

 

role介绍

roles 用于层次性、结构化地组织playbook。
roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等。
要使用roles只需要在playbook中使用include指令即可。
简单来讲,roles就是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。

 

创建 roles 的步骤

(1) 创建以包含roles命名的目录,例如/tmp/ken/roles/;
(2) 在roles目录中分别创建以各角色名称命名的目录,如nginx等
(3) 在每个角色命名的目录中(及nginx中)分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以创建为空目录,也可以不创建例如:mkdir /tmp/ken/roles/nginx/{files,handlers,meta,tasks,templates,vars};
(4) 在roles同级目录中创建playbook文件,调用各角色例如:touch /tmp/ken/palybook.yml;

 

roles 内各目录中可用的文件

tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用include包含其它的位于此目录中的task文件;
files目录:存放由copy或script等模块调用的文件;
templates目录:template模块会自动在此目录中寻找j2模板文件;
handlers目录:此目录中应当包含一个main.yml文件,用于定义此角色用到的各handler;在handler中使用include包含的其它的handler文件也应该位于此目录中;
vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量;
meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3及其以后的版本才支持;
default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件。

 

项目实现2

 

第一步:创建目录

可以选择全部创建,也可以只创建你需要的,没有用到的为空即可

注意剧本和roles都在ken下

[root@ken ~]# mkdir /tmp/ken/roles/nginx/{tasks,handlers,files,vars,templates,meta,default} -pv

 

第二步:编辑hosts文件

即把需要管理的节点ip写进去

[root@ken ken]# vim /etc/ansible/hosts 
[ken]
10.220.5.139
10.220.5.138

 

第三步:编辑roles下面的tasks文件

写入如下信息

[root@ken ken]# cat /tmp/ken/roles/nginx/tasks/main.yml
- yum: name=nginx state=present
- template: src=/tmp/ken/roles/nginx/templates/nginx.j2 dest=/etc/nginx/nginx.conf
- service: name=nginx state=restarted
- copy: src=/tmp/ken/roles/nginx/files/index.html dest=/var/www/html/index.html

 

第四步:准备测试文件

[root@ken ~]# echo "test for static web"> /tmp/ken/roles/nginx/files/index.html

 

第五步:编辑vars变量文件

[root@ken ~]# cat /tmp/ken/roles/nginx/vars/main.yml
port: 83
user: root
conn: 2048
hostname: ken
dire: /var/www/html 

 

第六步;编辑templates模版文件

 把nginx的配置文件复制到template目录下并改名为nginx.j2,结尾一定要是j2

[root@server ken]# cp /etc/nginx/nginx.conf /tmp/ken/roles/nginx/templates/nginx.j2

需要把修改的部分更改为变量

[root@server roles]# grep -v -E "^#|^$" nginx/templates/nginx.j2
user {{ user }};      #定义成变量
worker_processes auto;    
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {worker_connections {{ conn }}; #变量
}
http {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  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 2048;include             /etc/nginx/mime.types;default_type        application/octet-stream;# include /etc/nginx/conf.d/*.conf;server {listen       {{ port }};  #变量server_name  {{ hostname }};  #变量root         {{ dire }};  #变量index index.html;# Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;location / {}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
}

 

第七步:在roles同级目录下创建剧本

一定要和roles在同一个目录下创建

[root@server ken]# cd /tmp/ken/
[root@server ken]# ls
hosts  roles
[root@server ken]# vim test.yml
[root@server ken]# cat test.yml 
- hosts: allroles:- nginx  #即roles下面的一级目录

 

第八步:执行剧本

[root@server ken]# ansible-playbook test.yml PLAY [all] **************************************************************************************************************TASK [Gathering Facts] **************************************************************************************************
ok: [172.20.10.7]
ok: [172.20.10.2]TASK [nginx : yum] ******************************************************************************************************
ok: [172.20.10.2]
ok: [172.20.10.7]TASK [nginx : template] *************************************************************************************************
ok: [172.20.10.7]
changed: [172.20.10.2]TASK [nginx : service] **************************************************************************************************
changed: [172.20.10.7]
changed: [172.20.10.2]TASK [nginx : copy] *****************************************************************************************************
changed: [172.20.10.2]
changed: [172.20.10.7]PLAY RECAP **************************************************************************************************************
172.20.10.2                : ok=5    changed=3    unreachable=0    failed=0   
172.20.10.7                : ok=5    changed=2    unreachable=0    failed=0   

 

第九步:查看是否执行成功

直接访问节点页面即可

因为我们更改了端口为83,不再是默认端口80了,所以访问页面时需要指定83端口

测试成功

 

 

 

项目实现3

这一步是将我们写好的playbook保存在仓库中,其实严格来做的话这一步一定是在项目2开始之前就要做的,我们需要在工作目录之下来写这些文件,文件更改之后上传即可。

第一步:打开gitlab找到ssh地址

 

第二步:下载仓库内容

[root@ken kl]# git clone git@10.220.5.137:webs/nginxinstall.git
[root@ken kl]# ls
nginxinstall

 

第三步:进入nginxinstall项目工作目录下

查看git几个区 的状态

[root@ken kl]# cd nginxinstall/
[root@ken nginxinstall]# ls -a
.  ..  .git
[root@ken nginxinstall]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

 

第四步:复制文件到该目录下并提交

[root@ken nginxinstall]# cp /tmp/ken -a ./
[root@ken nginxinstall]# ls
ken
[root@ken nginxinstall]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    ken/
nothing added to commit but untracked files present (use "git add" to track)
[root@ken nginxinstall]# git add ken     #加入到缓存区
[root@ken nginxinstall]# git commit -m "v1: nginx"      #提交到仓库
[master (root-commit) 78bc6c3] v1: nginx8 files changed, 196 insertions(+)create mode 100644 ken/hostscreate mode 100644 ken/roles/nginx/files/index.htmlcreate mode 100644 ken/roles/nginx/tasks/main.ymlcreate mode 100644 ken/roles/nginx/template/nginx.confcreate mode 100644 ken/roles/nginx/template/nginx.j2create mode 100644 ken/roles/nginx/vars/main.ymlcreate mode 100644 ken/test.retrycreate mode 100644 ken/test.yml

 

第五步:推送至远程仓库

[root@ken nginxinstall]# git push origin master
Counting objects: 20, done.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (19/19), 2.25 KiB | 0 bytes/s, done.
Total 19 (delta 1), reused 0 (delta 0)
To git@10.220.5.137:webs/nginxinstall.git838ee6a..57ec0b9  master -> master

 

第六步:在web端查看推送结果

发现推送完成

 

转载于:https://www.cnblogs.com/kenken2018/p/9991475.html

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

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

相关文章

结合html5+_干货整理!零基础html5网站开发学习步骤方法(保存不后悔)

对于新手学习html5的同学来说&#xff0c;想要学好html5首先要有一点学习的方法和路线图&#xff0c;了解清楚之后再开始学习会更加清晰自己的学习效果。随着互联网的高速发展&#xff0c;近年来HTMl5发展的越来越火热&#xff0c;而在HTML5高薪资、优待遇的诱惑之下&#xff0…

高性能高并发网站架构,教你搭建Redis5缓存集群

一、Redis集群介绍 Redis真的是一个优秀的技术&#xff0c;它是一种key-value形式的NoSQL内存数据库&#xff0c;由ANSI C编写&#xff0c;遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 Redis最大的特性是它会将所…

新奇小玩意购物网站推荐

在国外博客上看到许多小玩意的介绍&#xff0c;有不少都有收入囊中的冲动&#xff0c;但相信有不少人都像我一样因为国际支付的问题而难以如愿吧&#xff0c;今天就向大家推荐两个国内专门销售这类小玩意的购物网站&#xff0c;IdeaShow、呼哈网。[more]IdeaShow和呼哈网的slog…

CMP网站改版-加强网络功能

CMP是最大的专业媒体集团之一&#xff0c;旗下拥有DDJ,SD&#xff0c;CUJ,<MSDN等多本优秀的软件技术杂志。现在其网站作了全面的改版&#xff0c;原来各个独立的杂志网站现在统一风格&#xff0c;统一注册用户&#xff0c;显示CMP在加强杂志在网络上的互动建设&#xff1b;…

【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

一、反向代理&#xff1a;Web服务器的“经纪人” 1.1 反向代理初印象 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;并将从服务器上得到的结果返回给internet上请…

【问底】李平:大型网站的灵魂——性能

在前一篇随笔 大型网站系统架构的演化中&#xff0c;介绍了大型网站的演化过程&#xff0c;期间穿插了一些技术和手段&#xff0c;我们可以从中看出一个大型网站的轮廓&#xff0c;但想要掌握设计开发维护大型网站的技术&#xff0c;需要我们一步一步去研究实践。所以我打算写一…

【问底】徐汉彬:大规模网站架构的缓存机制和几何分形学

在过去的工作中&#xff0c;徐汉彬从事各类缓存建设和优化&#xff0c;遇到问题无数&#xff0c;从各种各样的问题中&#xff0c;逐渐总结出它们之间的“共性”&#xff0c;而这个“共性”又优雅地遵循“几何分形学”。从几何分形的角度去看待缓存机制&#xff0c;能够更容易和…

10个学习Android开发的网站推荐

作为一个Android 开发者&#xff0c;官网的资料当然不可错过&#xff0c;从设计&#xff0c;培训&#xff0c;指南&#xff0c;文档&#xff0c;都不应该错过&#xff0c;在以后的学习过程中慢慢理解体会。 Android DeveloperAndroid Guides - CodePath CodePath 是国外一个技术…

某大神网站发现2048一枚

在论坛发现2048的C语言的源代码。 真心佩服大神的创作。 复制一起学习。 ////Console2048://C语言写的一个手机游戏2048的控制台版。//作者&#xff1a;0xAA55//QQ&#xff1a;838816058//论坛&#xff1a;www.技术宅的结界.com//2048原版作者&#xff1a;//Gabriele Cirulli…

分分钟搞定Wordpress网站HTTPS升级

序 自从浏览器开始主动提示网站不安全开始&#xff0c;我就一直想找机会把博客站aTechie做一下升级&#xff0c;终于……终于这次找到机会了&#xff08;太懒了&#xff0c;哈哈哈&#xff09;。 关于HTTPS 先用一张图片来直观展现HTTPS的原理 简单的说&#xff0c;HTTPS的…

ecs 对比 本地服务器_阿里云服务器建站、心选建站、定制建站有什么区别,如何选择...

使用阿里云建网站的三种方式购买云服务器手动建站、云速成美站模板建站或者选择阿里云定制建站三种方式&#xff0c;下面为你们分享利用阿里云建立网站的三种方式及优点对比&#xff1a;服务器阿里云建站方法汇总网站使用阿里云建站能够有三种方式&#xff0c;阿里云第一种是购…

JS--网站统计中的数据收集原理及实现

来源&#xff1a;http://blog.codinglabs.org/articles/how-web-analytics-data-collection-system-work.html 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具&#xff0c;比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访…

某个在线学习网站提交学习进度的方式

没到月底&#xff0c;领导要求我们完成公司网站的学习进度&#xff0c;于是想搞清楚这个在线学习网站更新学习进度的方法&#xff0c;可以快速更新学习进度&#xff0c;算是解决了学习任务的紧迫性。一开始看到一个按键&#xff0c;当学习快结束是&#xff0c;网站会提示”我已…

网站用户登录过程中的cookie的作用

测试一个学习平台项目时&#xff0c;需要验证用户账号是否可以正常登录。使用jmeter工具测试&#xff0c;fiddler辅助查看请求和响应消息。 开始的想法很简单&#xff0c;在登录页面查看到&#xff0c;点击登录按键会出发一个POST请求&#xff0c;想通过jmeter模拟post请求&am…

网站jar包功能分析

agileggfw.agilemgr.jar包引用了HibernateTransactionManager和FreeMarkerViewResolver 还不清楚做什么的 agileggfw.captcha.jar包引用jcaptcha-1.0.jar&#xff0c;作用是生成验证码&#xff1a; JCaptcha 简介 <?xml version"1.0" encoding"UTF-8&qu…

网站引导功能实现

网站新上线一个功能&#xff0c;往往会有一些引导功能&#xff0c;其实很简单&#xff0c;就是一些做好的图片通过css,js控制&#xff0c;拼接在一起。 上一些来自百度网的截图&#xff0c;一看就明白。

每个软件开发人员都应关注的7个网站

1. DEV社区 这是一个伟大的网站&#xff0c;可以随时了解最新技术以及下一轮繁荣。您可以关注自己感兴趣的主题。文章和视频的供稿将根据您的喜好生成。 只需访问网站并搜索您想要探索的技术和概念。您将获得许多相同的文章&#xff0c;视频和播客教程。它的技术新闻版块将使您…

测试基于php的购物网站,基于ThinkPHP开发的购物网站-微淘淘开发笔记

历经半个多月的断断续续的编写&#xff0c;一款基于ThinkPHP的购物网站开发完成并完成了初步的测试检测与修复&#xff0c;这款程序可以称之为到现在为止完全我自己独立编写完成的最大规模的一个 PHP 程序&#xff0c;为其起名叫做微淘淘&#xff0c;随便起的。由于使用的 TP 开…

html页面去空白页,通过Iframe在A网站页面内嵌入空白页面的方式,跨域获取B网站的数据返回给A网站!_html/css_WEB-ITnose...

以下代码只是为演示该方法具体是如何操作的&#xff0c;实际的意义并不大。其实这个方法还可以解决很多方面的跨域操作&#xff0c;以下两点为我工作中遇到的情况&#xff01;比如A系统中打开B系统页面的时候&#xff0c;获取B系统页面高度&#xff0c;A系统中可以动态设置窗口…

程序员本地网站

这道题要求从本地访问&#xff0c;打开burpsuite抓包&#xff0c;加上&#xff1a;X-Forwarded-For: 127.0.0.1 就好了 X-Forwarded-For: 简称XFF头&#xff0c;它代表客户端&#xff0c;也就是HTTP的请求端真实的IP&#xff0c;只有在通过了HTTP 代理或者负载均衡服务器时才会…