这是一个帮助你快速入门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快,简单,并可帮助你同时管理多个开发环境。
想象一下,你正在和听说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. 使用消费者管理环境配置的优点就是,在之后的环境配置时均可以使用先前的配置模板,不管是部署,发布和生产过程当中均可以方面的使用起来.
下面将分步介绍在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. 安装成功后,你会看到下面相似的图片.
以前说到过 Chef 消费者. 这里咱们就是用Chef来替代 Puppet. 有个工具 Berkshelf用来管理 Chef’s 的组件(PHP, PHP Modules, Apache, Git, Vim, databases, logins, Xdebug, 等等.).本例中也是如此. Vagrant 或是Chef 并不必定要安装 Berkshelf, 但最好安装一下,以便后面Vagrant须要使用. 在 Mac上安装使用下面命令:
gem install berkshelf
须要安装的插件以下 Vagrant Berkshelf, Vagrant 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
你彻底能够构建本身的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已经起来了. 进入公共目录下,就能够开始码字了. 任何公共文件夹上的更改都会同步到你的虚拟环境里.
也能够打开 VirtualBox查看刚刚建立的虚拟环境和vagrant. 下面截图是我写本文时候的:
从上面的示例看, 咱们没有安装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 ssh-config传过来.
Vagrant的命令不少.官网上有 完整的列表, 这里会介绍一些经常使用的.
vagrant up这会运行基于 Vagrantfile配置文件的vagrant. 我用来启动和重启开发环境.
vagrant suspend 这个能暂停当前环境操做. 最好在关机前作好这一步,以防下次开机配置没法恢复.
Starting, Pausing, and Resuming: 启动和重启能够直接使用vagrant up. 全部以前的状态都会被保存起来.
vagrant destroy永久性的移除你的虚拟环境.
vagrant reload 和vagrant reload --provision若是环境挂了,能够重启.若是加了--provision, 就会恢复资料库. 这在使用Cookbooks 或Puppet移除或添加东西时颇有效果.
vagrant ssh全部公共文件夹中的操做都会同步到虚拟环境,但若是须要直接操做可以使用该命令.
vagrant ssh-config这个显示链接到虚拟环境的全部配置项信息.
这就是有关 Vagrant运行的相关介绍. 本地开发,方便的数据库链接, 使用 Chef 或 Puppet 配置管理虚拟机配置, 以及统一管理开发环境的相关配置.它的致命优势就是,能够直接将环境配置直接克隆到各类环境上,不管是开发环境或是生产环境. 这样就能保证开发环境,调试环境,和生产环境的彻底一致.
若是在使用时还有什么问题,能够直接使用下面的 Vagrant LAMP :
若是使用中你须要问我任何问题,都欢迎,或者直接访问下面资源:
若是你还在犹豫,就开始 部署本身的环境吧。
一如既往的感谢阅读本文的各位!但愿你们在使用Vagrant时,玩的开心!