1. 程式人生 > >使用 vagrant 搭建自己的 Laravel 開發環境 for windows

使用 vagrant 搭建自己的 Laravel 開發環境 for windows

什麼是vagrant

網上對vagrant的介紹有很多,對於什麼是vagrant這個問題,一般有這些說法:

Vagrant 是一個可建立輕量級、高複用性和便於移植的開發環境的工具。

Vagrant 是一款用來構建虛擬開發環境的工具,非常適合 php/python/ruby/java 這類語言開發 web 應用,“程式碼在我機子上執行沒有問題”這種說辭將成為歷史。

而我認為的vagrant是這樣的:

vagrant 是一個虛擬機器管理的工具。利用這個工具,你可很方便的管理你的虛擬機器,包括新建、銷燬、啟動、過載以及與本地檔案的共享都非常方便。你可以將你配置好的開發環境(包括作業系統以及各種安裝程式及配置)打包成box包,也可以從網上下載配置好的box包,利用這些box包,樂意非常方便地新建基於這個包的虛擬開發環境。

安裝vagrant

  1. 安裝Vagrant,下載並安裝Vagrant。安裝完成之後,預設情況下C:\HashiCorp\Vagrant\bin已加入環境變數(沒有的話可以手動加入),因此你可以下cmd下輸入vagrant -v下檢視vagrant的安裝目錄
  2. 下載box檔案。box檔案裡面打包了你的作業系統環境以及各種安裝程式,下面的幾個常用box檔案的下載地址:
    Ubuntu precise 32 VirtualBox:http://files.vagrantup.com/precise32.box
    Ubuntu precise 64 VirtualBox:http://files.vagrantup.com/precise64.box

    上面的包裡面只有Ubuntu作業系統,沒有其他開始程式,使用這個box你還需要在你的虛擬機器上重新配置你的開發環境

到此你的vagrant已經安裝好了,下面是vagrant的配置與使用

vagrant配置

  1. 新增box包,在cmd命令下,執行如下命令
//新增Ubuntu的包
vagrant box add Ubuntu C:\precise32.box \\ 'Ubuntu'是包的名字,'C:\precise32.box'是包的地址。
//新增homestead的包
vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead 

Ubuntu的包裡面只是一個Ubuntu的作業系統,並沒有其他的軟體;laravel/homestead包裡面包含了開發laravel應用的一些環境,主要包括:
+ Ubuntu 14.04
+ Git
+ PHP 7.0
+ HHVM
+ Xdebug
+ Nginx
+ MySQL
+ SQLite 3
+ Postgres
+ Composer
+ Node(With PM2, Bower, Grunt, and Gulp)
+ Redis
+ Memcached
+ Beanstalkd
+ Blackfire Profiler
新增完成之後你可以在cmd下執行vagrant box list檢視你新增的所有box包。
2. 初始化vagrant環境
進入你的工作目錄,執行如下程式碼

vagrant init laravel/homestead

在此目錄下,將會生成基於laravel/homestead包的虛擬環境。預設情況下,將會生成一個Vagrantfile的檔案,裡面是關於這個虛擬環境的配置。具體配置將會在下面講到。
3. 啟動虛擬機器

vagrant up

這樣你就能啟動你的虛擬機器了。
4. 連線到虛擬機器

vagrant ssh

當然你也可以使用xshell的工具進行連線,主機:127.0.1.1,埠號:2222,使用者名稱:vagrant,密碼:vagrant

虛擬主機配置

Vagrantfile檔案裡面包含了你相關虛擬主機的配置,只要把相應配置前面的註釋刪掉相應的配置就能生效。

1. 網路相關配置

從訪問虛擬的網路,vagrant主要提供了三種訪問方式

埠對映
較為常用是埠對映,就是將虛擬機器中的埠對映到宿主機對應的埠直接使用 ,在Vagrantfile中配置:

config.vm.network :forwarded_port, guest: 80, host: 8080

guest: 80 表示虛擬機器中的80埠, host: 8080 表示對映到宿主機的8080埠。這樣你就能在你的機器上通過訪問127.0.0.1:8080訪問你的虛擬主機了

私有網路
如果需要自己自由的訪問虛擬機器,但是別人不需要訪問虛擬機器,可以使用private_network,併為虛擬機器設定IP ,在Vagrantfile中配置:

config.vm.network "private_network", ip: "192.168.33.10"

192.168.33.10 表示虛擬機器的IP,多臺虛擬機器的話需要互相訪問的話,設定在相同網段即可。

公共網路
如果需要將虛擬機器作為當前區域網中的一臺計算機,由區域網進行DHCP,那麼在Vagrantfile中配置:

config.vm.network :public_network

目錄對映

既然是開發環境,那麼開發工作肯定還是需要在本地完成,而不是都要進到虛擬機器中去完成,虛擬機器就好好在後臺執行服務就好了,不然就本末倒置了,所以這裡就需要使用目錄對映功能,將本地的目錄對映到虛擬機器的對應目錄,本地檔案的更改自動同步到虛擬主機中。在Vagrant進行目錄對映的配置如下:

  config.vm.synced_folder "www", "/srv/www"

前面的引數 “www” 表示的是本地的路徑,這裡使用對於工作目錄的相對路徑,這裡也可以使用絕對路徑,比如: “d:/www/”。後面的引數 “/srv/www” 表示虛擬機器中對應對映的目錄。

執行指令碼

雖然不是必須,但是如果有需要在啟動時執行一些指令碼(環境的安裝或者有些服務的啟動需要在完成目錄對映之後進行),可以編輯指令碼,類似如下(摘自Vagrant Document):

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www

儲存在和Vagrantfile相同目錄,檔名自取(如 boot.sh),然後在Vagrantfile中新增:

config.vm.provision :shell, :path => "boot.sh"

虛擬主機記憶體和cpu核心

不進行虛擬主機記憶體配置的話,vagrant將會根據系統環境自動分配虛擬主機記憶體。這樣有可能會吃掉太多的系統記憶體,通過以下配置,可設定虛擬主機的記憶體:

config.vm.provider "virtualbox" do |vb|
      #Display the VirtualBox GUI when booting the machine
      #vb.gui = true
      #Customize the amount of memory on the VM:
      vb.memory = "1024"
      vb.cpus = 2
      vb.name = "my_vm"
  end

連線資料庫

在本地連線到你的虛擬主機的資料庫,要根據你的網路配置,比如我使用的是192.168.33.10的私有網路配置,則連線到資料庫的配置如下:

主機名:192.168.33.10
埠號:3306
使用者名稱:homestead
密碼:secret

vagrant常用命令

  • vagrant up (啟動虛擬機器)
  • vagrant halt (關閉虛擬機器——對應就是關機)
  • vagrant suspend (暫停虛擬機器——只是暫停,虛擬機器記憶體等資訊將以狀態檔案的方式儲存在本地,可以執行恢復操作後繼續使用)
  • vagrant resume (恢復虛擬機器 —— 與前面的暫停相對應)
  • vagrant destroy (刪除虛擬機器,刪除後在當前虛擬機器所做進行的除開Vagrantfile中的配置都不會保留)

當在啟動Vagrant後,對於虛擬機器有進行過安裝環境相關的配置,如果並不希望寫在Vagrant的啟動shell裡面每次都重新安裝配置一遍,可以將當前配置好的虛擬機器打包成box。

vagrant package --output NAME --vagrantfile FILE
//可選引數:
//--output NAME  (可選)設定通過NAME來指定輸出的檔名
//--vagrantfile FILE:(可選)可以將Vagrantfile直接封進box中