為什麼你該在 Virtual Machine 中進行開發

前言

前幾天把我的筆電作業系統從 OS X 10.8 升級到 OS X 10.9, 結果導致一些軟體無法執行,像是原本使用 homebrew 安裝的 PHP 找不到一些相依的 libray, Apache 的設定也被回復至預設的設定等,導致在修正這些問題上花了不少時間,雖然最後順利修復了,不過整個過程真的覺得非常的挫折,也影響了原本的開發進度。有了這次的經驗,決定來研究如何在虛擬機中進行開發,來降低環境設定過程中的問題,進而加快設定時間讓整個開發流程更加順利。

問題出在哪裡?

開發者有很多方式去建構自己的開發環境,以 PHP 開發來說,你可以手動ㄧ一安裝每個需要的軟體,像是PHP, Apache, MySQL, phpMyAdmin, 或是你可以選擇別人打包好的軟體包,像是XAMPP, MAMP, WAMP,或是透過像Homebrew、APT/YUM 這種套件管理程式來協助你安裝軟體。

然而隨著 Web Application 的架構日益複雜,新的技術和 framework 也不斷產生,像是 NodeJS、MongoDB、 AngularJS、Memcached 等等,若是以專案為導向的公司,可能還需要因應不同的專案來配置不同的軟體架構。然而不同的軟體彼此之間可能會有衝突,像是如果A專案使用 PHP 5.3, 但是B專案使用 PHP 5.5, 你該怎麼辦? 若是你更新了你的電腦作業系統,或是電腦整個掛點了,你該怎麼辦?有新的成員加入團隊,要重頭開始協助他安裝開發所需要的環境?

另外,除了開發者本身的開發環境外,大型的軟體公司通常還會有 Staging Server 和 Production Server,另外針對軟體測試通常還會有另外的測試環境。我想大家常常聽到的一句話就是 “這在我電腦上可以跑啊!”,環境的不同常常導致這樣的問題產生,因此如何確保這些環境都能一樣,減少不確定的變因,是開發過程中一個相當重要的議題。

因此,我們可以發現以下的問題,在我們的開發生涯當中,多少都會遇過:
1. 設定過程繁雜且很難重複:安裝開發環境相當花時間,當電腦壞掉或是有新進成員,安裝環境常常讓人一個頭兩個大。
2. 環境無法獨立:不同的專案需要不同的開發環境,軟體版本可能互相影響。
3. 開發環境和 Production 環境不同:要開發者的使用和 Production 一樣的作業系統,基本上是不太可能的。

 該怎麼辦?

Virtualization(虛擬化) to the rescue

虛擬化其實不是一個很新的概念,不過通常用在實際的 Production 環境上,但隨著上述的問題不斷產生,已經有越來越多的開發者將虛擬化的概念帶到自身的開發環境中,甚至有許多的開放原始碼軟體,本身就提供打包好的虛擬化環境,讓開發者可以快速建構開發環境,例如 Laravel 官方提供的 Homestead 讓開發者可以快速部署開發環境。而 WordPress 社群也有開發者提供了像 Vagrantpress 或是 VVV 等工具。另外很最近火紅的 Docker, 也是虛擬化的工具選項之一。

有什麼好處呢?

1. 開發速度加快,不用花一堆時間在繁雜的設定上。
2. 不會因為作業系統更新或是電腦壞掉要重新修復或設定開發環境。
3. 你的電腦可以保持乾淨, 不會安裝一堆軟體在自己的作業系統上。
4. 開發環境和實際的 Production 環境可以保持一致
5. 你還是可以繼續使用你偏好的作用系統。 如果你喜歡 Windows,那麼你還是可以繼續使用它。
6. 專案不會彼此影響。不同的專案可以跑在不同VM上,不會互相干擾。

還沒試過在VM上進行開發嗎? 或許你可以嘗試一下,你會發現會對你的開發流程帶來巨大的改變和影響!

參考資料:
Virtual Machines… The Holy Grail of Local Web Development
Develop in a Virtual Machine
The Tao of Vagrant

發佈留言