vagrant 搭建开发环境详解和 vagrant 基本使用

本贴最后更新于 1129 天前,其中的信息可能已经沧海桑田

本地开发环境是每一位服务端开发者(特别是 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 提供上网用的
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)操作
安装增强工具,实现虚拟机和宿主机各种交互,例如鼠标随便进出、文件共享等

准备增强工具

# 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,继续下面的语句进行启动,命令如下
vagrant up
vagrant ssh

安装增强工具

# 切换root,创建cd、挂载cd、安装增强工具
sudo su
mkdir -p /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
sh /mnt/cdrom/VBoxLinuxAdditions.run

使配置生效

#这里你可以安装你喜欢的环境和配置挂载目录了,比如我装了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 安装,百度一堆方案,我简单发下执行过程命令吧
还可以参考 https://qizhanming.com/blog/2018/08/08/how-to-install-nfs-on-centos-7

# 安装nfs客户端
yum install nfs-utils
# 开机自启
systemctl enable rpcbind
# 启动nfs
systemctl start rpcbind

重载配置

  • 你会发现用了 nfs 后,访问起来就超级顺滑啦!美滋滋!
  • 本文只是一个搭建过程,并没有具体详解各个配置,其实读者应该比较容易知道各个配置干啥的。
  • 由于 Windows 并不支持 NFS,所以 Windows 用户无法使用该功能。但是也可以实现
  • 就不详细介绍 win 如何用 nfs 了,这里需要安装 vagrant 插件,我没成功(试过多次,没成功,发现不用 nfs 速度也蛮快,懒得折腾了)
  • 想折腾的也可以玩儿 插件命令 vagrant plugin install vagrant-winnfsd
  • 深入研究的同学可以看看下面的文章
  • https://www.iamle.com/archives/2011.html
  • Vagrant
    3 引用 • 4 回帖
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 6 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...