本地开发环境是每一位服务端开发者(特别是 PHP 程序员) 很头疼的事情。
- 本机搭建?污染本机环境,坏掉了重置贼麻烦,而且也面临安装环境越多 垃圾文件也越多(重点是无从下手,不知道怎么删)
- 虚拟机搭建?的确是一个办法,也是很多人采取的方案,但是不够快捷,销毁,重置麻烦。
- 这时候 Vagrant 出现了。是的本文重点就是 vargrant
- 为啥不用 docker?楼主在经历了本机-虚拟机-docker 之后才写的本文,docker 不是不好,但是我遇到了一个 io 瓶颈问题,死活解决不了,尤其使用 laravel 框架,加载一堆文件,更是严重,经常一个接口请求消耗 1~4 秒时间,然后各种百度,结果就是 docker 文件系统和 Mac(windows)的文件系统不兼容。其实 vagrant(包括虚拟机,只要你在虚拟环境里访问宿主机的文件)也有 io 问题,楼主也差点放弃。。。还好最终研究出了一个还算可以的方案。
- 很简单就是使用 nfs,下面进入正题。先补充 Vagrant 知识
Vagrant 常用命令
- Vagrant init # 初始化
- Vagrant up # 启动虚拟机
- Vagrant halt # 关闭虚拟机
- Vagrant reload # 重启虚拟机
- Vagrant provision && Vagrant reload #使配置生效
- Vagrant reload --provision #和上面命令一致
- Vagrant SSH # SSH 至虚拟机
- Vagrant suspend # 挂起虚拟机
- Vagrant resume # 唤醒虚拟机
- Vagrant status # 查看虚拟机运行状态
- Vagrant global-status 显示当前用户 Vagrant 的所有环境状态
- Vagrant destroy # 销毁当前虚拟机
- Vagrant package 打包命令,把当前的运行的虚拟机环境进行打包
- Vagrant plugin 用于安装卸载插件
box 管理命令
- Vagrant box list # 查看本地 box 列表
- Vagrant box add # 添加 box 到列表
- Vagrant box remove # 从 box 列表移除
大概这么多吧,若有遗漏,后续补充,下面进入搭建过程,楼主在 win 平台和 Mac 平台都进行了实验。。。Mac 平台更好一些 ~
开始之前说下准备工作吧!
- 下载 virtual box
- 下载 Vagrant
- 上面俩软件需要安装下,很简单双击一直下一步即可 Mac 平台也一样)
初始化 Vagrant
vagrant init
命令执行完,会生成一个配置文件
Vagrantfile
生成配置文件,然后你直接手动修改配置文件(不要问为什么,听我的,后面你就明白了),主要改下面几个点
- 使用的镜像 centos/7 :一个 centos7.8 纯净版
config.vm.box = "centos/7"
- 这个 IP 将来就是你这虚拟机的访问 ip 了,本机 hosts 解析到这里即可
config.vm.network "private_network", ip: "192.168.33.10"
- 这个 ip 提供内网其他机器访问你的,可以是 DHCP
config.vm.network "public_network", ip: "10.0.16.99"
- 共享文件夹 第一个本机 第二个虚拟机(win 不会生效,mac 下可以直接生效)
config.vm.synced_folder "d:/wwwroot", "/www/wwwroot"
#网上邻居的名字
config.vm.hostname = "CentOS7"
- virtual box 的相关配置
# 内存
vb.memory = "2048"
#在virtual box虚拟机列表那里展示的名字以及创建虚拟机磁盘的文件夹名字
vb.name = "CentOS7"
# 这里有个end,也要记得解除注释
end
具体,可以看我的最终配置文件吧。建议使用 Beyound compare
软件比对,避免语法错误
部署虚拟机
vagrant up
# 上面直接up可能比较慢,你也可以不执行上面,先下载box,添加本地box在执行up,如下命令,添加本机已经下载好的box
vagrant box add centos/7 d:/CentOS7.box
vagrant up
不出意外,你的虚拟机已经部署好了,但是你发现共享目录并不行,先不要管这个,到这里你基本就成功啦!下面是进到虚拟机软件(virtual box)操作
安装增强工具,实现虚拟机和宿主机各种交互,例如鼠标随便进出、文件共享等
挂载增强工具 CD
- 打开 vBox 软件,你会发现多了一台虚拟机,就是刚才 Vagrant 创建的
- 选中它,然后点击右边的设置-存储
- 添加上虚拟光驱后(添加的时候选择留空),保存。然后
- 然后开机,如上图所示-点击安装增强工具,这时候就会把增强工具的 iso 给加载到虚拟光驱里了,后面继续看准备增强工具底下的安装命令吧
准备增强工具
# shell进vagrant给创建的虚拟机
vagrant ssh
# 进来后切换到root,然后安装“增强工具“所需的软件
sudo su
yum install bzip2 kernel kernel-headers kernel-devel gcc make -y
# 按俩ctrl+D ctrl+D 是退出root 断开ssh
# 关机,关机,一是为了让你上面安装的内核生效,二是挂载cd
vagrant halt
#关机后,打开virtual box,点击设置 硬件那里 挂载cd(看上面的图文教程`挂载增强工具CD`),继续下面的语句进行启动,命令如下
vagrant up
vagrant ssh
安装增强工具
# 切换root,创建cd、挂载cd、安装增强工具
sudo su
mkdir -p /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
sh /mnt/cdrom/VBoxLinuxAdditions.run
ps :有洁癖的同学,装完了增强工具,可以回到虚拟光驱那里删除掉
使配置生效
#这里你可以安装你喜欢的环境和配置挂载目录了,比如我装了BT
#然后挂载目录配置如下
config.vm.synced_folder "d:/wwwroot", "/www/wwwroot",:owner => "www",:group => "www",:mount_options => ["dmode=775","fmode=775"]
# ctrl+D ctrl+D,退出root断开ssh
# 执行重载命令使其生效
vagrant provision && vagrant reload
到这里,Vagrant 的使用和环境搭建就完成了!至于环境安装我就不解释了,每个人的习惯不一样,比如楼主比较懒,喜欢有 Web 界面的
宝塔
。。。
但是你会发现,这么结束后和传统虚拟机方案没区别,也就是 Vagrant 帮你管理了,实现了快速搭建和销毁环境的作用!
难点问题,IO 问题依然是存在的!
解决磁盘 I/O 性能问题
文章开始就说了,使用 nfs,首先是 mac 平台,默认就是支持 nfs 的,所以你配置文件直接配置即可,配置如下
config.vm.synced_folder "~/Sites", "/www/wwwroot", type:"nfs"
虚拟机里可能需要安装一下 nfs 服务,CentOS7 可以直接 yum 安装,百度一堆方案,我简单发下执行过程命令吧
# 安装nfs客户端
yum install nfs-utils
# 开机自启
systemctl enable rpcbind
# 启动nfs
systemctl start rpcbind
还可以参考 https://qizhanming.com/blog/2018/08/08/how-to-install-nfs-on-centos-7
重载配置
- 你会发现用了 nfs 后,访问起来就超级顺滑啦!美滋滋!
- 本文只是一个搭建过程,并没有具体详解各个配置,其实读者应该比较容易知道各个配置干啥的。
- 由于 Windows 并不支持 NFS,所以 Windows 用户无法使用该功能。win 不用 nfs 速度也还可以。。。不过,但是也可以实现
- 就不详细介绍 win 如何用 nfs 了,这里需要安装 Vagrant 插件,我没成功(试过多次,没成功,发现不用 nfs 速度也蛮快,懒得折腾了)
- 想折腾的也可以玩儿 插件命令
vagrant plugin install vagrant-winnfsd
- 深入研究的同学可以看看下面的文章
- https://www.iamle.com/archives/2011.html
我的配置文件
对了,我文件里用的自己载入的
你用的时候,改一下
15 行
config.vm.box = "centos7"
//改为
config.vm.box = "centos/7"
🐶 你走,我不送你。你来,风雨无阻,我去接你。