1.31 playbook安装nginx
1、下发文件目录准备
思路:先在一台机器上编译安装好nginx、打包,然后再用ansible去下发
cd /etc/ansible 进入ansible配置文件目录
mkdir nginx_install 创建一个nginx_install的目录,方便管理
cd nginx_install
mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}
说明:roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作。
每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。
files为安装时用到的一些文件,
meta为说明信息,说明角色依赖等信息,
tasks里面是核心的配置文件,
templates通常存一些配置文件,启动脚本等模板文件,
vars下为定义的变量
[root@Dasoncheng ~]# cd /etc/ansible/
[root@Dasoncheng ansible]# mkdir nginx_install && cd nginx_install
[root@Dasoncheng nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}
[root@Dasoncheng nginx_install]# ls
roles
[root@Dasoncheng nginx_install]# ls roles/
common install
[root@Dasoncheng nginx_install]# ls roles/common/
files handlers meta tasks templates vars
[root@Dasoncheng nginx_install]# ls roles/install/
files handlers meta tasks templates vars
2、安装文件准备
需要事先准备好安装用到的文件,具体如下:
在一台机器上事先编译安装好nginx,配置好启动脚本,配置好配置文件
安装好后,我们需要把nginx目录打包,并放到/etc/ansible/nginx_install/roles/install/files/下面,名字为nginx.tar.gz
启动脚本、配置文件都要放到/etc/ansible/nginx_install/roles/install/templates下面
cd /etc/ansible/nginx_install/roles
定义common的tasks,nginx是需要一些依赖包的
vim ./common/tasks/main.yml //内容如下,这里用到了循环 但使用过程中会报错,我就在下面直接yum: name="zlib-devel,pcre-devel" state=installed 这样安装了;
- name: Install initializtion require software
yum: name={{ item }} state=installed
with_items:
- zlib-devel
- pcre-devel
[root@Dasoncheng ~]# cd /usr/local/
[root@Dasoncheng local]# tar -zcvf nginx.tar.gz --exclude "ngin.conf" --exclude "vhosts" nginx/
[root@Dasoncheng local]# cp nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/nginx.tar.gz ##拷贝安装目录
[root@Dasoncheng local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/nginx ##拷贝启动脚本
[root@Dasoncheng local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/nginx.conf ##拷贝配置文件
[root@Dasoncheng local]# vim /etc/ansible/nginx_install/roles/common/tasks/main.yml
[root@Dasoncheng local]# cat /etc/ansible/nginx_install/roles/common/tasks/main.yml
---
- name: install initaliztion require software
yum: name="zlib-devel,pcre-devel" state=installed
3、定义变量并拷贝文档
定义变量
vim /etc/ansible/nginx_install/roles/install/vars/main.yml //内容如下
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx
首先要把所有用到的文档拷贝到目标机器
vim /etc/ansible/nginx_install/roles/install/tasks/copy.yml //内容如下
- name: Copy Nginx Software
copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: Uncompression Nginx Software
shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/
- name: Copy Nginx Start Script
template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: Copy Nginx Config
template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
[root@Dasoncheng roles]# vim install/vars/main.yml ##定义变量
[root@Dasoncheng roles]# cat install/vars/main.yml
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx
[root@Dasoncheng roles]# vim install/tasks/copy.yml ##拷贝文档
[root@Dasoncheng roles]# cat !$
cat install/tasks/copy.yml
- name: copy nginx software
copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: uncopression nginx software
shell: tar -zxf /tmp/nginx.tar.gz -C /usr/local/
- name: copy nginx start script
template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: copy nginx config
template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
4、建立用户等
接下来会建立用户,启动服务,删除压缩包
vim /etc/ansible/nginx_install/roles/install/tasks/install.yml //内容如下
- name: Create Nginx User
user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: Start Nginx Service
shell: /etc/init.d/nginx start
- name: Add Boot Start Nginx Service
shell: chkconfig --level 345 nginx on
- name: Delete Nginx compression files
shell: rm -rf /tmp/nginx.tar.gz
[root@Dasoncheng roles]# vim install/tasks/install.yml
[root@Dasoncheng roles]# cat !$
cat install/tasks/install.yml
- name: create nginx user
user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: start nginx service
shell: /etc/init.d/nginx start
- name: add boot start nginx service
shell: chkconfig --level 345 nginx on
- name: delete nginx compression files
shell: rm -f /tmp/nginx.tar.gz
5、创建mail.yml调用copy和install
再创建main.yml并且把copy和install调用
vim /etc/ansible/nginx_install/roles/install/tasks/main.yml //内容如下
- include: copy.yml
- include: install.yml
到此两个roles:common和install就定义完成了,接下来要定义一个入口配置文件
vim /etc/ansible/nginx_install/install.yml //内容如下
---
- hosts: testhost
remote_user: root
gather_facts: True
roles:
- common
- install
执行: ansible-playbook /etc/ansible/nginx_install/install.yml
[root@Dasoncheng roles]# vim install/tasks/main.yml
[root@Dasoncheng roles]# cat !$
cat install/tasks/main.yml
- include: copy.yml
- include: install.yml
[root@Dasoncheng roles]# cd ..
[root@Dasoncheng nginx_install]# pwd
/etc/ansible/nginx_install
[root@Dasoncheng nginx_install]# vim install.yml
[root@Dasoncheng nginx_install]# cat !$
cat install.yml
---
- hosts: rs
remote_user: root
gather_facts: true
roles:
- common
- install
执行结果:
[root@Dasoncheng local]# ansible-playbook /etc/ansible/nginx_install/install.yml
PLAY [rs] ********************************************************************************************
TASK [Gathering Facts] *******************************************************************************
ok: [cdn002]
ok: [cdn003]
TASK [common : install initaliztion require software] ************************************************
ok: [cdn002]
ok: [cdn003]
TASK [install : copy nginx software] *****************************************************************
changed: [cdn003]
changed: [cdn002]
TASK [install : uncopression nginx software] *********************************************************
[WARNING]: Consider using the unarchive module rather than running tar. If you need to use command
because unarchive is insufficient you can add warn=False to this command task or set
command_warnings=False in ansible.cfg to get rid of this message.
changed: [cdn003]
changed: [cdn002]
TASK [install : copy nginx start script] *************************************************************
ok: [cdn002]
ok: [cdn003]
TASK [install : copy nginx config] *******************************************************************
ok: [cdn002]
ok: [cdn003]
TASK [install : create nginx user] *******************************************************************
ok: [cdn002]
ok: [cdn003]
TASK [install : start nginx service] *****************************************************************
changed: [cdn002]
changed: [cdn003]
TASK [install : add boot start nginx service] ********************************************************
changed: [cdn002]
changed: [cdn003]
TASK [install : delete nginx compression files] ******************************************************
[WARNING]: Consider using the file module with state=absent rather than running rm. If you need to
use command because file is insufficient you can add warn=False to this command task or set
command_warnings=False in ansible.cfg to get rid of this message.
changed: [cdn002]
changed: [cdn003]
PLAY RECAP *******************************************************************************************
cdn002 : ok=10 changed=5 unreachable=0 failed=0
cdn003 : ok=10 changed=5 unreachable=0 failed=0
机器cdn002查看:
[root@Dason02 tmp]# ps aux |grep nginx
root 11526 0.0 0.0 20500 620 ? Ss 17:55 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody 11527 0.0 0.3 22944 3208 ? S 17:55 0:00 nginx: worker process
nobody 11528 0.0 0.3 22944 3208 ? S 17:55 0:00 nginx: worker process
root 11654 0.0 0.1 112664 968 pts/1 S+ 17:55 0:00 grep --color=auto nginx
[root@Dason02 tmp]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11526/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 899/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1683/master
tcp6 0 0 :::3306 :::* LISTEN 1378/mysqld
tcp6 0 0 :::22 :::* LISTEN 899/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1683/master
总结:
一、先准备下发目录和下发文件:
##目录:
[root@Dasoncheng ~]# cd /etc/ansible/
[root@Dasoncheng ansible]# mkdir nginx_install && cd nginx_install
[root@Dasoncheng nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}
[root@Dasoncheng nginx_install]# ls
roles
[root@Dasoncheng nginx_install]# ls roles/
common install
[root@Dasoncheng nginx_install]# ls roles/common/
files handlers meta tasks templates vars
[root@Dasoncheng nginx_install]# ls roles/install/
files handlers meta tasks templates vars
##文件:
[root@Dasoncheng ~]# cd /usr/local/
[root@Dasoncheng local]# tar -zcvf nginx.tar.gz --exclude "ngin.conf" --exclude "vhosts" nginx/
[root@Dasoncheng local]# cp nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/nginx.tar.gz ##拷贝安装目录
[root@Dasoncheng local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/nginx ##拷贝启动脚本
[root@Dasoncheng local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/nginx.conf ##拷贝配置文件
二、编写yml脚本
[root@Dasoncheng ~]# cd /etc/ansible/nginx_install/
[root@Dasoncheng nginx_install]# cat install.yml
---
- hosts: rs
remote_user: root
gather_facts: true
roles:
- common
- install
[root@Dasoncheng nginx_install]# ls roles/common/tasks/main.yml
roles/common/tasks/main.yml
[root@Dasoncheng nginx_install]# cat !$
cat roles/common/tasks/main.yml
---
- name: install initaliztion require software
yum: name="zlib-devel,pcre-devel" state=installed
[root@Dasoncheng nginx_install]# ls roles/install/tasks/
copy.yml install.yml main.yml
[root@Dasoncheng nginx_install]# cat !$main.yml
cat roles/install/tasks/main.yml
- include: copy.yml
- include: install.yml
[root@Dasoncheng nginx_install]# cat roles/install/tasks/copy.yml
- name: copy nginx software
copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: uncopression nginx software
shell: tar -zxf /tmp/nginx.tar.gz -C /usr/local/
- name: copy nginx start script
template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: copy nginx config
template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
[root@Dasoncheng nginx_install]# cat roles/install/tasks/install.yml
- name: create nginx user
user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: start nginx service
shell: /etc/init.d/nginx start
- name: add boot start nginx service
shell: chkconfig --level 345 nginx on
- name: delete nginx compression files
shell: rm -f /tmp/nginx.tar.gz
三、执行即可
[root@Dasoncheng local]# ansible-playbook /etc/ansible/nginx_install/install.yml