# 简介

Vagrant 是一款基于 Ruby 的工具,主要用于创建和配置轻量级的、可复制的开发环境。

大家使用的桌面系统通常多种多样(如 Mac/Windows/Linux 等),但部署通常采用 Linux(如 Centos/Ubuntu/Debian 的等),不同系统间存在诸多差异,经常会出现 “代码在服务器上跑不起来,但是在我机子上运行的好好的” 这种情况,排查起来也很困难。我们可以通过 Vagrant 封装一个 基于 Linux 的代码运行环境,然后分发给团队成员,成员可以在自己喜欢的桌面系统上进行开发,开发好的程序可以运行在统一的环境中,避免之前提到的问题,从而大大提高开发效率。

Vagrant 与 Docker 对比

Vagrant 的计算资源利用率较低,但易于开发环境的构建与维护,它通过提供统一的工作流程来管理虚拟机,适合与传统的完整堆栈环境配合使用。Docker 则更侧重于容器化技术,它允许开发者将应用及其依赖打包在容器中,从而实现更快速地部署和更高效的资源利用,非常适合用于应用的微服务架构和敏捷开发实践中。

# 软件安装

# 安装 Vagrant

选择适合自己系统的版本进行下载安装即可,下载地址:
https://developer.hashicorp.com/vagrant/install

Vagrant 是没有图形界面的,所以安装完成后也没有桌面快捷方式。Vagrant 的安装程序会自动把安装路径加入到 PATH 环境变量,所以可以通过命令行执行 vagrant -v 检查是否安装成功

# 安装 VirtualBox

选择适合自己系统的版本进行下载安装即可,下载地址:
https://www.virtualbox.org/wiki/Downloads

Vagrant 也支持 VMware,不过 VMware 是收费的,对应的 Vagrant 版本也是收费的

# 配置

# 添加基础镜像

可以通过命令 vagrant box add {title} {url} 来添加

vagrant box add centos/7 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box

限于国内网络环境,最好还是提前下载好官方封装的基础镜像,然后在通过命令 vagrant box add {title} {local file} 来添加本地文件

vagrant box add centos/7 path/to/centos7.box

CentOS 7 x64 下载地址
如果你要其他系统的镜像,可以来这里下载:http://www.vagrantbox.es

如果已经有团队封装好的开发环境镜像,则可以直接添加团队镜像

vagrant box add centos/7 path/to/centos7-your-team.box

# 初始化

创建一个开发目录(比如:~/dev),你也可以使用已有的目录,切换到开发目录里,用 centos/7 镜像初始化当前目录的环境

cd ~/dev
vagrant init centos/7   # 初始化环境
vagrant up              # 启动环境
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /source => ~/dev/source
    default: /vagrant => ~/dev/vagrant/pypy
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

# 登录虚拟机

虚拟机启动后,通过 ssh 登录虚拟机,然后配置自己所需的开发环境即可
虚拟机

vagrant ssh
Last login: Mon Feb 28 17:59:15 2022 from 10.0.2.2
[vagrant@localhost ~]$
# 在虚拟机中配置环境
...

Windows 用户注意,Windows 终端并不支持 ssh,所以需要安装第三方 SSH 客户端,比如:Putty、Cygwin 等。

采用团队镜像进行初始化并启动后可直接使用,无需再额外配置。

# 定制设置

Vagrant 初始化成功后,会在初始化的目录里生成一个 Vagrantfile 的配置文件,可以修改配置文件进行个性化的定制。

# 任意本地 ip,仅限本机访问,注意 ip 地址不要冲突
config.vm.network "private_network", ip: "192.168.56.111"
# 将本地代码存放目录映射到虚拟环境中的 /source 目录下
config.vm.synced_folder "local/code/path", "/source"
# 关闭每次执行 vagrant up 时检查每个 box 的更新情况
config.vm.box_check_update = false
# 配置密码方式登录虚拟环境
config.ssh.password = "vagrant"

# 打包分发

当你配置好开发环境后,退出并关闭虚拟机。在终端里对开发环境进行打包:

vagrant package

打包完成后会在当前目录生成一个 package.box 的文件,将这个文件传给其他用户,其他用户只要添加这个 box 并用其初始化自己的开发目录就能得到一个一模一样的开发环境了。

# 常用命令

vagrant init     # 初始化
vagrant up       # 启动虚拟机
vagrant halt     # 关闭虚拟机
vagrant reload   # 重启虚拟机
vagrant ssh      # SSH 至虚拟机
vagrant status   # 查看虚拟机运行状态
vagrant destroy  # 销毁当前虚拟机

更多内容请查阅 官方文档

# 其他

# 共享目录

直接使用 vagrant 的共享目录虽然也是可以满足需求的,但是性能不佳,可以换用 NFS 来共享目录,步骤如下:

  1. 在 OS X 上配置 NFS Server
    配置 /etc/exports 文件后使用 nfsd 开启服务
# <shared folder> <options> <client IP>
/vagrant/source -mapall=501:20 -alldirs 127.0.0.1
-mapall=501:20 表示客户端 (FreeBSD) 对于文件的任意改动将被视为 OS X 上用户的操作,其
中 501为UID、20为GUID
-alldirs 允许客户端上的用户 mount 任意共享文件夹

127.0.0.1 使用 127.0.0.1 回路 IP 代替 VirtualBox 客户端 IP,以此所有其他 VMs 可通过 NAT 网络进行访问

修改 /etc/nfs.conf 文件

nfs.server.mount.require_resv_port = 0

最后开启 NFS 服务

nfsd update
  1. ubuntu 下默认开启 NFS Client ,只需要将共享目录挂载到合适目录下即可
mount 10.0.2.2:/vagrant/source /mnt/vagrant
  1. 如果需要 ubuntu 启动后自动 mount 共享文件,可修改 /etc/fstab 文件
mount 10.0.2.2:/vagrant/source /mnt/vagrant nfs rw 0 0

# 静态文件缓存问题

使用 Apache/Nginx 时会出现诸如图片修改后但页面刷新仍然是旧文件的情况,是由于静态文件缓存造成的。需要对虚拟机里的 Apache/Nginx 配置文件进行修改:

# Apache 配置添加:
EnableSendfile off
# Nginx 配置添加:
sendfile off;

# windows 系统下 shell 脚本无法执行问题

在 windows 系统中通过 git pull 下来的代码可能会存在 shell 脚本无法执行的情况,需要在虚拟环境下执行 dos2unix 命令

find . -type f -exec dos2unix {} \;

# 使用 Navicat 访问 vagrant 里的 mysql

  1. 常规选项主机名填写 localhost,用户名密码填写 mysql 的即可
  2. SSH 选项填写 vagrant 的 ip 地址,用户密码填写 vagrant/vagrant
此文章已被阅读次数:正在加载...更新于

请我喝杯咖啡吧☕️

木亦 微信支付

微信支付

木亦 支付宝

支付宝