天天看點

ansible-playbook管理nginx配置檔案

僅僅會用ansible-playbook安裝nginx服務還不夠,再來看看如何用ansible管理nginx的配置檔案。

文章分兩部分:

  1. 說明更新配置檔案的步驟。
  2. 說明如何做復原操作。

實驗環境:

  1. centos6.6 192.168.38.152 ansible主機,已經安裝了nginx服務,安裝方法【在這裡】。
  2. centos6.6 192.168.38.155 用戶端,之前使用ansibl-playbook安裝部署了nginx服務,部署過程【在這裡】。

實驗思路:

模拟修改一下nginx.conf檔案,然後更新遠端伺服器,然後再reload重新開機nginx服務。

參照之前ansible-playbook安裝nginx的方法,在/etc/ansible/目錄建立ansible_config的目錄,再建立roles目錄,在roles下有兩個角色new和old。new用來準備更新的檔案,腳本。old用來準備復原操作的檔案腳本。

new目錄的結構:

[[email protected] nginx_config]# cd roles/
[[email protected] roles]# ls
new  old
[[email protected] roles]# cd new/
[[email protected] new]# ls
files  handlers  tasks  vars
[[email protected] new]# tree
.
├── files
│   ├── nginx.conf
│   └── vhosts
│       └── 1.conf
├── handlers
│   └── main.yml
├── tasks
│   └── main.yml
└── vars
    └── main.yml      

files 目錄準備nginx.conf檔案和虛拟主機目錄vhosts。

handlers 目錄存放重新開機腳本,當nginx.conf配置檔案被修改發生變化時,将執行handlers裡的腳本。

tasks 目錄存放核心任務的腳本,主要就是copy新的配置檔案到遠端,并且執行handlers的重新開機腳本。

vars 目錄就是一些變量的定義。

具體操作過程:

第一部分: 修改nginx的配置檔案,再更新到用戶端,再重新開機用戶端的nginx服務。

在ansible主機:

  1. vim  /usr/local/nginx/conf/nginx.conf  //在最後增加一行:

  include  vhosts/*.conf;

ansible-playbook管理nginx配置檔案

2. 然後在/usr/local/nginx/conf/ 建立vhosts目錄,并且在裡面建立1.conf檔案

 mkdir   /usr/local/nginx/conf/vhosts/

 vim  /usr/local/nginx/conf/vhosts/1.conf  //暫時随便寫一點注釋掉的東西。

 #jldfjalkdjfladsjjflk

3. 在/etc/ansible/ 依照之前遠端安裝nginx的方法,建立一個nginx_conf 目錄。

  mkdir  -p  /etc/ansible/nginx_config/roles/{new,old}/{files,handlers,vars,tasks}

  roles下面有兩個角色,其中new為更新時用到的,old為復原時用到的。

     files下面為nginx.conf和vhosts目錄,handlers為重新開機nginx服務的指令腳本。

4. 先将nginx.conf 和vhosts目錄拷貝到files目錄。

    cd   /usr/local/nginx/conf

    cp   -r  nginx.conf  vhosts  /etc/ansible/nginx_conf/roles/new/files/

5. 定義一些用到的變量:

   vim  /etc/ansible/nginx_config/roles/new/vars/main.yml    //内容如下:

   nginx_basedir: /usr/local/nginx

 現在隻有一個變量。

6. 定義handlers腳本:

  vim /etc/ansible/nginx_config/roles/new/handlers/main.yml

- name: restart nginx
  shell: /etc/init.d/nginx  reload      

7. 定義tasks 的核心任務:

  vim  /etc/ansible/nginx__config/roles/new/tasks/main.yml

- name: copy conf file

  copy: src=` item`.`src ` dest=` nginx_basedir `/` item`.`dest ` backup=yes owner=root group=root mode=0644

  with_items:

    - { src: nginx.conf, dest: conf/nginx.conf }

    - { src: vhosts, dest: conf/ }

    notify: restart nginx

 with_items 是copy 子產品裡變量item的循環取值。copy子產品的src預設路徑就在files目錄。

 因為要使用handlers子產品,是以,要在copy子產品執行成功後,就調用notify,notify的名字restart nginx要和handlers/main.yml檔案裡的名字保持一樣。

8. 最後,定義修改配置檔案重新開機服務的總的入口檔案:

  vim  /etc/ansible/nginx_config/update.yml

---
- hosts: web155.com   
  user: root
  roles:
    - new      

hosts 現在隻用一台主機就是192.168.38.155 

roles 角色,隻用new

9. 在ansible主機執行ansible-playbook update.yml

  最終執行的結果:

ansible-playbook管理nginx配置檔案

10. 在用戶端web155.com 的伺服器檢視:

  ps   aux|grep nginx

ansible-playbook管理nginx配置檔案

 可以看到nginx 的重新開機時間,就在剛剛做實驗的時間。

 再看一下 /usr/local/nginx/conf/vhost是否已經多了一個1.conf

 現在,遠端更新nginx配置檔案和重新開機服務的功能已經驗證成功了。

第二部分: 如何給操作進行復原

思路就是,在更新new之前,先将new的複制一遍到old下。然後再去更新new下面的files檔案。當我們發現釋出的配置檔案有問題的時候,就可以用old下面的,復原到前一個版本了。

下面做實驗:

1.  rsync  -av  /etc/ansible/nginx_config/roles/new/   /etc/ansible/nginx_config/roles/old  //每次做更新前都進行備份。

2. cp  /etc/ansible/nginx_config/update.yml   /etc/ansible/nginx_config/backup.yml

    vim   /etc/ansible/nginx_config/roles/old/backup.yml

 --- 
    - hosts: web155.com
      user: root
      roles:
        - old      

3. 然後,再修改一下 /etc/ansible/nginx_config/roles/new/files/vhosts/1.conf/:

   #123123123123124214

3. 然後, 再執行一下ansible-playbook  update.yml

   在用戶端,cat  /usr/local/nginx/conf/vhosts/1.conf

   配置檔案已經改變了。

ansible-playbook管理nginx配置檔案

4. 假設,現在就要復原跟新之前的版本的配置檔案,old目錄下就是上一個版本的配置,隻需要執行一下:

   ansible-playbook   /etc/ansible/nginx_config/backup.yml

  在用戶端,cat  /usr/local/nginx/conf/vhosts/1.conf 

  配置檔案已經復原到上一個版本了:

ansible-playbook管理nginx配置檔案

5. 實驗結束,證明復原成功了

參考:http://www.ansible.com.cn/docs/playbooks_intro.html

轉載于:https://blog.51cto.com/hellocjq/1894992

繼續閱讀