這次受邀擔任 PHPConf 2016 的工作坊講師,負責一場「自動化與持續整合」的實作工作坊,除了有事先預備了 Local VM 提供參與者事先安裝設置之外,要特別感謝微軟贊助本工作坊,每位學員都會擁有一組 Azure Pass 一個月內有限額的 Azure 試用,讓學員可以直接在 Azure 上建立工作坊的實作環境。
此文即是紀錄在 Azure 上要如何建立實作環境。
(2017/8/5 註記:此文的一些資訊已經過期,你也知道工具是會不斷更新的。)
環境描述 再重複一次我們會需要用到下面四種 Server:
CI Server:這次工作坊會以 GitLab 作為主要的 CI Server。 CI Worker:即是 GitLab Runner。 Web Server:標準的 Nginx + Php-fpm,而且要開放可以 SSH Login。 Selenium Server:測試案例中會用到 Selenium。 在 Azure 上,其實有各種方式可以組合出實作環境,但既然我們有 Azure 免費試用,當然可以選一種相對簡單,但又很奢侈的建置方式,即是「建立多台 VM 並安裝好 Docker,讓每台 VM 都只用 Docker 建立 1~2 種 Service。」 如此一來由多台 VM 各自負擔工作,不用擔心資源不足,也不用煩惱 IP 的問題。 所以讓我們再次感謝微軟的大力贊助!
不過我想 Azure 專家們應該會跳出來說,Azure 明明就有很多好作法,所以我只好維持一樣的回答,此文不是 Azure 教學文啊,只是想用最簡單的方式建構出本次工作坊的實作環境,就請專家們睜一隻眼閉一隻眼嘍。
當然,你也可以開一台超大超強的 VM,然後和上一篇文章的 Local VM 一樣,在一個 VM 內用 Container 提供多種服務的方式建置環境,做起來也不難,但這就留給有心人自己去嘗試了。...
這次受邀擔任 PHPConf 2016 的工作坊講師,負責一場「自動化與持續整合」的實作工作坊,因為希望工作坊的過程中能將網路與實作環境的問題減少到最少,所以事先預備了 Local VM 提供參與者事先安裝設置。
此文即是紀錄這個 Loacl VM 是如何建立的。
(2017/8/5 註記:此文的一些資訊已經過期,你也知道工具是會不斷更新的。)
環境描述 因為考慮到不是每個人都會有頂規的電腦設備,同時也為了方便設置,因此在 Local VM 的規劃上,不打算實際建立多台 VM,而是以單一 VM 並在其中透過多個 docker container 的方式來模擬多 VM 的情況。
我們會需要用到下面四個 Server:
CI Server:這次工作坊會以 GitLab 作為主要的 CI Server。 CI Worker:即是 GitLab Runner。 Web Server:標準的 Nginx + Php-fpm,而且要開放可以 SSH Login。 Selenium Server:測試案例中會用到 Selenium。 基於以上四項都要放在同一台 虛擬 VM 裡,並用多個 Container 來實現,在經過實驗之後建議運行此 VM 的電腦或筆電(host機)至少需要: 超過 2GB 的記憶體。因為 GitLab 與 Selenium 都滿吃 Ram,因此分配給 VM 的 Ram 至少要 2GB, 預留 10 ~ 20 GB 硬碟空間。因為運行 Docker 環境其實也滿吃硬碟空間的,硬碟空間能留越多是越好啦! VM 與 host 機將對映幾個 port 分別是 80、2222、10122、10180 為了簡化環境建置的難度,作為此 VM 的 OS 我們即選用 ubuntu 14....
某天被人出了一個題目「如何知道 Web Site 實際發出的 Request 數量?」
其實這個題目有好幾種解法,例如:
直接查看 Cloud Host 的報表 開啓 Web Server 的 access.log,再透過 Log 分析來取得 安裝 Network Traffic Analyser 來記錄與分析 其實上述的方法都可以 Google 找到現成的解決方案,但自己卻沒來由的突發奇想,想知道「是否可以由封包記錄中取得這樣的資訊?」經過一番研究,還真的做的到,而且實作起來並不困難,以下就簡單的分享經驗。
實作方式其實很簡單,首先透過 Linux 的指令 tcpdump 過濾並記錄某種特別的封包,並將封包接收資訊另存為 Log File,最後再透過 Parser 去分析 Log 即可。
tcpdump 的指令詳解,可以參考鳥哥的網站,或者自己直接在 command line 去問 man。
$ man tcpdump
最終會使用的 tcpdump 指令如下
$ tcpdump -i eth0 -n 'tcp[tcpflags] & (tcp-push) != 0 and dst net xxx.xxx.xxx.xxx and port 80' -q > requests.log
簡單說明所使用到的選項與參數...