讓 VAGRANT 啓動並運行起來

這是一個幫助你快速入門Vagrant的初級教程。官方文檔也能夠很好的幫助你入門,可是本文更針對徹底零基礎的初學者而且會對某些問題直接切入正題。php

本文在任何方面都不會取代官方文檔,並且我建議讀完本文的人立刻閱讀官方文檔。所以,若是你符合如下條件便可閱讀本文:css

  • 你想知道Vagrant是什麼,它有什麼做用。html

  • 你想對爲何Vagrant會使你的開發環境增壓又一個初步的理解。node

  • 你想快速地在本地搭建一個PHP 5.4開發環境。nginx

注意! 若是你在尋找一個在Chef或者是Puppet中配置Vagrant的教程,本文並不適合你。本文也但願讀者對命令行和git有基本的理解。最後,本文是針對Mac用戶的,可是對PC用戶和Linux用戶也基本相同。git

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

在非專業人士眼裏,這意味着Vagrant拋棄開發環境中全部讓人頭痛的設置代之爲了一個單一的配置文件,你能夠選擇你的服務器所須要的特性予以保留。你將不會再被XAMMP,手動配置虛擬環境,或者使用FTP遠程編輯所卡住。sql

Vagrant 是一個強有力的工具,它的功能和價值超出這篇文章所覆蓋的範圍以及個人理解所能到達之處。這篇文章將介紹Vagrant中一些至關酷的事情,好比:shell

  • 在你的機器中使用PHP5.4版本的LAMP。數據庫

  • 如何在你的虛擬機中便捷訪問數據庫。

  • 如何自動更新你的hostfile,使用URL引用虛擬服務器(developing on http://localhost:8080 versus http://myprojectname.local)。

  • 一些必要的Vagrant命令。

  • 最好和最有用的Vagrant插件。

  • 連接到更多資源和預建的Vagrant書庫。

什麼是Vagrant和爲什麼我要甚爲關注?

簡單的緣由:

在本地開發爽。用Vagrant快,簡單,並可幫助你同時管理多個開發環境。

更長的緣由:

想象一下,你正在和聽說15人的團隊開發一個應用程序。這個程序真是狂棒!它使用Laravel的PHP框架,Redis和Memcached,ImageMagick和GD的PHP模塊,curl,MySQL和PostgreSQL, 甚至MongoDB。 另外,Laravel明確依賴PHP版本5.3.7或更高版本,以及mcrypt的PHP擴展。 

理想狀況下,你會但願團隊全部的15人在開發這個應用程序時,都是相同的開發環境。 可是不是全部的開發團隊,都有系統管理的專家或者培養一個系統管理。得到相同設置的開發環境多是一個很是艱鉅的任務。 最重要的是,有些人使用的是Mac,而其餘人則使用Linux或Windows。在它以前,開發人員會糾結在無盡的配置中,用電腦扔牆而筋疲力盡。

Vagrant將會替你管理好環境設置的種種,讓你將精力用在業務代碼的開發.

再來看一個場景,項目開發了一大半了發現須要安裝Beanstalkd以便處理隊列問題. 一般狀況下,你們會停下來從新配置環境並指望 Bean stalkd能正常運行. 有了Vagrant, 只須要將更新文件推送到配置文件上便可, 全部人只須要刷新 Vagrant就好了.太棒了!接下來你們就能使用隊列功能了. 這跟操做系統更沒什麼關係,無論是 Windows, Linux, 或是Mac,由於你們的操做環境都是同樣的.

服務提供者和服務消費者

我提到了Vargrant會幫你打點環境配置的一切問題,這不能以偏概全. Vagrant工做須要服務提供者和消費者的配合來管理環境配置. 提供者, 像是 VirtualBox, VMWare, Amazon AWS, 和Digital Ocean, 就是你的虛擬環境的宿主.假設這些環境是 VirtualBox 或VMWare, 又或者是,  Amazon亦或Digital Ocean都能方便的部署環境到雲端.

    

供應者 Provisioners 就是一些幫助你實現環境具體配置的工具軟件. 這在管理繁瑣的服務器配置方面發揮巨大做用. 有關服務器的配置基本都能被管理起來. 好比說 PHP, PHP Modules, Apache, Git, Vim, databases, logins, Xdebug, 等等. Vagrant最常使用的消費者是 Puppet 和Chef. 使用消費者管理環境配置的優點就是,在之後的環境配置時均可以使用先前的配置模板,不管是部署,發佈和生產過程當中均可以方面的使用起來.

好了! 開始使用LAMP 

下面將分步介紹在Mac上使用Vagrant 。我發如今在使用不一樣的OS, Vagrant 版本, Chef 版本, 以及virtual box 版本時會出現一些報錯.這方面我也不是專家,也沒辦法解答全部的報錯問題. 也許看起來每一個問題都會等致使使用的失敗,但奇怪的是全部組件合起來後卻能正確的運行. 另外, Vagrant support 確實提供了堅強的後盾,開發團隊 (beast developer?) 也在高頻率的發佈補丁版本.我建議在使用Vagrant時不要輕易升級軟件,尤爲是以前已經很順暢的運行在大家系統上的 . 開發環境就像是你的孩子同樣,無論有多麼不盡人意都得接受!

安裝插件

Note: 寫這篇文章時 Vagrant版本是1.4, VirtualBox版本 4.3.4, Ruby版本 1.9  Mac OS X Mavericks 10.9.

Vagrant安裝後,系統會彈出控制檯窗口來驗證. 能夠直接鍵入下面命令:

vagrant -v

 

 Vagrant安裝程序會自動添加相關路徑到 PATH. 安裝成功後,你會看到下面相似的圖片.

    Vagrant Version Command Line

以前說到過 Chef 消費者. 這裏咱們就是用Chef來替代 Puppet. 有個工具 Berkshelf用來管理 Chef’s 的組件(PHP, PHP Modules, Apache, Git, Vim, databases, logins, Xdebug, 等等.).本例中也是如此. Vagrant 或是Chef 並不必定要安裝 Berkshelf, 但最好安裝一下,以便後面Vagrant須要使用. 在 Mac上安裝使用下面命令:

gem install berkshelf

安裝Vagrant 插件

須要安裝的插件以下 Vagrant BerkshelfVagrant Hostmanager, 和Vagrant Omnibus.

 Vagrant Berkshelf 插件能夠實現和 Berkshelf cookbook manager 的通訊.

Vagrant Hostmanager插件能夠自動更新綁定IP的配置文件. 我我的很喜歡這個插件,它使得開發過程更清晰 ,URL像是 「http://myproject.local」 比直接使用IP「172.22.22.22″ 好得多.

 Vagrant Omnibus插件檢查Chef 安裝版本是否匹配. 本例中沒用到這個插件,但在排查Chef相關問題時,這個插件很是有用.我相信有天這個功能會被直接添加到Vagrant核心模塊裏.

安裝Vagrant插件十分簡單,在控制檯直接輸入命令便可:

vagrant plugin install vagrant-berkshelf
vagrant plugin install vagrant-hostmanager vagrant plugin install vagrant-omnibus

Clone a Vagrant LAMP Stack

你徹底能夠構建本身的LAMP環境,但基於本教程的間接性,咱們使用一套現成的環境. 我已經 作了一些修改,能夠配合個人 Vagrant, Mavericks, 和VirtualBox來使用.

定位到工做目錄鍵入下面命令:

git clone https://github.com/scotch-io/Vagrant-LAMP-Stack.git myfirstvagrantproject

 

進入剛纔的目錄,啓動 vagrant:

cd myfirstvagrantproject
vagrant up

 

這時候Vagrant會基於 「Vagrantfile」文件構建虛擬開發環境. 若是你還須要一些額外的配置,這個時候能夠進行配置. 我通常會作以下操做:

vagrant plugin install vagrant-berkshelf
vagrant plugin install vagrant-hostmanager vagrant plugin install vagrant-omnibus# IP Address for the host only network, change it to anything you like # but please keep it within the IPv4 private network range ip_address = "172.22.22.22" # The project name is base for directories # Will also be the hostname for your project (e.g.: http://projectname.local) project_name = "projectname"

 

Vagrant安裝完成之後,從瀏覽器訪問 http://projectname.local 或是172.22.22.22 會鏈接到你的工做環境(下面圖片上的url是以前老版本的,請注意):

    Vagrant LAMP Stack

這就完事了!如今 Vagrant已經起來了. 進入公共目錄下,就能夠開始碼字了. 任何公共文件夾上的更改都會同步到你的虛擬環境裏.

    Vagrant LAMP stack public folder in sublime.

也能夠打開 VirtualBox查看剛剛建立的虛擬環境和vagrant. 下面截圖是我寫本文時候的:

    Vagrant and VirtualBox

訪問數據庫

從上面的示例看, 咱們沒有安裝phpMyAdmin . 固然你能夠本身安裝phpMyAdmin . 可是我使用的是一款桌面客戶端應用. 像是 Sequel Pro 或Navicat.鏈接到數據庫的配置文件能夠經過Vagrantfile 或是示例的 index.php來配置. 鏈接PHP時,使用下面的配置:

Host: 		localhost
User:  root Password:  root Port: 3306

 

這是使用 Sequel Pro鏈接數據庫後的結果:

MySQL Host: 172.22.22.22 (or the IP used)User: root Password: root Port: 3306

 

因爲鏈接都是被處理爲遠程鏈接,若是你的vagrant配置有誤,就連不上數據庫. 這就可使用客戶端來作端口映射.下面會看到不少關於SSH的介紹

MySQL Host: localhost or 127.0.0.1User: root Password: root Port: 3306SHH Host: 172.22.22.22SSH User: vagrant SSH Key: ~/.vagrant.d/insecure_private_key (or your path to the private key)

 

    Vagrant Database

能夠看到這些信息直接從 vagrant ssh-config傳過來.

Vagrant 命令

 Vagrant的命令不少.官網上有 完整的列表, 這裏會介紹一些經常使用的.

vagrant up

vagrant up這會運行基於 Vagrantfile配置文件的vagrant. 我用來啓動和重啓開發環境.

vagrant suspend

vagrant suspend 這個能暫停當前環境操做. 最好在關機前作好這一步,以防下次開機配置沒法恢復.

Starting, Pausing, and Resuming: 啓動和重啓能夠直接使用vagrant up. 全部以前的狀態都會被保存起來.

vagrant destroy

vagrant destroy永久性的移除你的虛擬環境.

vagrant reload

vagrant reload 和vagrant reload --provision若是環境掛了,能夠重啓.若是加了--provision, 就會恢復資料庫. 這在使用Cookbooks 或Puppet移除或添加東西時頗有效果.

vagrant ssh

vagrant ssh全部公共文件夾中的操做都會同步到虛擬環境,但若是須要直接操做可以使用該命令.

vagrant ssh-config

vagrant ssh-config這個顯示鏈接到虛擬環境的全部配置項信息.

更新, 調試, 和相關資源

這就是有關 Vagrant運行的相關介紹. 本地開發,方便的數據庫鏈接, 使用 Chef 或 Puppet 配置管理虛擬機配置, 以及統一管理開發環境的相關配置.它的致命優勢就是,能夠直接將環境配置直接克隆到各類環境上,不管是開發環境或是生產環境. 這樣就能保證開發環境,調試環境,和生產環境的徹底一致.

若是在使用時還有什麼問題,能夠直接使用下面的 Vagrant LAMP :

若是使用中你須要問我任何問題,都歡迎,或者直接訪問下面資源:

若是你還在猶豫,就開始 部署本身的環境吧

一如既往的感謝閱讀本文的各位!但願你們在使用Vagrant時,玩的開心!

相關文章
相關標籤/搜索