如何利用Vagrant快速搭建相同配置的开发环境?

作为一名程序猿,我们常常会遇到需要搭建开发环境的问题,特别是在新入职的时候,sublime, node, apache, mysql, php 等等以及各种框架的安装。如果入职的是大公司有可能这些必要的开发环境运维人员会为我们安装好,如果是中小型公司那就需要开发者自己来搭建开发环境,而且还要避免安装的版本不同等问题,这就需要用到我们今天介绍的这款工具了。Vagrant 目前是国内互联网公司应用最多的内部开发环境工具。Vagrant 是我们开发者的福音,使我们完全摆脱了重复配置环境的处境。

前期准备

在搭建之前我们将用到以下软件:

  • vagrant这里我们选用 1.8.6 的版本,可在这里下载对应平台下的安装包
  • virtualBox这里我使用 virtualBox 虚拟机,当然也可以使用其他虚拟机,
  • xshell5,window 用户需要安装 xshell5 用来登录 linux 系统环境

这些软件安装好后接下来才真正开始使用 vagrant

初始化

在 xshell 中执行

cd D:
mkdir vagrant/centos
cd  vagrant/centos
vagrant init

此时可以看到在 centos 文件夹下有一个 Vagrantfile 文件,
用 sublime 或其他编辑器打开此文件找到 config.vm.box = “base”,并将它改为 config.vm.box = “centos/7”,同时也可以添加一下这个 box 的版本号 config.vm.box_version=“1804.02”

这里为什么将 base 改为 centos/7?
我这里打算用 linux 的 centos7 发行版,vagrant 为我们提供了很多的 box,我们可以在这里查询到https://app.vagrantup.com/boxes/search,选择 centos7,就可以看到它推荐我们将 config.vm.box = “centos/7”,同时选好我们使用的版本,这里我们选择用 1804.02

vagrant up

在这里使用 window 的朋友需要将 powershell 升级到 3.0 及以上
如何升级可参考这篇博客https://blog.csdn.net/i_am_wangbo/article/details/50033473
升级好后再次执行 vagrant up

可以看到 vagrant 在自动下载我们配置好的 box

如果出现如图所示情况,我们可以更改下 Vagrantfile 的配置,

启用 vb.gui = true 配置,以图形界面的形式启动虚拟机,这样我们就能看到具体是什么报错了

这里我们需要开启硬件加速
具体如何开启可参考这篇https://jingyan.baidu.com/article/4b52d702a3e0aafc5d774b7c.html
设置好后再次执行 vagrant up,这次没有报错了,此时我们可以看到执行到了 centos 的登录界面

至此 mac 用户可以直接执行 vagrant ssh
window 用户可以根据提供的 address username port 新建 ssh 连接
输入用户名后,密钥我们点击浏览,选择文件 D:\vagrant\CentOS.vagrant\machines\default\virtualbox\private_key,这是刚生成的密钥

至此我们已经登录进了 centos 系统了。

进入系统后我们就可以安装配置我们的环境了,具体的 PHP 开发环境可参LNMP + Apache 架构配置.
可开发环境安装好后如何让他人和我有相同的环境配置呢?

box 的打包与分发

现在开发环境安装好后我们需要将我们的 box 打包,

vagrant package --output D:/vagrant/box/CentOS.box

我们可以看到在 box 文件夹下生成了一个 CentOS.box 文件,我们可以通过 U 盘或网盘将这个 box 分发给其他同事。
提他同事安装后 vagrant 就可以用这个 box 了
载入这个 box

vagrant box add CentOS.box

vagrant up 就可以直接使用了,这样其他同事就和我们有相同的环境配置了

vagrant 优化

如果一个 box 在使用的过程中又安装了其他软件怎么办?
对于新用户我们可以重新打包分发,对于老用户我们可以修改 Vagrantfile 文件

config.vm.provision "shell", inline: <<-SHELL
    yum install -y apache2
SHELL

这样在下次执行 vagrant up 的时候会自动安装新的软件

如何以固定 ip 的形式访问虚拟机上的 web 服务器
这里我们可以通过设置私有网络 ip 的形式供自己访问,

config.vm.network "private_network",ip:"192.168.10.10"

这样我们就可以通过这个 ip 访问到我们的服务器了

vagrant 常用命令

vagrant box list 查看目前已有的 box
vagrant box add 新增加一个 box
vagrant box remove
vagrant inti 初始化配置生成 vagrantfile
vagrant up 启动虚拟机
vagrant ssh 登录虚拟机
vagrant suspend 挂起虚拟机
vagrant reload 重启虚拟机
vagrant halt 关闭虚拟机
vagrant status 查看虚拟机
vagrant destory 删除虚拟机

设置 vagrant 默认以 root 用户身份登录

当通过 vagrant up,以 vagrant 身份进入 linux 后,

sudo su root
vi /etc/ssh/sshd_config
找到PermitRootLogin设置为 yes
找到PasswordAuthentication设置为yes
保存后执行重启sshd
service sshd restart

重启该 box 后我们就可以用 root 身份登录了,需要填写密码默认是 vagrant