使用playbook安裝nginx
筆記日期:2018-01-31
- 24.27/24.28 playbook安裝nginx
playbook實戰-nginx安裝(1)
需求:雖然nginx可以直接使用yum安裝,但是我想要的是使用源碼包編譯安裝,並且需要自定義一些模塊。而且我需要通過playbook下發到遠程機器上。
實現思路:先在一臺機器上編譯安裝好nginx、打包,也就是把這臺機器作為模板機,然後再用ansible playbook去進行下發到遠程機器上。
1.進入ansible配置文件目錄,並創建一個nginx_install的目錄,方便管理:
[root@server ~]# cd /etc/ansible [root@server /etc/ansible]# mkdir nginx_install [root@server /etc/ansible]# cd nginx_install [root@server /etc/ansible/nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars} [root@server /etc/ansible/nginx_install]# ls roles/ common install [root@server /etc/ansible/nginx_install]# ls roles/install/ files handlers meta tasks templates vars [root@server /etc/ansible/nginx_install]# ls roles/common/ files handlers meta tasks templates vars [root@server /etc/ansible/nginx_install]#
說明:
roles目錄下有兩個角色,common為一些準備操作,install為安裝nginx的操作。每個角色下面又有幾個目錄,handlers下面是當發生改變時要執行的操作,通常用在配置文件發生改變,重啟服務。files為安裝時用到的一些文件,meta為說明信息,說明角色依賴等信息,tasks裏面是核心的配置文件,templates通常存一些配置文件,啟動腳本等模板文件,vars下為定義的變量。
playbook實戰-nginx安裝(2)
1.需要事先準備好安裝用到的文件,具體如下:
- 在一臺機器上事先編譯安裝好nginx,配置好啟動腳本,配置好配置文件
- 安裝好後,我們需要把nginx目錄打包,並放到/etc/ansible/nginx_install/roles/install/files/下面,名字為nginx.tar.gz
- 啟動腳本、配置文件都要放到/etc/ansible/nginx_install/roles/install/templates下面
nginx我這裏早已編譯安裝好了:
[root@server /etc/ansible/nginx_install]# ls /usr/local/ apache2.4 apr-util etc include lib libexec mysql php php-fpm share tomcat apr bin games jdk1.8 lib64 mariadb nginx php7 sbin src [root@server /etc/ansible/nginx_install]# ls /usr/local/nginx/ client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
所以我先在要做的事情就是把nginx目錄打包,並放到files下面,以及把啟動腳本、配置文件放到templates下面:
[root@server /etc/ansible/nginx_install]# cd /usr/local/
[root@server /usr/local]# tar -czvf nginx.tar.gz --exclude "nginx.conf" --exclude "vhost" nginx/
[root@server /usr/local]# mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/
[root@server /usr/local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/
[root@server /usr/local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/
[root@server /usr/local]#
2.完成以上的操作後,還需要定義common的tasks,因為nginx是需要一些依賴包的:
[root@server /usr/local]# cd /etc/ansible/nginx_install/roles
[root@server /etc/ansible/nginx_install/roles]# vim ./common/tasks/main.yml
- name: Install initializtion require software
yum: name="zlib-devel,pcre-devel" state=installed
playbook實戰-nginx安裝(3)
1.定義變量:
[root@server /etc/ansible/nginx_install/roles]# vim install/vars/main.yml
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx
2.然後要把所有用到的文檔拷貝到目標機器:
[root@server /etc/ansible/nginx_install/roles]# vim install/tasks/copy.yml
- name: Copy Nginx Software # 拷貝nginx包
copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: Uncompression Nginx Software # 解壓nginx包
shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/
- name: Copy Nginx Start Script # 拷貝nginx的啟動腳本
template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: Copy Nginx Config # 拷貝nginx的配置文件
template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
註:這裏src參數指定的是相對路徑,這個相對路徑相對的是模塊,例如copy模塊裏的src參數的值為nginx.tar.gz,那麽就會去files目錄下找nginx.tar.gz,而template模塊則是會去templates目錄下找。
playbook實戰-nginx安裝(4)
1.接下來是建立用戶,啟動服務,刪除壓縮包:
[root@server /etc/ansible/nginx_install/roles]# vim install/tasks/install.yml
- name: Create Nginx User # 創建nginx用戶
user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: Start Nginx Service # 啟動nginx服務
shell: /etc/init.d/nginx start
- name: Add Boot Start Nginx Service # 將nginx服務添加到開機啟動列表
shell: chkconfig --level 345 nginx on
- name: Delete Nginx compression files # 刪除nginx的壓縮包
shell: rm -rf /tmp/nginx.tar.gz
註:nginx_user變量是之前我們在vars目錄下的main.yml文件中定義的,所以在這裏可以直接引用。
playbook實戰-nginx安裝(5)
1.再創建一個總體的main.yml,在這個文件裏對copy.yml以及install.yml進行一個調用:
[root@server /etc/ansible/nginx_install/roles]# vim install/tasks/main.yml
- include: copy.yml
- include: install.yml
到此兩個roles:common和install就定義完成了,接下來要定義一個作為總入口的配置文件:
[root@server /etc/ansible/nginx_install/roles]# cd ../
[root@server /etc/ansible/nginx_install]# vim install.yml
---
- hosts: testhost
remote_user: root
gather_facts: True
roles:
- common
- install
註意:接著就是需要執行這個總入口文件了,但是如果你的目標機器之前安裝過nginx需要先清理掉,不然可能會有沖突:
1、之前編譯安裝的清理辦法:
find / -name "nginx*" -exec rm -rf {} \;
2、如果是之前yum安裝的清理辦法:
rpm -qa nginx
yum remove -y nginx
執行這個總入口文件:
[root@server ~]# 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 [testhost] *************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************
ok: [192.168.77.128]
TASK [common : Install initializtion require software] **********************************************************************
ok: [192.168.77.128]
TASK [install : Copy Nginx Software] ****************************************************************************************
changed: [192.168.77.128]
TASK [install : Uncompression Nginx Software] *******************************************************************************
[WARNING]: Consider using unarchive module rather than running tar
changed: [192.168.77.128]
TASK [install : Copy Nginx Start Script] ************************************************************************************
changed: [192.168.77.128]
TASK [install : Copy Nginx Config] ******************************************************************************************
changed: [192.168.77.128]
TASK [install : Create Nginx User] ******************************************************************************************
changed: [192.168.77.128]
TASK [install : Start Nginx Service] ****************************************************************************************
changed: [192.168.77.128]
TASK [install : Add Boot Start Nginx Service] *******************************************************************************
changed: [192.168.77.128]
TASK [install : Delete Nginx compression files] *****************************************************************************
[WARNING]: Consider using file module with state=absent rather than running rm
changed: [192.168.77.128]
PLAY RECAP ******************************************************************************************************************
192.168.77.128 : ok=10 changed=8 unreachable=0 failed=0
[root@server ~]#
執行成功後,到客戶端上查看服務進程是否已啟動,以及80端口是否已監聽:
[root@client ~]# ps aux |grep nginx
root 5130 0.0 0.0 45864 1100 ? Ss 16:53 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody 5131 0.0 0.1 50436 4076 ? S 16:53 0:00 nginx: worker process
nobody 5132 0.0 0.1 50436 4076 ? S 16:53 0:00 nginx: worker process
root 5365 0.0 0.0 112660 960 pts/0 S+ 16:53 0:00 grep --color=auto nginx
[root@client ~]# netstat -lntp |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5596/nginx: master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 5596/nginx: master
[root@client ~]#
到此,我們就把nginx安裝完成了。
最後上一張思維導圖來總結一下,每個目錄所包含的文件及.yml文件所要做的事情:
命令執行流程圖:
下一篇,playbook管理Nginx配置文件:
http://blog.51cto.com/zero01/2067468
使用playbook安裝nginx