如果你現在問我「如果要建立開發 website 的工作環境,有沒有什麼推薦的方案?」,二話不說我會直接推薦使用 mac + Vagrant + Laravel Homestead。
首先你會納悶為何第一個關鍵字是 mac,我只能說在我有限的觀察中,看到太多人(包含我自己在內),在 windows 的開發環境設定踩到莫名其妙的地雷,而偏偏 mac 上要建立相同條件的環境,踩到的地雷就是比較少。而且我推薦的第二及第三個關鍵字 Vagrant + Laravel Homestead,在 windows 上更是一堆地雷,很多人雖然能順利安裝 Vagrant 及 Homestead,但卻始終無法順暢的透過 Command Line 操控它。
接著再介紹 Vagrant 之前,你一定聽過 Virtual Box,如果你已經覺得 Virtual Box 用來建立與管理 Virtual Machine 已經很夠用了,那你一定會愛上 Vagrant。
Vagrant 是一套 Command Line Tool ,它讓你透過自訂的 vagrantfile 來更便利的建立、管理及使用 Virtual Machine,透過一個 vagrantfile 你就能輕易的設定 VM 需要的硬體資源、synced folders…等,甚至你還能在 vagrantfile 中寫入 ruby 語法,一次創建多台 VM 。Vagrant 還提供了 VagrantCloud(已轉移至 atlas),讓大家可以將自己的 Box 放上 Cloud 交流。假如對於某些軟體的安裝苦手,也許你可以試著上 VagrantCloud 搜尋,因為也許早已有人上傳了合適的 Box 可以直接取用。
最後的關鍵字爲 Laravel Homestead。Laravel 是近年來快速走紅的 php framework,而 Homestead 則是 Laravel 官方推出的 Vagrant Box,在這個 Box 中,已經安裝了開發環境會需要的基本軟體。
- Ubuntu 14.04
- PHP 5.6
- HHVM
- Nginx
- MySQL
- Postgres
- Node (With Bower, Grunt, and Gulp)
- Redis
- Memcached
- Beanstalkd
- Laravel Envoy
- Fabric + HipChat Extension
- Blackfire Profiler 然而,Homestead 的便利之處還不只如此,Laravel 還為它編寫了特別的 vagrantfile,在 VM 創建或開機之時,Vagrant 會去查看 homestead.yaml 這個檔案,然後根據設定值幫你建立 synced folders、Nginx site conf…等。因此開發者們不用再煩惱創建 VM 之後,還要另外一一設定各 web site 的 Nginx site conf。(當然如果你的 website 需要特別的 Nginx site conf 設定值,你還是要自己微調。)
Laravel 官方目前已經將我上面提到的「特別的 vagrantfile」另外包成一個 Command Line Tool,因此現在若提到 Homestead,它包含兩個部分,分別是 Homestead(Vagrant Box)+ homestead(CLI Tool)。
Homestead(Vagrant Box)目前是 version 0.2.5(@ 2015/3/25) homestead(CLI Tool)目前則是 version 2.0.14(@ 2015/3/25)
我個人其實比較喜歡 homestead(CLI Tool)1.X 版,因為 1.X 版時,仍是使用 Vagrant 指令來操控 VM,而且 vagrantfile 你可以自己決定放置的路徑。但在 2.0 版,Laravel 將它變成了 Global 的指令 homestead,並且將 vagrantfile、homestead.yaml 這些檔案都藏了起來。官方的美意似乎是讓使用者只需透過 homestead 指令即可管理與使用 homestead(VM),就不用再煩惱檔案路徑的問題了。但大概我個人的控制欲比較強,這樣幫我把檔案藏起來,反而讓我不太喜歡。
有關 Laravel Homestead 的更多介紹與調教,我在去年的 PHP 也有 Day #10 中有分享了一場《快快樂樂用 Homestead 》,有興趣者可以參考簡報。
其實 PHP 也有 Day 每次都有錄影,但本人生性害羞就不嵌入影片了。