思路:先在一台机器上编译安装好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下为定义的变量mysql
[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
须要事先准备好安装用到的文件,具体以下: 在一台机器上事先编译安装好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
定义变量 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
接下来会创建用户,启动服务,删除压缩包 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
再建立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
执行结果:nginx
[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查看:sql
[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 ##拷贝配置文件
[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