97.playbook安裝nginx

24.27/24.28 playbook安裝nginxlinux

 

 

 

playbook安裝nginxnginx

 

playbook實戰-nginx安裝1web

針對自定製的源碼安裝nginxshell

思路:先在一臺機器上編譯安裝好nginx、打包,而後再用ansible去下發apache

cd /etc/ansible 進入ansible配置文件目錄vim

mkdir nginx_install 建立一個nginx_install的目錄,方便管理服務器

cd nginx_installui

mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}命令行

說明:roles目錄下有兩個角色,common爲一些準備操做,install爲安裝nginx的操做。每一個角色下面又有幾個目錄,handlers下面是當發生改變時要執行的操做,一般用在配置文件發生改變,重啓服務。files爲安裝時用到的一些文件,meta爲說明信息,說明角色依賴等信息,tasks裏面是核心的配置文件,templates一般存一些配置文件,啓動腳本等模板文件,vars下爲定義的變量進程

 

playbook實戰-nginx安裝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 //內容以下

- name: Install initializtion require software

yum: name={{ item }} state=installed

with_items:

- zlib-devel

- pcre-devel

 

playbook實戰-nginx安裝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

 

playbook實戰-nginx安裝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

 

playbook實戰-nginx安裝5

再建立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

 

 

 

 

實例:

1.

[root@axinlinux-01 ~]# cd /etc/ansible/

[root@axinlinux-01 ansible]# ls

ansible.cfg create_user.yml handlers.yml hosts roles test.yml when.yml while.retry while.yml

[root@axinlinux-01 ansible]# mkdir nginx_install

[root@axinlinux-01 ansible]# cd nginx_install/

[root@axinlinux-01 nginx_install]# mkdir -p roles/{common,install}/{handlers,files,mete,tasks,templates,vars} #在roles目錄下建立了common和install目錄,在這兩個目錄下又建立了後面的這些目錄

[root@axinlinux-01 nginx_install]# ls

roles

[root@axinlinux-01 nginx_install]# ls roles/

common install

[root@axinlinux-01 nginx_install]# ls roles/install/

files handlers mete tasks templates vars

files是咱們要拷貝的一些文件。把要拷貝到其餘機器上的文件放到這個目錄下來

handlers是對應一些handlers放到這下面來

mete是說明信息,能夠留空

tasks主要的核心任務是什麼

templates模板。好比咱們安裝nginx,針對不一樣的服務器有的是4核的有的是8核的,針對4核的啓動的子進程就是4,針對8核的子進程就是8。根據系統的不一樣,提供不一樣的變量在裏面

vars是定義的一些變量

2.

[root@axinlinux-01 nginx_install]# cd /usr/local/ #咱們已經有nginx了,就不須要在源碼安裝了

[root@axinlinux-01 local]# tar czvf nginx.tar.gz --exclude "nginx.conf" --exclude "vhosts" nginx/

#將nginx目錄打包,過濾出(--clude)nginx.conf和vhosts目錄,暫時不打包這兩個

[root@axinlinux-01 local]# mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/ #將打包好的nginx放到files下

[root@axinlinux-01 local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/ #將nginx.conf放到templates下

[root@axinlinux-01 local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/ #將啓動腳本放到templates下

vhosts暫時先不拷貝了,後面有專門搞配置的一章

[root@axinlinux-01 local]# cd /etc/ansible/nginx_install/roles/common/

[root@axinlinux-01 common]# vim tasks/main.yml #在這不像在playbook裏直接寫tasks一行,後面就直接跟模塊名就能夠了。可是在這,這種playbook是由目錄組成的很大的一個小級別一個小級別的,他不是一個總體。要想將這個總體串聯起來,就要建立對應的上面tasks、handlers等等這些目錄,在這些目錄下面呢,去建立main.yml這個文件,那麼他會自動去找。那麼這下面就是你要執行的一些東西了。在這裏就是啓動nginx時,所依賴的包和庫等等

- name: Install initializtion require software

yum: name={{ item }} state=installed #模塊yum,item就是變量下面的兩個,而後就是安裝

with_items:

- zlib-devel #須要安裝的

- pcre-devel #須要安裝的

注意:

以上這裏,在最後執行的過程中(ansible-playbook),出現報錯爲yum安裝的包有問題(多是yum循環的問題)。能夠換一種方法,如下:

[root@axinlinux-01 common]# vim tasks/main.yml

- name: Install initializtion require software

yum: name="pcre-devel,zlib-devel" state=installed #不使用循環,直接安裝這兩個。使用逗號分隔

3.

[root@axinlinux-01 common]# vim /etc/ansible/nginx_install/roles/install/vars/main.yml

nginx_user: www #根據機器環境的不一樣,咱們能夠去定義它不一樣的值。好比web1是www,web2是apache

nginx_port: 80 #還能夠去定義port,由於有的是80,有的是8080

nginx_basedir: /usr/local/nginx

vim /etc/ansible/nginx_install/roles/install/tasks/copy.yml #至關於子配置文件(主配置文件是main.yml),將所需文檔拷貝到目標機器

- name: Copy Nginx Software

copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root #copy模塊,拷貝nginx的tar包。不須要寫絕對路徑,由於能自動在files目錄下找

- name: Uncompression Nginx Software

shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/ #shell模塊,用來解壓

- 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 #拷貝配置文件

templates

它是一個模塊功能,與copy不一樣的是他的文本文件採用了jinga2語法,注意:template只能在palybook中使用。

4.

vim /etc/ansible/nginx_install/roles/install/tasks/install.yml #這個其實是總的.yml

- name: Create Nginx User

user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin #user模塊。nginx_user變量,在第三步驟vars/main.yml定義的。也就是使用www用戶。不須要建立用戶家目錄

- name: Start Nginx Service

shell: /etc/init.d/nginx start

- name: Add Boot Start Nginx Service

shell: chkconfig --level 345 nginx on #開啓啓動。第一次的話用chkconfig,不要用systemctl

- name: Delete Nginx compression files

shell: rm -rf /tmp/nginx.tar.gz

5.

[root@axinlinux-01 common]# vim /etc/ansible/nginx_install/roles/install/tasks/main.yml #調用這兩個

- include: copy.yml

- include: install.yml

[root@axinlinux-01 common]# vim /etc/ansible/nginx_install/install.yml

---

- hosts: axinlinux-02 #使用一個機器來,能夠寫testhost(主機組)

remote_user: root

gather_facts: True

roles:

- common

- install

[root@axinlinux-02 ~]# yum remove nginx #卸載以前yum的ngixn

[root@axinlinux-02 ~]# rm -f /etc/init.d/nginx

[root@axinlinux-01 common]# ansible-playbook /etc/ansible/nginx_install/install.yml

[root@axinlinux-02 ~]# ps aux |grep nginx #檢查02機器,查看是否是咱們配置文件的nginx的進程

root 12454 0.0 0.0 45700 1132 ? Ss 21:14 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

nobody 12455 0.0 0.2 48192 3772 ? S 21:14 0:00 nginx: worker process

nobody 12456 0.0 0.2 48192 4028 ? S 21:14 0:00 nginx: worker process

root 12651 0.0 0.0 112676 988 pts/0 S+ 21:15 0:00 grep --color=auto nginx

[root@axinlinux-02 ~]# cat /usr/local/nginx/conf/nginx.conf

 

 

總結:

咱們在最後執行ansible-playbook /etc/ansible/nginx_install/install.yml的時候,總的有一個.yml的文件吧,他是一個總入口的文件。那麼他會指定那個機器去作接下來的操做。同時他也會定義一個roles,roles對應一些子目錄(能夠理解爲子playbook腳本)。

roles裏有common和install:

common裏有tasks/main.yml,無論運行什麼,他都會去tasks裏找,去安裝那兩個依賴的包

install裏也有tasks/main.yml,他鏈接copy.yml和install.yml,這兩個.yml要在同一個目錄下。

相關文章
相關標籤/搜索