Vagrant 将自己描述为“一个用于在单个工作流中构建和管理虚拟机环境的工具。凭借易于使用的工作流和对自动化的关注,Vagrant 缩短了开发环境设置时间,提高了生产对等性,并使‘在我的机器上可以工作’的借口成为过去式。”
Vagrant 使用称为 Vagrantfile 的标准格式来记录环境。根据 Vagrant 的网站
“Vagrantfile 的主要功能是描述项目所需的机器类型,以及如何配置和供应这些机器。Vagrantfile 被称为 Vagrantfile,因为该文件的实际字面文件名是 Vagrantfile(大小写无关紧要,除非您的文件系统以严格区分大小写的模式运行)。”
Vagrant 本质上是一个包装器,允许可重复的虚拟机管理,但它本身不运行 VM。本教程将使用 VirtualBox 作为环境管理器,尽管 Hyper-V 和 Docker 也默认可以工作。查看 Vagrant 的文档,了解如何为本教程使用不同的提供商。
构建 Vagrantfile
本教程通过一个示例应用程序,演示如何在 Ruby on Rails (简称 Rails) Web 应用程序中创建一个简单的 Hello World 页面。在开始之前,请安装以下内容(如果您尚未安装):
- Vagrant
- VirtualBox
- Ruby on Rails
- 一个编辑环境,例如 Atom 或 Notepad++
如果您使用的是 Fedora 并且更喜欢使用命令行,则有一个优秀的 Fedora 教程,并且有一个类似的有用教程,适用于使用 Chocolatey 的 Windows。安装完所有内容后,打开您的终端并创建一个新的工作目录。您可以将目录放在您喜欢的任何位置;我更喜欢在我的用户帐户下使用一个文件夹
$ mkdir -p ~/Development/Rails_app
$ cd ~/Development/Rails_app
$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
这将创建一个带有默认配置信息的 Vagrantfile,以 Ruby 语法编写。查看第 15 行
config.vm.box = "base"
这表明 Vagrant 将使用它托管的名为 base 的默认操作系统镜像,您还没有这个镜像。通过运行 box list 来确认
$ vagrant box list
There are no installed boxes! Use `vagrant box add` to add some.
如果您尝试使用 up 命令启动您的环境,它将会失败,因为 Vagrant 期望本地存在一个名为 base 的操作系统。切换到最常用的环境 bento/ubuntu-16.04,然后尝试启动您的环境。将 Vagrantfile 中的 config.vm.box 行更改为
config.vm.box = "centos/7"
现在您可以运行虚拟机历史上最令人满意的命令
$ vagrant up
Bringing machine 'default' up with 'libvirt' provider...
==> default: Box 'centos/7' could not be found. Attempting to find and install...
default: Box Provider: libvirt
default: Box Version: >= 0
==> default: Loading metadata for box 'centos/7'
default: URL: https://vagrantcloud.com/centos/7
==> default: Adding box 'centos/7' (v1905.1) for provider: libvirt
default: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1905.1/providers/libvirt.box
default: Download redirected to host: cloud.centos.org
...
这就是为什么它如此好的原因。本教程设置了一个小型网站,但是如果您有一个更大的网站并且需要检查前端外观是否正确,您的 playbook 文件和复制文件将允许您查看您的更改。如果您有想要快速测试的小型应用程序——无需构建完整的 Docker 镜像或登录服务器——这种本地测试非常适合快速检查和修复。如果您在硬件中工作,这将使您更容易查看应用程序是否可以在您的操作系统中工作,并且它允许您知道您需要哪些依赖项。最终,与从头开始持续集成和部署 (CI/CD) 到测试服务器相比,它使部署更容易,测试更快,并且提供更快的访问和更多的控制。
之所以如此酷的原因可以用一句话来解释:您现在拥有本地自动化。它还允许您收集更多关于 Ansible 和无头服务器部署的知识。
验证 Vagrant 是否正常工作
判断它是否正确完成的一种方法是看到一堆绿色文本和用于启动选项的 rails server -h 字样。这意味着 Web 应用程序已启动并正在运行。

但是您也想使用 vagrant global-status 以及 vagrant status。

vagrant status 命令检查源自当前目录的机器状态。因此,如果您有一个 VM 正在运行,它将显示为正在运行。如果它以任何方式损坏,当您运行 vagrant up 时,它将显示一条带有错误和一些日志的消息。如果某些机器已关闭,它们也将显示为未运行或已关闭。
但是,vagrant global-status 命令可以提供在 Vagrant 中创建的多个环境的状态。因此,如果您为不同的 VM 类型或存储类型拆分环境,此命令为您提供了一个选项,可以查看您创建的所有环境中的所有内容。
自定义 Vagrant 配置
机器设置有多个 config.vm 选项。本教程将使用网络选项来允许端口转发。端口转发允许您访问虚拟环境中的网络端口,就像它是一个通过特殊本地网络的本地端口一样。这意味着允许流量查看您在此服务器上允许的一件事;在这种情况下,它是一个微小的前端网页。
这很重要的主要原因是安全性。限制流量可以防止恶意行为者和流量溢出。按照这种构建方式,除非您将其配置为这样,否则您无法登录此服务器。这也意味着没有人可以 SSH 进入或看到任何东西,除了一个小前端网页。
在继续之前,通过运行 vagrant destroy 删除 VM 以便您可以重新开始
$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Removing domain...
要包含端口转发,请在下一个配置行中添加此内容
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-16.04"
config.vm.network "forwarded_port", guest: 3000, host: 9090
end
保存文件并运行
vagrant up
您现在有一个 VM,它将端口 3000 转发到开放世界作为 9090。您现在应该能够在您的 Web 浏览器上转到 127.0.0.1:9090,并且除了一个纯白色页面之外什么也看不到。
再次运行 vagrant destroy 以删除 VM,以便您可以重新开始。
使用 Ansible 和脚本配置 Vagrant
虽然基础 boxes 提供了一个良好的起点,但在配置过程中自定义 VM 很常见,并且您可以使用多种配置策略。要继续学习,下载 playbook 和脚本。
此示例使用 Ansible 来设置 Ruby on Rails Web 框架的基本安装。然后,它添加了一个额外的 shell 脚本来配置 Web 应用程序的欢迎页面,使其显示:Hello World,抱歉耽搁了。(此消息的目的是因为此构建需要很长时间,人们可能会因延迟而感到沮丧。)
以下 Vagrantfile 反映了 Ansible 和 playbook 在我的机器上本地运行,因此它将与您的不同。您可以在 Vagrant 的文档中阅读关于将 Ansible 与 Vagrant 一起使用的内容。
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-16.04"
config.vm.network "forwarded_port", guest: 3000, host: 9090
####### Provision #######
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "prov/playbook.yml"
ansible.verbose = true
config.vm.provision "shell", path: "script.sh"
end
end
保存文件后,运行我最喜欢的命令
vagrant up
您现在有一个 VM 正在运行 Rails,当您在 Web 浏览器中输入 127.0.0.1:9090 时,您会看到一个网页,上面写着:Hello World,抱歉耽搁了。
现在您已经掌握了所有这些背景知识,您可以尝试构建您自己的脚本。
最终说明
Vagrant 相当容易使用,并且有大量的文档可以帮助您。如果您希望在小型暂存或开发环境中处理代码,那么它是一个很棒的工具;任何破坏都不是问题,因为环境本身是可丢弃的。
想试一试吗?看看我的仓库。
评论已关闭。