让 VAGRANT 启动并运行起来
这是一个帮助你快速入门Vagrant的初级教程。官方文档也可以很好的帮助你入门,但是本文更针对完全零基础的初学者并且会对某些问题直接切入正题。
本文在任何方面都不会取代官方文档,而且我建议读完本文的人马上阅读官方文档。因此,如果你符合以下条件即可阅读本文:
你想知道Vagrant是什么,它有什么作用。
你想对为什么Vagrant会使你的开发环境增压又一个初步的理解。
你想快速地在本地搭建一个PHP 5.4开发环境。
注意! 如果你在寻找一个在Chef或者是Puppet中配置Vagrant的教程,本文并不适合你。本文也希望读者对命令行和git有基本的理解。最后,本文是针对Mac用户的,但是对PC用户和Linux用户也基本相同。
Vagrant 是一个可创建轻量级、高复用性和便于移植的开发环境的工具。
在非专业人士眼里,这意味着Vagrant抛弃开发环境中所有让人头痛的设置代之为了一个单一的配置文件,你可以选择你的服务器所需要的特性予以保留。你将不会再被XAMMP,手动配置虚拟环境,或者使用FTP远程编辑所卡住。
Vagrant 是一个强有力的工具,它的功能和价值超出这篇文章所覆盖的范围以及我的理解所能到达之处。这篇文章将介绍Vagrant中一些相当酷的事情,比如:
在你的机器中使用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. 安装成功后,你会看到下面类似的图片.

之前说到过 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 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
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已经起来了. 进入公共目录下,就可以开始码字了. 任何公共文件夹上的更改都会同步到你的虚拟环境里.

也可以打开 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的命令很多.官网上有 完整的列表, 这里会介绍一些常用的.
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时,玩的开心!
本文地址:https://www.oschina.net/translate/get-vagrant-up-and-running-in-no-time
原文地址:http://scotch.io/tutorials/get-vagrant-up-and-running-in-no-time
让 VAGRANT 启动并运行起来的更多相关文章
- Raft详解-启动后运行期间代码
Raft启动后运行期间主要执行两个函数:1.状态监测和转化 func (rf *Raft) Loop() { // Set out as a follower TimeOutConst := 0 fo ...
- 如何在ASP.NET Core程序启动时运行异步任务(3)
原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...
- 如何在ASP.NET Core程序启动时运行异步任务(2)
原文:Running async tasks on app startup in ASP.NET Core (Part 2) 作者:Andrew Lock 译者:Lamond Lu 在我的上一篇博客中 ...
- 如何在ASP.NET Core程序启动时运行异步任务(1)
原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目 ...
- 服务器启动之后运行脚本在/etc/rc.d/rc.local中配置
服务器启动之后运行脚本在/etc/rc.d/rc.local中配置 # ! /bin/sh # 启动svn /usr/bin/svnserve -d -r /var/svnroot/
- spring boot启动STS 运行报错 java.lang.NoClassDefFoundError: ch/qos/logback/classic/LoggerContext
spring boot启动STS 运行报错 java.lang.NoClassDefFoundError: ch/qos/logback/classic/LoggerContext 学习了: http ...
- 探索ASP.Net Core 3.0系列四:在ASP.NET Core 3.0的应用中启动时运行异步任务
前言:在本文中,我将介绍ASP.NET Core 3.0 WebHost的微小更改如何使使用IHostedService在应用程序启动时更轻松地运行异步任务. 翻译 :Andrew Lock ht ...
- Could not attach to pid : "xx"最近启动Xcode运行项目都会出现这个问题,再次启动或者多启动几次,就可以正常运行工程了。
最近启动Xcode运行项目都会出现这个问题,再次启动或者多启动几次,就可以正常运行工程了. 普及一下:PID(进程控制符)英文全称为Process Identifier,它也属于电工电子类技术术语. ...
- ASP.NET Core 3.x启动时运行异步任务(一)
这是一个大的题目,需要用几篇文章来说清楚.这是第一篇. 一.前言 在我们的项目中,有时候我们需要在应用程序启动前执行一些一次性的逻辑.比方说:验证配置的正确性.填充缓存.或者运行数据库清理/迁移等 ...
随机推荐
- 【js】++i和i++
解析: i++ 执行完语句后再加1 ++i 先加1再执行后面的语句 例如 var i=0; ++i 的值为1 i++的值为0 注意:不管前置++还是后置++,i的值都会发生变化,值为1 例子 1.va ...
- Kmeans基本思想
https://blog.csdn.net/zjc_game_coder/article/details/78595833 Kmeans算法的基本思想:看如下图: 解决小样本 .非线性及高维模式识别问 ...
- Arduino IDE for ESP8266 项目云盒子(2)一键自配置+网页服务器
https://item.taobao.com/item.htm?spm=a230r.1.14.20.eYblO3&id=521945102409&ns=1&abbucket= ...
- day12 Python字典
类:dict #字典是无序的 1.前戏 info = { "k1": "v1", # 键值对 "k2": "v2" } ...
- oracle 定期迁移分区表数据(不落地)
[oracle@SJ ~]$ cat /home/oracle/JY_SJ.sh #!/bin/bashsource /home/oracle/.bash_profileSDATE=$(date + ...
- highchart 对于顶端刻度丢失问题
title: { text: '', align: 'center' }, labels: { overflow: 'justify', formatter: function () { return ...
- protobuf可变长编码的实现原理
protobuf中的整数,如int32.int64.uint32.uint64.sint32.sint64.bool和enum,采用可变长编码,即varints. 这样做的好处是,可以节省空间.根据整 ...
- 稳压二极管&TVS二极管
稳压二极管 稳压二极管利用的特性是:二极管被反向击穿之后,随着电流的变化,稳压二极管两端电压维持不变的特性: 普通二极管反向击穿后就坏了,但是稳压二极管却可以恢复,而且在被击穿后处在正常的工作状态: ...
- Android学习之基础知识四-Activity活动2讲
一.在活动(activity)中添加Toast显示: 1.Toast作用:Android系统提供的一种非常好的提醒方式,将一些短小的信息提供给用户,这些信息会在一段时间后自动消失,不会占用任何屏幕空间 ...
- linux内存源码分析 - 伙伴系统(初始化和申请页框)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 之前的文章已经介绍了伙伴系统,这篇我们主要看看源码中是如何初始化伙伴系统.从伙伴系统中分配页框,返回页框于伙伴系 ...