2014/11/11

Laravel With Vagrant

一般 programmer 開發程式都是自己安裝自己的開發環境,不管在 Windows 或者是 Linux 都有所謂的懶人包,譬如說早期的 AppServXAMPP 以及 WampServer,Linux 的部分也有,但我通常都是用套件管理裝的所以就不舉例了,如果大家都是 Windows 並且強迫安裝同一套就還好,但如果 A 同事是 Windows 愛用者,B 同事用 Ubuntu,C 同事用 Mac,這樣就有點麻煩了,虛擬機器這個 solution 就可以確保所有的人開發環境都一樣,目前最佳解大概就是 Vagrant + VirtualBox 了。

Vagrant 可以說是 VirtualBox 的管理套件,以往我們要使用 VirtualBox,就是開一個環境,然後 download 某個 OS 的 ISO 檔案,掛載虛擬光碟,然後再進 VirtualBox 慢慢安裝,Vagrant 可以讓你把已經設定好的環境打包成一個 box,有點類似 ghost,所以你可以找人家包好的環境,例如說今天需要一個「真正」的 IE 6 的測試環境,你可以去 http://www.vagrantbox.es/ 或者是 https://vagrantcloud.com/ 搜尋 Windows XP,看到有人打包了 indows XP with IE6,我們就可以輕輕鬆鬆部屬這個環境,只要以下的指令即可。

vagrant add ie6_test http://aka.ms/vagrant-xp-ie6
vagrant ie6_test
vagrant up

甚至你可以自己把自己建置好的環境打包給別人使用,今天來示範一下怎麼快速建置一個 Laravel 環境,Laravel 有製作自己的 Vagrant Box 叫 Homestead,我來一步步操作怎麼在 Windows 建立官方的範例。

下載 laravel/homestead

vagrant box add laravel/homestead

當然你要在你的電腦先裝好 Vagrant 以及 VirtualBox,當他跑完安裝以後,可以執行 vagrant box list,如果有看到 laravel/homestead (virtualbox, 0.2.0) 代表你的 box 已經進來了,接下來我在 D:/ 建立一個叫 vm 的資料夾,進入 D:/vm,執行 git clone https://github.com/laravel/homestead.git Homestead,成功後看到 D:/vm/Homestead 資料夾,進去之後打開 Homestead.yaml 來修改,一般來說我們要 init 一個新的 box 都是修改 Vagrantfile 這個 config,而 Laravel 這個 yaml 就是他們獨立出來的客製化 config,預設如下:

---
ip: "192.168.10.10"
memory: 2048
cpus: 1

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Code
      to: /home/vagrant/Code

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public

variables:
    - key: APP_ENV
      value: loca

ip 就是該虛擬機器的 ip,memory 就是你要給這台機器占用多少記憶體,authorize 以及 keys 是 Laravel 驗證 ssh 使用,folders 是指 folder sync,也就是說,假設我們在 D:/ 建立了一個資料夾,將他跟 vm 裡面的開發資料夾做 sync 的話,我們就不用整天都要 ssh 進去該 vm 來改程式,只要改我們 D:/ 的資料夾以後 vm 裡面的開發資料夾就會同步 sync 了,sites 就是將 domain name 指定到開發資料夾,如果你沒有要修改 hosts 的話,這個東西就沒有作用了,variables 就不用管,所以修改過後的內容如下:

---
ip: "192.168.10.14"
memory: 1024
cpus: 1

authorize: C:/Users/YOUR_USER_NAME/.ssh/id_rsa.pub

keys:
    - C:/Users/YOUR_USER_NAME/.ssh/id_rsa

folders:
    - map: 'D:/vm/laravel'
      to: /home/vagrant/www

sites:
    - map: laravel.app
      to: /home/vagrant/www/laravel/public

variables:
    - key: APP_ENV
      value: local

如果你的驗證有問題的話,請執行 ssh-keygen -t rsa -C "you@homestead",如果順利起來的話,執行 vagrant ssh 就可以直接進入 server,如果你想用其他的 ssh 軟體,只要指定 ssh 127.0.0.1 2222 即可,帳號密碼都是 vagrant,我們進入剛指定的資料夾 /home/vagrant/www,開始建立我們的 Laravel 專案,執行 composer create-project laravel/laravel --prefer-dist,composer 會開始幫我們載入檔案,我們可以切換到 D:/vm/laravel 資料夾,應該多了一個 laravel 資料夾並且正在同步下載檔案,安裝完畢後在 browser 跑 192.168.10.14,如果看到 Laravel 歡迎畫面,表示打完收工。

Homestead 幫你打造了下列的環境:

  • Ubuntu 14.04
  • PHP 5.6
  • HHVM
  • Nginx
  • MySQL
  • Postgres
  • Node (With Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Laravel Envoy
  • Fabric + HipChat Extension

實用的 vagrant 指令

vagrant box list # 列出現在所有的 box
vagrant box remove xxx # 移除某個 box
vagrant destroy # 將某個目錄下的 vm 銷毀
vagrant status # 查看目前 vm 的狀況
vagrant halt # 關閉目前的 vm
vagrant reload # 重啟 vm

沒有留言: