背景:盡管yum和service子產品安裝和管理相應服務很友善,但實際生産中,一般需要使用源碼安裝
思路:先在一台機器上編譯安裝好nginx,打包,再用ansible分發下去
1. 建立相關目錄和配置檔案,整體樹狀圖
mkdir /etc/ansible/nginx_install
1.1 vim /etc/ansible/nginx_install/install.yml #總安裝檔案
<code>---</code>
<code>- hosts: agent.huangzp.com</code>
<code> </code><code>remote_user: root</code>
<code> </code><code>gather_facts: True</code>
<code> </code><code>roles:</code>
<code> </code><code>- common</code>
<code> </code><code>- </code><code>install</code>
<a href="https://s3.51cto.com/wyfs02/M02/8F/25/wKioL1jU2OTTHH8qAAATqOny6UE936.png" target="_blank"></a>
1.2 mkdir -p roles/commom/tasks # 安裝前準備工作目錄以及配置檔案
commom:下面建一個tasks目錄就行了
vim /etc/ansible/nginx_install/roles/common/tasks/main.yml # 入口檔案main.yml,安裝nginx依賴包
<code>- name: </code><code>install</code> <code>initaliztion require software</code>
<code> </code><code>yum: name={{ item }} state=installed</code>
<code> </code><code>with_items:</code>
<code> </code><code>- zlib-devel</code>
<code> </code><code>- pcre-devel</code>
<code> </code><code>- openssl-devel</code>
<a href="https://s4.51cto.com/wyfs02/M00/8F/27/wKiom1jU2POSpdDcAAAfGBu5N0I630.png" target="_blank"></a>
1.3 mkdir -p roles/install/{handlers,files,meta,tasks,template,vars} # 安裝主配置目錄
tasks:核心配置檔案,分發資源和安裝nginx
1)vim /etc/ansible/nginx_install/roles/install/tasks/main.yml #入口檔案,包含了 copy.yml和install.yml兩個配置檔案
<code>- include: copy.yml</code>
<code>- include: </code><code>install</code><code>.yml</code>
<a href="https://s3.51cto.com/wyfs02/M00/8F/25/wKioL1jU2SiDoGF0AAAQTECvPN8428.png" target="_blank"></a>
2) vim /etc/ansible/nginx_install/roles/install/tasks/copy.yml #拷貝壓縮包、解壓縮、拷貝啟動腳本、拷貝配置檔案
<code>- name: copy nginx software</code>
<code> </code><code>copy: src=nginx.</code><code>tar</code><code>.gz dest=</code><code>/tmp/nginx</code><code>.</code><code>tar</code><code>.gz owner=root group=root </code><code>#copy子產品相對目錄files</code>
<code>- name: uncompression nginx software</code>
<code> </code><code>shell: </code><code>tar</code> <code>zxf </code><code>/tmp/nginx</code><code>.</code><code>tar</code><code>.gz -C </code><code>/usr/local/</code>
<code>- name: copy nginx start script</code>
<code> </code><code>template: src=nginx dest=</code><code>/etc/init</code><code>.d</code><code>/nginx</code> <code>owner=root group=root mode=0755 </code><code>#template子產品相對目錄templates</code>
<code>- name: copy nginx config</code>
<code> </code><code>template: src=nginx.conf dest={{ nginx_basedir }}</code><code>/conf/</code> <code>owner=root goup=root mode=0644</code>
<a href="https://s1.51cto.com/wyfs02/M01/8F/27/wKiom1jU2TnClAIRAAA5lkJWNO8362.png" target="_blank"></a>
3)vim /etc/ansible/nginx_install/roles/install/tasks/install.yml # 建立運作使用者、啟動nginx服務、添加至系統服務、删除壓縮檔案
<code>- name: create nginx user</code>
<code> </code><code>user: name={{ nginx_user }} state=present createhome=no shell=</code><code>/sbin/nologin</code>
<code>- name: start nginx service</code>
<code> </code><code>service: name=nginx state=started</code>
<code>- name: add boot start nginx service</code>
<code> </code><code>shell: chkconfig --level 345 nginx on</code>
<code>- name: delete nginx compression files</code>
<code> </code><code>shell: </code><code>rm</code> <code>-rf </code><code>/tmp/nginx</code><code>.</code><code>tar</code><code>.gz</code>
<a href="https://s1.51cto.com/wyfs02/M01/8F/25/wKioL1jU2UnzePDCAAAvG-MSXLI600.png" target="_blank"></a>
vars:定義變量
vim /etc/ansible/nginx_install/roles/install/vars/main.yml #定義變量運作使用者、端口、安裝目錄
<code>nginx_user: www</code>
<code>nginx_port: 80</code>
<code>nginx_basedir: </code><code>/usr/local/nginx</code>
<a href="https://s5.51cto.com/wyfs02/M01/8F/27/wKiom1jU2VeicNhaAAAVMaVLf38181.png" target="_blank"></a>
files:存放nginx.tar.gz等檔案
tar -zcf nginx.tar.gz /usr/local/nginx
cp /usr/local/nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/
templates:模闆配置檔案,如啟動腳本模闆
cp /usr/local/nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/template/
cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/template/
handlers:發生改變要執行的操作,如配置檔案改變,則重新開機服務
meta:說明資訊,角色依賴等,一般用不着
2. 執行總配置檔案ansible-playbook install.yml
本文轉自 huangzp168 51CTO部落格,原文連結:http://blog.51cto.com/huangzp/1910084,如需轉載請自行聯系原作者