怎麼用 Roles 部署 LNMP 網頁應用程式?(下)
23. 怎麼用 Roles 部署 LNMP 網頁應用程式?(下)
上一章「22. 怎麼用 Roles 部署 LNMP 網頁應用程式?(上)」我們挑選了 Nginx, MySQL 和 PHP 的 Roles,接下來就讓凍仁展示怎麼用 Roles 簡化大型的 TestLink Playbooks 吧!

怎麼用 Roles 撰寫強化版的 Playbooks?
在這份 Playbooks 與「19. 如何維護大型的 Playbooks?」不同的是,凍仁除了把 variables, tasks, handlers 拆開寫以外,還加入 Roles 的部份。
取得範例檔
為避免版面過於混亂,凍仁已上傳範例檔,還請大家先至 GitHub 下載。
Git
取得 demo code。
進入 testlink 目錄。
Zip
若不想使用 Git,可改下載 zip 檔。
解壓縮。
進入 testlink 目錄。
從 Galaxy 下載 Roles
透過凍仁定義好的 requirements.yml 下載多個 Roles,詳情請參考 Installing multiple roles from a file | Ansible Documentation 一文。
在 Python 的世界裡,我們可藉由
requirements.txt批次下載 pip 套件,而在 Ansible 的世界裡則是requirements.yml。
使用 Vagrant 建立開發環境
由於這次的 Vagrantfile 有設置 provision (配置) ansible 的語法,故使用 vagrant up 時會一併執行 playbook。詳情請參考「04. 怎麼用 Vagrant 練習 Ansible?」一文。
觀看 Vagrantfile 內容。
執行 Playbooks
啟用虛擬機並執行 Playbook。

若過程中有問題,可使用
provision重新執行 Ansible。
執行完畢後,開啟瀏覽器 (Browsers) 並進入 TestLink 網站 (http://192.168.33.10),其帳號密碼皆為
admin。

TestLink Playbooks 架構解說
README.md:可先從這裡取得較詳細的資訊。requirements.yml:這裡定義了相依的 Roles。
setup.yml:前面提到 Vagrant provision 進入點是這裡,故我們可從這個 playbook 了解主要架構。
在第 6 行裡,用了
become: yes來取得 root 權限。在第 8, 9 行裡,載入了定義好的
defaults/main.yml變數檔案,這裡宣告了所有會用到的變數。在第 11-17 行裡,載入了 Nginx, MySQL 和 PHP 的 Roles。
在第 20, 21 行裡,載入了主要的 tasks。
在第 23, 24 行裡,載入了檢查用的 tasks。
在第 26, 27 行裡,載入了主要的 handler。
defaults/main.yml:覆蓋 Roles 預設變數和 TestLink 會用到的相關變數皆宣告於此。tasks/main.yml:tasks 的主要進入點,並藉由它載入預設執行的 tasks。setup_testlink.yml:所有關於安裝 TestLink 會用到 tasks。setting_php-fpm.yml:設定 PHP 的 tasks。setting_nginx.yml:設定 Nginx 的 tasks。setting_testlink.yml:設定 TestLink 的 tasks。check.yml:檢查狀態用的 tasks。templates/config_db.inc.php.j2:TestLink 的 Database 設定檔模板。nginx-testlink.conf.j2:Nginx 設定檔模板。php7-cli.ini.j2:php7-cli 設定檔模板。php7-fpm.ini.j2:php7-fpm 設定檔模板。handlers/main.yml:主要的 handler,主要用來重新啟動 php-fpm 和 nginx。
以上,當我們整合好 Roles 後,只需撰寫部署 TestLink 的 Playbooks 即可。仔細算一算這份範例的 Tasks 行數加起來還不到 220 行呢!
後語
原先凍仁想從實作環境、建立 Playbooks、下載 Roles ... 等手把手一步步帶領著大家,但事後發現成效不佳,無法逐一說明,所以才會改用重點式介紹。
若您實作後無法正常執行,可於下方留言給凍仁,或至 GitHub 開 issues。
相關連結
Last updated
Was this helpful?