Saltstack批量编译部署nginx(多模块)

最近一直在研究saltstack的同步文件和批量执行命令,随着架构的变大,批量部署的需求也变得明显起来了,我需要用一条命令就部署好nginx和tomcat,并且符合我所有的环境需求,可以直接投入生产环境使用,这就需要用到saltstack的批量安装部署功能了。这篇文章主要介绍nginx的批量部署,下篇讲解tomcat多实例的批量部署方法。

环境介绍:

Centos 6.5

salt 2015.5.10

nginx 1.12.0

minion:test

1.修改master配置文件,修改后重启服务,因为saltstack是用python写的,所以所有配置文件缩进和空格必须和文中一致!

mkdir -p /srv/salt

vim /etc/salt/master

  file_roots:    #前面必须有俩空格,下面缩进同理    
    base:      
      - /srv/salt/

2.主入口文件top.sls

vim /srv/salt/top.sls

 base:    
   ‘test‘:    #只作用于test这台minion      
     - nginx.init    #使用nginx下的init.sls文件进行初始化

3.创建nginx目录

mkdir -p /srv/salt/nginx/files    #用于存放模块和配置文件

mkdir -p /srv/salt/soft/    #用于存放模块的安装方法

cd /srv/salt/nginx && tree

4.编辑初始化文件init.sls

vim /srv/salt/nginx/init.sls

 include:  
   - nginx.install    #包含nginx下的install.sls

5.编辑安装部署文件install.sls

vim /srv/salt/nginx/install.sls

include:
  - soft.modules        #包含模块配置文件
#nginx.tar.gz
nginx_source:
  file.managed:
    - name: /tmp/nginx-1.12.0.tar.gz        #标识文件所在位置
    - unless: test -e /tmp/nginx-1.12.0.tar.gz    #检测文件是否存在,只在第一次检测
    - source: salt://nginx/files/nginx-1.12.0.tar.gz    #把maser上的文件传过去
#extract
extract_nginx:
  cmd.run:
    - cwd: /tmp        #进入/tmp目录
    - names:
      - tar zxvf nginx-1.12.0.tar.gz        #解压
    - unless: test -d /tmp/nginx-1.12.0.tar.gz
    - require:
      - file: nginx_source        #这个命令必须在上面的函数执行成功后才继续执行
#user
nginx_user:
  user.present:        #用户创建
    - name: nginx
    - createhome: False        #不用家目录
    - gid_from_name: True
    - shell: /sbin/nologin        #指定shell
#nginx_pkgs
nginx_pkg:
  pkg.installed:        #安装必备组件
    - pkgs:
      - gcc
      - gcc-c++
      - epel-release
      - openssl-devel
      - pcre-devel
      - zlib-devel
      - gd-devel
      - lua-devel
#nginx_compile
nginx_compile:        #nginx进行编译
  cmd.run:
    - cwd: /tmp/nginx-1.12.0
    - names:
      - ./configure --prefix=/usr/local/nginx  --user=nginx  --group=nginx --with-file-aio
       --with-http_ssl_module --with-http_realip_module --with-http_addition_module 
       --with-http_image_filter_module --with-http_gzip_static_module 
       --with-http_stub_status_module --with-mail --with-mail_ssl_module 
       --with-pcre --with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib 
       --with-http_sub_module --add-module=/soft/ngx_cache_purge-2.3 
       --add-module=/soft/ngx_devel_kit-0.3.0rc1 
       --add-module=/soft/echo-nginx-module-master 
       --add-module=/soft/lua-nginx-module-master && make && make install
    - require:
      - cmd: extract_nginx
      - pkg:  nginx_pkg
    #- unless: test -d /usr/local/nginx/    #检测或不检测目录是否存在
#cache_dir
cache_dir:
  cmd.run:
    - names:        #创建虚拟主机目录,把nginx目录权限给相关用户
      - mkdir -p /usr/local/nginx/conf/vhosts && chown -R nginx.nginx /usr/local/nginx/
    - require:
      - cmd: nginx_compile
    - unless: test -d /usr/local/nginx/conf/vhosts/
  #vhosts
  file.managed:
    - name: /usr/local/nginx/conf/nginx.conf    #修改后的配置文件复制过去
    - source: salt://nginx/files/nginx.conf
    #- unless: test -e /usr/local/nginx/conf/nginx.conf    #建议不进行检测,如果检测,有这个文件将不会进行更新

/usr/local/nginx/conf/proxy.conf:
  file.managed:
    - name: /usr/local/nginx/conf/proxy.conf
    - source: salt://nginx/files/proxy.conf
    #- unless: test -e /usr/local/nginx/conf/proxy.conf

5.编辑模块配置文件

vim /srv/salt/soft/modules.sls

echo-install:        #每个文件管理必须配置不同的名字,缩进必须一致,name:和source:后面的空格必须有!
  file.managed:
    - name: /soft/echo-nginx-module-master.zip
    - source: salt://nginx/files/echo-nginx-module-master.zip
    - user: root        #用户指定可有可无
    - group: root
    - mode: 755        #权限指定可有可无

  cmd.run:
    - name: cd /soft && unzip echo-nginx-module-master.zip
    - unless: test -d /soft/echo-nginx-module-master

lua-install:
  file.managed:
    - name: /soft/lua-nginx-module-master.zip
    - source: salt://nginx/files/lua-nginx-module-master.zip

  cmd.run:
    - name: cd /soft && unzip lua-nginx-module-master.zip
    - unless: test -d /soft/lua-nginx-module-master

purge-install:
  file.managed:
    - name: /soft/ngx_cache_purge-2.3.tar.gz
    - source: salt://nginx/files/ngx_cache_purge-2.3.tar.gz
    
  cmd.run:
    - name: cd /soft && tar xvf ngx_cache_purge-2.3.tar.gz
    - unless: test -d /soft/ngx_cache_purge-2.3

devel-install:
  file.managed:
    - name: /soft/ngx_devel_kit-0.3.0rc1.tar.gz
    - source: salt://nginx/files/ngx_devel_kit-0.3.0rc1.tar.gz

  cmd.run:
    - name: cd /soft && tar xvf ngx_devel_kit-0.3.0rc1.tar.gz
    - unless: test -d /soft/ngx_devel_kit-0.3.0rc1

6.执行同步推送

salt ‘test‘ state.highstate

观察是否全部为success,如果有fail,查看具体失败原因,解决问题后可继续推送

时间: 2024-12-26 12:44:57

Saltstack批量编译部署nginx(多模块)的相关文章

Saltstack批量部署tomcat(多实例)

上一篇讲解了如何批量部署nginx,这篇说一说如何批量部署tomcat,其实方式上都差不多,tomcat多了个java必须配置,以及需要多个实例一起部署.方式方法上可能不是最优方案,功能上是都可以实现基本需求的. 环境介绍: Centos 6.5 tomcat 7.0.68 java 1.7.0_80 实例3个,site.aaa.com|boss.aaa.com|mobile.aaa.com minion:test 1.修改主入口文件,如何你看不懂其中没标注的一些行,请参考<Saltstack批

debian完整部署 Nginx + uWSGI + Django

debian完整部署 Nginx + uWSGI + Django 手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供的服务器包用apt-get这种方式安装的.这种方式比较简单,但没有新版本. 另外就是使用源代码自己编译安装,这种比较繁琐,但能选择适合的版本安装. 这里介绍的是第二种,使用源代码编译的版本进行安装部署. 部署测试环境: - wind

saltstack部署nginx进阶

上一篇其实对通过saltstack部署nginx做了演示,但是可能与我目前的环境还是有点出入,然后sls的结构也不太清晰,所以就又做了改变和优化,叫做进阶可能有点噱头了,不过还是记录如下: nginx安装目标: 1)安装必要依赖 2)准备pcre安装包 2)源码安装pcre 3)准备nginx安装包 4)源码安装nginx nginx配置: 1)拷贝nginx.conf配置文件 2)拷贝启停脚本 3)添加系统服务并设置开机启动 4)拷贝日志切割脚本 5)添加定时任务 salt master上的目

自动化运维系列之SaltStack批量部署Apache服务

自动化运维系列之SaltStack批量部署Apache服务 saltstack原理 SalStack由master和minion构成,master是服务端,表示一台服务器:minion是客户端,表示多台服务器.在Master上发送命令给符合条件的minion,Minion就会执行相应的命令.Master和Minion之间是通过ZeroMQ(消息队列)进行通信的. SaltStack的Master端的监听端口是4505和4506,4505端口是Master和Minion认证通信端口:4506端口是

mac下Nginx+lua模块编译安装

Nginx的nb之处就不说了,lua也是一个小巧的脚本语言,由标准C编写而成,几乎可以运行在所有的平台上,也非常强大,其他特性请自行度娘.nginx_lua_module是由淘宝的工程师清无(王晓哲)和春来(章亦春)所开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力 http://wiki.nginx.org/HttpLuaModule 下面说说mac下Nginx如何编译集成nginx_lua_module模块 1. 下载nginx需

使用SaltStack部署Nginx

规划: 1.编译安装nginx 2.实现配置文件.服务.用户.日志切割.虚拟主机的自动部署 3.针对不同客户端资源配置的不同,利用grains实现可变配置 4.利用pillar实现客户端功能区别配置 环境: master: 192.168.111.129(Hostname: Server2) client: 192.168.111.128(Hostname: Server1) (这里是ID标识,为了实现配置不同的需要) 配置仓库根目录: [[email protected] ~]# vim /e

nginx-如何将自己的HTTP模块编译进nginx

上一篇博客讲解了nginx相关的数据结构. 这一篇主要交接如何将自己的模块编译进nginx: 一种常用的简单方法: 1)首先把源代码文件全部放大一个目录下,然后在改目录中编写一个config用于通知Nginx如何编译本模块,这个文件名必须为config. 在configure脚本执行时加入参数--add-module=PATH(上面源码,config的保存目录) 执行正常安装流程是完成Nginx的编译工作. ps:还有一种复杂方式,就是修改configure脚本执行后生成的obj/Makefil

ansible 发部署nginx以及更新、回滚

ansible 发部署nginx以及更新.回滚 ansible 和 saltstack 一样都是基于 Python 开发的,是比 puppet 和 saltstack 更轻量级的运维自动化工具. 一:安装ansible  开启俩台centos Master 192.168.0.6 Slave 192.168.0.8 二:编辑vim /etc/hosts 三:安装 ansible [[email protected] /]# yum install -y epel-release [[email 

运维工具SaltStack之一安装部署

运维工具SaltStack之一安装部署 一.概述 salt是一个异构平台基础设置管理工具,使用轻量级的通讯器ZMQ,用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,通常叫做Salt State System. 二.基本原理 采用C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信.minion上