使用vagrant来搭建跨平台的开发环境

一切的开始是vagrant的官方文档

1、安装必要的软件

1.1、安装vagrant

vagrant的官网地址是https://www.vagrantup.com/,官网页面如下

vagrant官网地址

安装文件就去download就好了,安装过程是傻瓜式的安装过程,下一步下一步的操作,如果需要更改安装地址修改即可,安装完毕之后使用命令行查看安装版本:

vagrant版本查看

出现上述的版本就说明vagrant是正确安装的

1.2、安装virtual box和Xshell

virtual box是虚拟机的运行环境,同类型的还有VMWare、Parallels 或 Hyper-V,但是只有virtual box是不收费的,这个软件的下载参考地址是:https://www.virtualbox.org/wiki/Downloads

virtual box下载

Xshell是一个安全终端模拟软件,这里不做过多的介绍,软件下载参考地址:http://www.downza.cn/soft/235505.html

Xshell下载参考地址界面

这两个软件都是傻瓜是的安装过程,安装路径最好自定义在不是C盘即可;

2、vagrant的常用命令

vagrant的使用参考地址是:https://www.vagrantup.com/docs/index.html
下面简单的介绍几个常用的命令

2.1、box相关的命令

命令 解释
vagrant box list 查看目前已经存在的box
vagrant box add 新增加一个box
vagrant box remove 移除一个box

2.2、虚拟机相关的命令

命令 解释
vagrant init 初始化配置文件vgrantfile
vagrant up 启动虚拟机
vagrant ssh ssh登录虚拟机
vagrant suspend 挂起虚拟机
vagrant reload 重启虚拟机
vagrant halt 关闭虚拟机
vagrant status 查看虚拟机状态
vagrant destory 删除虚拟机

3、虚拟机环境搭建

3.1、box文件依赖说明

vagrant搭建开发环境要依赖box文件,在官网上的findbox可以打开对应的box文件搜索站,地址是:https://app.vagrantup.com/boxes/search

box文件搜索

上面的provider标识的是提供给什么样的虚拟机管理软件使用的,比如virtualbox就是针对Virtual Box使用的,关于依赖的说法是vagrant可以使用在线或者离线的方式加载box文件来创建对应的虚拟环境

3.2、在线方式依赖box文件搭建虚拟机环境

下面使用“ubuntu/trusty64”为例子做虚拟机搭建的示例:

点击对应的数据条目使用最新的版本做处理,如下是这个box文件的加载配置示例:

ubuntu/trusty64所有版本
ubuntu/trusty64的某一个具体版本

上面图中的代码段

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.box_version = "20190110.0.3"
end

后面会使用到,下面是实操过程

创建一个test文件夹,并在这个文件夹中使用命令初始化

vagrant init

初始化完毕之后的文件夹下会多出一个‘Vagrantfile’文件,图中标记的代码段就是需要在这个文件中配置的

初始化完成

替换Vagrantfile文件中的内容为上面的代码段,并在代码段中新增IP地址的配置

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.box_version = "20190110.0.3"
  config.vm.network "private_network", ip: "192.168.10.10",auto_config: true
end

然后运行下面的命令

vagrant up

这个命令根据‘Vagrantfile’文件去启动虚拟机环境,过程如下:


启动过程

在上述的这个启动的过程中‘Virtual Box’软件中也会出现变化,运行栏会新增一个虚拟机环境:

新增的虚拟机环境

完成启动之后使用Xshell本地端口2222连接虚拟机,初始的用户名和密码是vagrant,配置和连接成功的示意图如下:

连接配置
连接成功并查看ip

3.3、离线方式依赖box文件搭建虚拟机环境

3.3.1、下载离线box文件并添加box

还是使用上面的“ubuntu/trusty64”为例子做虚拟机环境离线搭建的示例,首先去下载这个的离线box文件
下面有一个box文件下载的参考地址:http://www.vagrantbox.es/
对应的找到“trusty64”的下载地址是:https://github.com/sepetrov/trusty64/releases/download/v0.0.5/trusty64.box
下载完毕之后放在指定的磁盘路径上,这里放在了D盘的VM目录下:

下载的box文件

有了box使用下面的命令添加box

vagrant box add test trusty64.box

其中的test是为添加之后的box设定的名字,可以根据实际情况修改,添加完毕之后使用下面的命令查看新增加的box

vagrant box list
添加查看box
3.3.2、基于离线box创建虚拟机环境

上面已经添加了名字为test的box,这里就基于这个box创建虚拟机

创建一个文件夹,并在文件夹中使用下面的初始化命令

vagrant init test

初始化命令之后会生成Vagrantfile文件,在其中添加ip的配置设置

config.vm.network "private_network", ip: "192.168.10.11",auto_config: true

创建文件夹和执行初始化的过程图如下:


离线安装下创建文件夹和执行初始化

然后就是启动这个虚拟机环境

vagrant up

启动过程响应和Virtual Box中的显示如下:


离线安装下的启动过程

4、虚拟机内的开发环境搭建

上面的过程已经介绍了虚拟机的创建,下面使用Xshell连接虚拟机并搭建php的开发环境,为了方便,下面的安装过程均使用命令行的方式安装对应的软件或者包文件。

4.1、备份和替换软件源

备份命令

cp /etc/apt/sources.list /etc/apt/sources.list.bak 

编辑替换源地址

sudo vim /etc/apt/sources.list

没有安装vim的使用apt-get install vim安装即可,安装之前最好先更新apt-get update,更换的源地址是:

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

替换之后再次更新apt-get update

4.2、安装apache和nginx

apache和nginx是服务器软件,一般来说安装一个即可,这里两个都安装做演示用。
安装nginx:

apt-get install nginx

安装完毕之后已经启动了,查看状态和浏览器访问示意:


nginx状态

浏览器访问

安装apache

apt-get install apache2

安装完毕之后启动查看运行的状态和访问示意:


apache状态

浏览器访问

4.3、安装mysql

服务端安装命了

apt-get install mysql-server

服务端安装会提示输入管理员密码,自己设置一个即可
客户端安装命令

aot-get install mysql-client

安装完毕之后使用mysql -uroot -p输入密码登录查询mysql的版本

mysql登录和版本查询

4.4、安装php

这里安装PHP5的版本,整个记录描述的重点不是php的版本而是可移植的开发环境搭建过程
安装命令

apt-get install php5-cli

安装完毕之后可以查看php的版本:

php版本查看

安装几个常用的扩展:

apt-get install php5-mcrypt
apt-get install php5-mysql
apt-get install php5-gd

4.5 配置apache和nginx支持php的解析

4.5.1、支持nginx的fastcgi模式

安装php5-cgi和php5-fpm

apt-get install php5-cgi php5-fpm

安装完毕之后修改连接池子的配置,原来默认的是sock,现在修改为172.0.0.1:9000的监听

vim /etc/php5/fpm/pool.d/www.conf

屏蔽原来的sock,修改为127.0.0.1:9000


修改fpm监听配置

然后重启fpm

sudo /etc/init.d/php5-fpm restart

接下来就是修改nginx的配置文件

vim /etc/nginx/sites-available/default

这里面有两个地方需要修改:
1)新增默认解析文件配置,也就新加一个index.php

新增index.php到解析配置处

2)参照放开nginx解析PHP的配置部分,这一部分初始是注释掉的

nginx解析PHP部分放开

然后重启nginx

sudo /etc/init.d/nginx restart

之后再nginx根目录下新增index.php文件,里面对phpinfo函数的输出

cd /usr/share/nginx/html
echo '<?php phpinfo(); ?>' > index.php

浏览器访问效果:


nginx浏览器解析php效果
4.5.1、支持apache的PHP模块

安装模块

apt-get install libapache2-mod-php5

安装完毕之后启动rewrite

sudo a2enmod rewrite

浏览器的访问效果:


apache的浏览器访问效果

4.6、环境配置的额外说明

经过上述的安装,基本自定义出了一个自己常用的开发环境,如果需要更加个性化的环境,上述的php,mysql,apache或者nginx均可以使用源码的方式来进行安装

5、vagrant虚拟机配置优化

详细的vagrant配置和使用参见g官网文档https://www.vagrantup.com/docs/index.html

下面列举三个优化的点

5.1、设置虚拟机端口转发

虚拟机端口转发参考链接
基础配置的示例代码:

Vagrant.configure("2") do |config|
  config.vm.network "forwarded_port", guest: 80, host: 8080
end

guest表示的是虚拟机端口,host表示的是宿主机端口,设置示例如下:


端口转发示例

将虚拟机80和8888端口分别转发到宿主机的8888和8889端口,然后使用vagrant reload命令重载虚拟机,启动过程中的端口转发如下:

启动过程中的端口转发

重启之后再浏览器中使用宿主机的8888和8889端口就可以访问虚拟机的80和8888端口了,其中已经把虚拟机的apache服务器的访问端口设置为8888了,下面是在宿主机中的访问注意看浏览器的地址栏:


nginx转发端口访问

apache转发端口访问

5.2、共享文件夹设置

共享文件夹参考链接
基础用法示例:

Vagrant.configure("2") do |config|
  # other config here
  config.vm.synced_folder "D:/readbooknote", "/home/www"
end

重启vagrant reload过程中的共享文件夹和实际虚拟机中的示例如下:

重启过程中的共享文件夹

实际虚拟机中的共享文件

5.3 设置虚拟机ip

虚拟机的ip设置参考,这个里面有私有ip和公有ip的设置参考,下面是开发环境中的私有ip设置示例:

Vagrant.configure("2") do |config|
  # other config here
  config.vm.network "private_network", ip: "192.168.10.11",auto_config: true
end

重启vagrant reload之后就可以在宿主机上使用设置的ip直接访问虚拟机,就不需要通过宿主机端口转发了,直接访问如下,请注意地址栏:

nginx私有ip访问

apache私有ip访问

6、vagrant打包分发操作

6.1、打包分发操作

上述的5个小节中比较详细的说明了vagrant创建虚拟机并搭建lamp或者lnmp开发环境的过程,整个过程就是为了最终能够打包这个环境做准备的,否则每一次都需要重复前面的操作也就失去了vagrant提供的便利性。
box文件搜索链接中能够搜索到的包文件就是通过打包分发之后以便开发者下载并基于下载文件打造自己的开发环境,大量的节省开发环境的搭建时间,但是我们总想拥有自己自定义的开发环境,这样的情况下经过上述的过程、引入自己使用的开放框架代码并打包成box文件,将box文件通过物理存储盘、网盘或者团队工作服务器进行上传分发,无论是新入职的员工搭建开发环境,还是更新已有开发环境都能在很短的时间内实现了。

下面是实际的操作过程,打包命令如下

//不带参数虚拟机被打包成名为package.box的文件
vagrant package 
//带 --output参数被打包为指定名字的.box文件
vagrant package --output  xxx.box

打包之前需要停止虚拟机且最好将Vagrantfile文件中的ip设置屏蔽掉,或者增加auto_config参数,这个参数的值设置为true,否者其他人使用生成的.box文件创建开发环境的时候会出现连接错误

打包过程和产生的文件如下:

打包过程和产生的box文件

现在有了自己的自动以的.box文件,那么就可以参考3.3节中的操作去快速构建开发环境了

6.2、包更新和虚拟机更新

如果开发环境需要更新,分为两个部分处理:
1)新用户
使用备份的虚拟机重新安装先关的软件、包文件或者其他必须的文件,处理完之后重新打包分发,新用户拿到box文件之后就可构建更新后的开发环境;
2)已经在使用的用户
使用provision配置来安装处理自己需要的东西(当然也可以直接手动安装),这个的参考说明见地址,下面以redis的安装为例说明更新的操作

  config.vm.provision "shell", inline: <<-SHELL
    apt-get install -y redis-server
  SHELL

配置完毕之后使用vagrant reload --provision命令重启,注意这里的新增参数--provision的使用

重启和安装redis的过程

验证redis安装成功

7、参考文献

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

推荐阅读更多精彩内容