背景:尽管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,如需转载请自行联系原作者