1 用playbook安装nginx
- 思路:先在一台机器上编译安装好nginx、打包,然后再用ansible去下发
先在服务端编译nginx(服务端为chy01 192.168.212.11 客户机为chy02 192.168.212.12)
[[email protected] ~]# cd /etc/ansible/ [[email protected] ansible]# mkdir nginx_install //先创建一个nginx的安装目录 [[email protected] ansible]# cd nginx_install/ [[email protected] nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars} 说明:roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作。每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。files为安装时用到的一些文件,meta为说明信息,说明角色依赖等信息,tasks里面是核心的配置文件,templates通常存一些配置文件,启动脚本等模板文件,vars下为定义的变量 [[email protected] nginx_install]# ls roles/ common install [[email protected] nginx_install]# ls roles/install/ files handlers meta tasks templates vars [[email protected] ~]# ls /etc/init.d/nginx /etc/init.d/nginx [[email protected] ~]# ls /usr/local/nginx/ client_body_temp/ fastcgi_temp/ logs/ sbin/ uwsgi_temp/ conf/ html/ proxy_temp/ scgi_temp/ [[email protected] ~]# ls /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf (如上是之前编译好的nginx,在这里就不需要再次编译安装了)
编译完成后需要在服务端打包nginx包:如下操作
[[email protected] local]# tar czvf nginx.tar.gz --exclude "nginx.conf" --exclude "vhosts" nginx/ (如上是打包nginx目录打包成nginx.tar.gz 但是在打包的过程中是不需要打包nginx.conf与vhosts的) [[email protected] local]# mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/ //将压缩包移动到创建的nginx_install目录下去 [[email protected] local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/ [[email protected] local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/ 启动脚本、配置文件都要放到/etc/ansible/nginx_install/roles/install/templates下面
定义common的tasks,nginx是需要一些依赖包的
[[email protected] local]# cd /etc/ansible/nginx_install/roles/ [[email protected] roles]# cd common/ [[email protected] common]# vi tasks/main.yml - name: Install initializtion require software yum: name={{ item }} state=installed with_items: - zlib-devel - pcre-devel (安装依赖包与相应的库)
定义变量
[[email protected] common]# vim /etc/ansible/nginx_install/roles/install/vars/main.yml nginx_user: www nginx_port: 80 nginx_basedir: /usr/local/nginx //左边是定义的名字,右边是值 [[email protected] 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
创建用户并且启动服务以及删除压缩包
[[email protected] 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调用
[[email protected] tasks]# vim /etc/ansible/nginx_install/roles/install/tasks/main.yml - include: copy.yml - include: install.yml 到此两个roles:common和install就定义完成了
最后要定义一个入口配置文件
[[email protected] tasks]# vim /etc/ansible/nginx_install/install.yml --- - hosts: chy02 remote_user: root gather_facts: True roles: - common - install [[email protected] 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的配置文件 [[email protected] common]# vi tasks/main.yml - name: Install initializtion require software yum: name="pcre-devel,zlib-devel" state=installed [[email protected] common]# ansible-playbook /etc/ansible/nginx_install/install.yml 再次启动就正常了 [[email protected] ~]# 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安装的)
希望看过的童鞋多多指教,谢谢!
时间: 2024-10-31 17:12:32