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,查看具体失败原因,解决问题后可继续推送。
Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里