上一章「23. 怎麼用 Roles 部署 LNMP 網頁應用程式?(下)」我們用了 3 個 Roles 和自己寫的 Playbook 部署 Testlink 網頁應用程式,接下來凍仁會透過 Roles 展示最精簡的 Playbooks。
chusiang.testlink
是部署 TestLink 1.9.15 到 Ubuntu 14.04 和 Debian 8 的 Role,並建置在 Nginx 1.10, PHP 7 和 MySQL 5.6 的環境上。
凍仁先前幫公司架設 TestLink 時,在 Ansible Galaxy 和 Chef Supermarket 上找不到現成 Roles 和 Cookbooks,索性就自己寫一個。
看下去之前,可以先回顧上章,比比看兩者的差異。
建立 Vagrantfile 檔案。
$ vi Vagrantfile
# -*- mode: ruby -*-
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
config.vm.provision "ansible" do |ansible|
ansible.playbook = "setup.yml"
ansible.sudo = true
#ansible.verbose = "vvv"
end
end
# vi: set ft=ruby :
建立 requirements.yml
,與上章相比多了 chusiang.testlink
role。
$ vi requirements.yml
# Nginx 1.10
- src: williamyeh.nginx
path: roles/
# PHP 7
- src: chusiang.php7
path: roles/
# MySQL 5.6
- src: geerlingguy.mysql
path: roles/
# TestLink 1.9.15
- src: chusiang.testlink
path: roles/
藉由 requirements.yml
下載多個 Roles。
$ ansible-galaxy install -f -p roles -r requirements.yml
為便於解說,凍仁將於以下範例加上行號,其原始檔可在 lab/ch24/testlink/setup.yml
取得。
$ vi setup.yml
01 #!/usr/bin/env ansible-playbook
02
03 ---
04 - name: deploy testlink with chusiang.testlink role
05 hosts: all
06 become: true
07
08 roles:
09 - williamyeh.nginx
10 - chusiang.php7
11 - geerlingguy.mysql
12 - chusiang.testlink
13
14 tasks:
15 - name: include check task
16 include: roles/chusiang.testlink/tasks/check.yml
17
18 post_tasks:
19 # Run some tests.
20 - include: roles/chusiang.testlink/tests/curl_testlink_web.yml
21
22 # vim:ft=ansible:
把 Playbooks 都封裝成 Roles 之後,可明顯看出整體的檔案結構比上章簡潔許多。
$ tree -L 2
.
├── Makefile
├── Vagrantfile
├── ansible.cfg
├── hosts
├── requirements.yml
├── roles
│ ├── chusiang.php7
│ ├── chusiang.testlink
│ ├── geerlingguy.mysql
│ └── williamyeh.nginx
└── setup.yml
5 directories, 6 files
啟用虛擬機並執行 Playbook。
$ vagrant up
執行完畢後,開啟瀏覽器 (Browsers) 並進入 TestLink 網站 (http://192.168.33.10),其帳號密碼皆為 admin
。
以上,這次我們只需維護 ansible.cfg
, hosts
, requirements.yml
和 setup.yml
,剩下就交給 Roles 吧!
在完成這篇文章的同時,凍仁也順手修了一下 chusiang.testlink
role 的小小 bug。相信當越多人分享 Roles 到 Galaxy 後,我們可以減少重複性質的工作,並把時間和精力留在更重要的事情上。