共计 5085 个字符,预计需要花费 13 分钟才能阅读完成。
最近一直在研究 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 403 forbidden 的解决办法 http://www.linuxidc.com/Linux/2017-08/146084.htm
CentOS 7 下 Nginx 服务器的安装配置 http://www.linuxidc.com/Linux/2017-04/142986.htm
CentOS 上安装 Nginx 服务器实现虚拟主机和域名重定向 http://www.linuxidc.com/Linux/2017-04/142642.htm
CentOS 6.8 安装 LNMP 环境(Linux+Nginx+MySQL+PHP)http://www.linuxidc.com/Linux/2017-04/142880.htm
Linux 下安装 PHP 环境并配置 Nginx 支持 php-fpm 模块 http://www.linuxidc.com/Linux/2017-05/144333.htm
Nginx 服务的 SSL 认证和 htpasswd 认证 http://www.linuxidc.com/Linux/2017-04/142478.htm
Ubuntu 16.04 上启用加密安全的 Nginx Web 服务器 http://www.linuxidc.com/Linux/2017-07/145522.htm
Nginx 会话保持之 nginx-sticky-module 模块 http://www.linuxidc.com/Linux/2017-09/146776.htm
使用 Nginx 制作内网 yum 镜像代理 http://www.linuxidc.com/Linux/2017-08/146598.htm
CentOS 7.2 下 Nginx+PHP+MySQL+Memcache 缓存服务器安装配置 http://www.linuxidc.com/Linux/2017-03/142168.htm
CentOS6.9 编译安装 Nginx1.4.7 http://www.linuxidc.com/Linux/2017-06/144473.htm
Nginx 的详细介绍 :请点这里
Nginx 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-09/147034.htm