雖然nginx也能夠經過yum安裝,可是如何使用源碼包安裝並自定義開啓一些nginx功能模塊,而且經過ansible下發到被管理集羣呢?下面給給位看官提供一個具體實例以供參考。
首先咱們須要手工編譯好一臺nginx服務器做爲模板,再採用roles角色管理的方式將其解耦,並下發到被管理集羣,具體步驟以下:
實驗環境:
ansibleserver,nginx模板:(IP:192.168.252.130 centos7)
Mysqlserver: (IP:192.168.252.173 centos7)
Webserver: (IP:192.168.252.174 centos7)
1.手工編譯安裝一臺nginx服務器,開啓功能模塊,配置好conf文件做爲模板
--------安裝依賴包-------------------
yum -y install pcre-devel zlib-devel gcc gcc-c++ //安裝編譯環境nginx
useradd -M -s /sbin/nologin nginx //建立nginx管理用戶c++
tar zxvf nginx-1.12.0.tar.gz -C /opt/ //解壓nginx源碼包(所用版本爲1.12.0)sql
-----------編譯----------------------
cd nginx-1.12.0/shell
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_modulevim
make && make installcentos
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //建立軟鏈接讓系統識別nginx命令
腳本註釋:--with-http_stub_status_module //支持狀態統計bash
2.製做nginx開機自啓動腳本
vi /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20
#description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
chmod +x /etc/init.d/nginx
chkconfig --add nginx
chkconfig --level 35 nginx on
systemctl start nginx
systemctl status nginx
至此nginx模板製做完成,下面開始編輯playbook(想了解更多nginx模塊功能及經常使用優化請看這裏 )服務器
cd /etc/ansible
cd roles/
mkdir -p {common,install}/{handlers,files,meta,tasks,templates,vars}
roles目錄下有兩個角色,common存放安裝編譯環境操做的文件,install存放安裝nginx操做的文件。
common和install內各目錄含義解釋
files:用來存放由copy模塊或script模塊調用的文件。
templates:用來存放jinjia2模板,template模塊會自動在此目錄中尋找jinjia2模板文件。
tasks:此目錄應當包含一個main.yml文件,用於定義此角色的任務列表,此文件能夠使用include包含其它的位於此目錄的task文件。
handlers:此目錄應當包含一個main.yml文件,用於定義此角色中觸發條件時執行的動做。
vars:此目錄應當包含一個main.yml文件,用於定義此角色用到的變量。
defaults:此目錄應當包含一個main.yml文件,用於爲當前角色設定默認變量。
meta:此目錄應當包含一個main.yml文件,用於定義此角色的特殊設定及其依賴關係。ide
把先前手工編譯安裝好的nginx目錄打包,並放到install角色下的files下面,以及把啓動腳本、配置文件放到templates下面
tar -czvf nginx.tar.gz --exclude "nginx.conf" --exclude "vhost" nginx/ //把除了nginx.conf 之外的文件打包命名爲nginx
mv nginx.tar.gz /etc/ansible/roles/install/files/
cd /usr/local/nginx/
cp conf/nginx.conf /etc/ansible/roles/install/templates/
cp /etc/init.d/nginx /etc/ansible/roles/install/templates/sqlserver
cd /etc/ansible/roles/common/tasks/
vim main.yml
vim /etc/ansible/roles/install/vars/main.yml
nginx_user: nginx
nginx_port: 80
nginx_basedir: /usr/local/nginx
//定義intall下的vars,將nginx管理用戶,端口,所在路徑定義爲變量方便之後調用
vim /etc/ansible/roles/install/tasks/copy.yml
name: Copy Nginx Software
copy: src=nginx.tar.gz dest=/opt/nginx.tar.gz owner=root group=root //將file文件夾下的nginx.tar.gz拷貝到/opt下,屬主爲root,所屬組爲root
vim /etc/ansible/roles/install/tasks/copy.yml
vim /etc/ansible/roles/install/tasks/main.yml
vim /etc/ansible/install.yml
至此咱們手工編譯安裝nginx的playbook已經編寫完成。
ansible-playbook nginx_install.yml --syntax -check//檢查一下腳本中的語法
沒有問題,ansible-playbook nginx_install.yml 執行劇本
而後去兩臺被管理端服務器查看nginx是否成功開啓
systemctl status nginx.service至此經過劇本實現手工編譯安裝nginx完成