Vagrant 虚拟环境利器

开发环境之痛

软件开发少不了就是开发环境,Web开发对环境的依赖则更大。Web开发中,无论前端还是后端,都少不了与服务器的通信。通常情况,对于前端开发的同学,尤其是Restfull架构大行其道的情况下,前端往往只需要接口文档。不需要在本地再搭建后端服务。现实很残酷,为了接口调试,前端开发往往还需要在本地搭建一个后端服务。当然也有同学喜欢在本地使用代理到远端的开发服务器。不管怎么样,调试的时候还是少不了后端服务。此外,前端又很少知道后端的环境如何搭建。

对于后端,搭建环境虽然不像前端那样迷茫和小心翼翼。可是开发的机器环境和生产部署的环境不一致,往往会出现

代码在我机子上运行没有问题 (But it works on my machine)

为什么push到服务器就跪了。并且每当有新人入职,再配置一遍开发环境也挺闹心的。

为了一劳永逸的解决开发环境,Vagrant应运而生。 当然现在Docker也可以解决类似的问题。

Vagrant 安装

Vagrant可以看成是一个高级的虚拟机桥梁,通过vagrant方便的与虚拟机共享文件。即将宿主机的文件夹映射到虚拟机的文件系统里。还可以映射网络端口,设置通信的私有网络等。vagrant依赖与虚拟机,目前支持的虚拟化方式很多。与Virtualbox、VMware、Docker都能很好的工作。本文使用的环境是 MacOS X 10.11Virtaulebox 5.2.0 Vagrant 1.8.0

在mac下安装vagrant和virtualbox都比较简单,访问官网download安装dmg包安装即可。下载地址为

加载 Vagrant box

下载box镜像

Vagrant可以看成是一个高级的虚拟机镜像管理器。一套完整的环境镜像称之为Box。任何人都可以制作属于自己的box。这个box就是所谓的开发环境,包含系统和相关的软件。由于我们是从零开始,就下载一个官网ubuntu14.04的镜像。除了官网提供了box镜像下载,更多的镜像可以访问这里

添加box镜像

vagrant可以添加不同的box镜像,然后根据这个镜像来创建初始化虚拟环境。使用如下命令添加box

$ vagrant box add ubuntu14 ~/Download/virtualbox.box

ubuntu14是添加之后的box名,可以随意命名。~/Download/virtualbox.box则是之前下载的box镜像。上面的做法是离线添加,vagrant其实也支持在线添加box,只需把box的路径换成官方的box名。类似包管理的方式。

移除box镜像

添加box镜像只需要一次就行,如果不需要了,可以使用如下命令查看box列表和移除box。

$ vagrant box list
ubuntu14 (virtualbox, 0)
$ vagrant box remove ubuntu14

初始化环境

创建虚拟环境

vagrant可以创建不同的box,然后根据box来初始化环境。创建一个ubuntu14的环境。

$ mkdir ~/ubuntu
$ cd ~/ubuntu
$ vagrant init ubuntu14

vagtant init 加上 box 名,就能创建基于该box的环境。init命令执行之后,会在当前目录生成一个Vagrantfile文件。

启动虚拟机

编辑 Vagrantfile 文件,配置共享文件夹和私有网络访问:

# -*- mode: ruby -*-
# vi: set ft=ruby :

configure

Vagrant.configure(2) do |config|
  ...

  # 配置私有网络
  config.vm.network "private_network", ip: "192.168.33.10"

  # 将当前vagrant环境的目录映射到虚拟机里的 /vagrant,并指定nfs共享。
  config.vm.synced_folder ".", "/vagrant", :nfs => true

  ...
end

有一些vagtant的box或者宿主机并不支持nfs共享,需要安装如下包:

宿主linunx:

$ sudo apt-get install nfs-kernel-server nfs-common 

虚拟机:

$ sudo apt-get install nfs-common

当然,后者命令的执行,必须先启动虚拟机,才能执行安装嘛。启动虚拟机很简单,运行:

$ vagrant up

虚拟机将会启动,一堆配置输出,中途需要授权设置虚拟机的密码。如果在设置mount 共享文件夹出现如下错误:

Failed to mount folders in Linux guest. This is usually beacuse
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group apache | cut -d: -f3`,dmode=777,fmode=777 /vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g apache`,dmode=777,fmode=777 /vagrant /vagrant

可能就是需要给虚拟机安装nfs-common

登录虚拟机

vagrant和宿主机会在虚拟机启动的时候生成 ssh相关的配置。可以直接使用ssh登录虚拟机:

$ vagrant ssh

登录虚拟机之后,可以执行刚才的安装 nfs-common。然后重启虚拟环境即可。

$ vagrant reload

任何修改了Vagrantfile文件的配置,都需要reload虚拟环境才能生效。

加下来,查看虚拟环境的/vagrant将会看见该文件夹下也有一个Vagrantfile文件。并且在该文件夹创建的文件,都将在宿主机和虚拟环境一模一样,两个文件夹实现了nfs共享。

关闭和销毁虚拟环境

当不需要使用虚拟环境的时候,可以使用如下命令关闭虚拟机

$ vagrant halt

关闭之后可以使用vagrant up再一次启动虚拟机。当不需要该环境的时候,可以使用vagrant destroy 销毁虚拟机。

登录虚拟机,安装nginx,然后访问192.168.10.33,即可看见宿主主机访问虚拟环境啦

在虚拟机中安装nginx

$ sudo apt-get install nginx

在宿主机访问192.168.10.33即可看见nginx处理的请求。

打包

创建了虚拟环境之后,这个环境就可以模拟生产环境进行部署web应用程序。然后打包这个环境成为新的box。

$ vagrant package --output new_ubuntu14.box --vagrantfile Vagrantfile

再分发给不同的人,当他们也安装了vagrant和virutalbox,就能依次创建一个box,并初始化和生产环境一致的开发环境啦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容

  • 开发需要在各种系统上进行开发任务,运维则需要在各种系统上学习工具使用。因此,虚拟机恐怕也是 IT 人员最常使用的工...
    李广慧阅读 5,441评论 3 24
  • Vagrant是什么 Vagrant是一个软件,可以自动化虚拟机的安装和配置流程。目前市面上个人PC的主流操作系统...
    北魏企鹅阅读 29,793评论 3 40
  • 1,介绍Vagrant 我们做web开发的时候经常要安装各种本地测试环境,比如apache,php,mysql,r...
    meng_philip123阅读 2,424评论 0 12
  • Vagrant 简介 Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/...
    Airing阅读 6,844评论 12 23
  • 走过青春年少,怀念我们旧日的时光,曾经遗留的记忆,不知该怎样收场。 于是转身,寻找未来的方向。 这样的风轻云淡,如...
    游离的村姑阅读 358评论 0 0