僅僅會用ansible-playbook安裝nginx服務還不夠,再來看看如何用ansible管理nginx的配置檔案。
文章分兩部分:
- 說明更新配置檔案的步驟。
- 說明如何做復原操作。
實驗環境:
- centos6.6 192.168.38.152 ansible主機,已經安裝了nginx服務,安裝方法【在這裡】。
- 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主機:
- vim /usr/local/nginx/conf/nginx.conf //在最後增加一行:
include vhosts/*.conf;
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
最終執行的結果:
10. 在用戶端web155.com 的伺服器檢視:
ps aux|grep 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
配置檔案已經改變了。
4. 假設,現在就要復原跟新之前的版本的配置檔案,old目錄下就是上一個版本的配置,隻需要執行一下:
ansible-playbook /etc/ansible/nginx_config/backup.yml
在用戶端,cat /usr/local/nginx/conf/vhosts/1.conf
配置檔案已經復原到上一個版本了:
5. 實驗結束,證明復原成功了
參考:http://www.ansible.com.cn/docs/playbooks_intro.html
轉載于:https://blog.51cto.com/hellocjq/1894992