1 用playbook安装nginx
- 思路:先在一台机器上编译安装好nginx、打包,然后再用ansible去下发
先在服务端编译nginx(服务端为chy01 192.168.212.11 客户机为chy02 192.168.212.12)
[root@chy01 ~]# cd /etc/ansible/
[root@chy01 ansible]# mkdir nginx_install //先创建一个nginx的安装目录
[root@chy01 ansible]# cd nginx_install/
[root@chy01 nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}
说明:roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作。每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。files为安装时用到的一些文件,meta为说明信息,说明角色依赖等信息,tasks里面是核心的配置文件,templates通常存一些配置文件,启动脚本等模板文件,vars下为定义的变量
[root@chy01 nginx_install]# ls roles/
common install
[root@chy01 nginx_install]# ls roles/install/
files handlers meta tasks templates vars
[root@chy01 ~]# ls /etc/init.d/nginx
/etc/init.d/nginx
[root@chy01 ~]# ls /usr/local/nginx/
client_body_temp/ fastcgi_temp/ logs/ sbin/ uwsgi_temp/
conf/ html/ proxy_temp/ scgi_temp/
[root@chy01 ~]# ls /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/conf/nginx.conf
(如上是之前编译好的nginx,在这里就不需要再次编译安装了)编译完成后需要在服务端打包nginx包:如下操作
[root@chy01 local]# tar czvf nginx.tar.gz --exclude "nginx.conf" --exclude "vhosts" nginx/ (如上是打包nginx目录打包成nginx.tar.gz 但是在打包的过程中是不需要打包nginx.conf与vhosts的) [root@chy01 local]# mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/ //将压缩包移动到创建的nginx_install目录下去 [root@chy01 local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/ [root@chy01 local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/ 启动脚本、配置文件都要放到/etc/ansible/nginx_install/roles/install/templates下面
定义common的tasks,nginx是需要一些依赖包的
[root@chy01 local]# cd /etc/ansible/nginx_install/roles/
[root@chy01 roles]# cd common/
[root@chy01 common]# vi tasks/main.yml
- name: Install initializtion require software
yum: name={{ item }} state=installed
with_items:
- zlib-devel
- pcre-devel
(安装依赖包与相应的库)定义变量
[root@chy01 common]# vim /etc/ansible/nginx_install/roles/install/vars/main.yml
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx
//左边是定义的名字,右边是值
[root@chy01 common]# 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@chy01 common]# 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
// nginx_user 调用参数;state=present 表示存在。再创建main.yml并且把copy和install调用
[root@chy01 tasks]# vim /etc/ansible/nginx_install/roles/install/tasks/main.yml - include: copy.yml - include: install.yml 到此两个roles:common和install就定义完成了
最后要定义一个入口配置文件
[root@chy01 tasks]# vim /etc/ansible/nginx_install/install.yml
---
- hosts: chy02
remote_user: root
gather_facts: True
roles:
- common
- install
[root@chy01 tasks]# ansible-playbook /etc/ansible/nginx_install/install.yml
[DEPRECATION WARNING]: The use of ‘include‘ for tasks has been deprecated. Use ‘import_tasks‘ for static inclusions or
‘include_tasks‘ for dynamic inclusions. This feature will be removed in a future release. Deprecation warnings can be disabled by
setting deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: include is kept for backwards compatibility but usage is discouraged. The module documentation details
page may explain more about this rationale.. This feature will be removed in a future release. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
PLAY [chy02] *********************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************
ok: [chy02]
TASK [common : Install initializtion require software] ***************************************************************************
failed: [chy02] (item=[u‘zlib-devel‘, u‘pcre-devel‘]) => {"changed": false, "failed": true, "item": ["zlib-devel", "pcre-devel"], "msg": "No Package matching ‘[‘zlib-devel‘‘ found available, installed or updated", "rc": 0, "results": []}
to retry, use: --limit @/etc/ansible/nginx_install/install.retry
PLAY RECAP ***********************************************************************************************************************
chy02 : ok=1 changed=0 unreachable=0 failed=1
在执行的时候会报一个错误,这时初步感觉是因为不支持循环,解决方法需要修改一下main.yml的配置文件
[root@chy01 common]# vi tasks/main.yml
- name: Install initializtion require software
yum: name="pcre-devel,zlib-devel" state=installed
[root@chy01 common]# ansible-playbook /etc/ansible/nginx_install/install.yml
再次启动就正常了
[root@chy02 ~]# ps aux |grep nginx
root 5566 0.0 0.0 45484 1284 ? Ss 03:05 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/localnginx/conf/nginx.conf
nobody 5568 0.0 0.2 47972 3920 ? S 03:05 0:00 nginx: worker process
nobody 5569 0.0 0.2 47972 3920 ? S 03:05 0:00 nginx: worker process
root 5683 0.0 0.0 112664 976 pts/0 R+ 03:05 0:00 grep --color=auto nginx
//在客户机测试成功
如上需要注意一个问题:需要释放80端口,还需要保证客户机上没有安装nginx(包括用yum安装的)原文地址:http://chy940405.blog.51cto.com/11344281/1980400