开始 Vagrant 之旅

简介:

如果你和我一样,你可能在某一个地方有一个“沙盒”,你可以在那里进行你正在做的任何项目。随着时间的推移,沙盒会变得杂乱无章,充斥着各种想法、工具链元素、你不使用的代码模块,以及其他你不需要的东西。当你完成某件事情时,这会使你的部署变得复杂,因为你可能不确定项目的实际依赖关系 —— 随着时间推移你在沙盒中已经有了一些工具,但是你忘了必须安装它。你需要一个干净的环境,将所有的依赖关系放在一个地方,以便以后更方便。

或者你可能工作在 DevOps 中,你所服务的开发人员用模糊的依赖关系来编写代码,这使得测试变得更加困难。你需要一种方法来获得一个干净的盒子,将代码放入其中,并通过它运行代码,而且你希望这些环境是一次性的和可重复的。

那么选择 Vagrant 吧。由 HashiCorp 在 MIT 许可证下创建,Vagrant 可充当 VirtualBox、Microsoft Hyper-V 或 Docker 容器的包装器和前端,并且可以通过许多其他供应商的插件进行扩展。你可以配置 Vagrant 以提供可重复的、干净的环境,并且已安装需要的基础架构。配置脚本是可移植的,因此,如果你的仓库和 Vagrant 配置脚本位于基于云存储上,那么你只需要很少的限制就可以启动并在多台机器机器上工作。让我们来看一看。

安装

对于本次安装,我的环境是 Linux Mint 桌面,版本是 18.3 Cinnamon 64 位,在其他大多数 Debian 派生系统上安装非常类似。在大多数发行版中,对于基于 RPM 的系统也有类似的安装程序。Vagrant 的安装页面为 Debian、 Windows、 CentOS、 MacOS 和 Arch Linux 都提供下载,但是我在我的软件包管理器中找到了它,所以我在那进行了安装。

最简单的安装使用了 VirtualBox 作为虚拟化提供者,所以我需要安装它:

 
  1. sudo apt-get install virtualbox vagrant

安装程序将会获取依赖项 —— 主要是 Ruby 的一些东西,安装它们。

建立一个项目

在设置你的项目之前,你需要了解一些你想要运行它的环境。你可以在 Vagrant Boxes 仓库中找到为许多虚拟化供应商提供的大量预配置的系统box。许多会预先配置一些你可能需要的核心基础设置,比如 PHP、 MySQL 和 Apache,但是对于本次测试,我将安装一个 Debian 8 64 位 “Jessie” 裸机沙盒并手动安装一些东西,这样你就可以看到具体过程了。

 
  1. mkdir ~/myproject
  2. cd ~/myproject
  3. vagrant init debian/contrib-jessie64
  4. vagrant up

最后一条命令将根据需要从仓库中获取或更新 VirtualBox 镜像,然后运行启动器,你的系统上会出现一个运行的系统!下次启动这个项目时,除非镜像已经在仓库中更新,否则不会花费太长时间。

要访问该沙盒,只需要输入 vagrant ssh,你将进入虚拟机的全功能 SSH 会话中,你将会是 vagrant 用户,但也是 sudo 组的成员,所以你可以切换到 root,并在这里做你想做的任何事情。

你会在沙盒中看到一个名为 /vagrant 目录,对这个目录小心点,因为它与你主机上的 ~/myproject 文件夹保持同步。在虚拟机 /vagrant 下建立一个文件它会立即复制到主机上,反之亦然。注意,有些沙盒并没有安装 VirtualBox 的附加功能,所以拷贝只能在启动时才起作用。有一些用于手动同步的命令行工具,这可能是测试环境中非常有用的特性。我倾向于坚持使用那些有附加功能的沙盒,所以这个目录可以正常工作,不必考虑它。

这个方案的好处很快显现出来了: 如果你在主机上有一个代码编辑工具链,并处于某种原因不希望它出现在虚拟机上,那么这不是问题 —— 在主机上进行编辑,虚拟机会立刻更改。快速更改虚拟机,它也将其同步到主机上的“官方”副本 。

让我们关闭这个系统,这样我们就可以在这个系统里提供一些我们需要的东西:

 
  1. vagrant halt

在虚拟机上安装额外的软件

对于这个例子,我将使用 ApachePostgreSQL 和 Perl 的 Dancer web 框架进行项目开发。我将修改Vagrant 配置脚本,以便我需要的东西已经安装。 为了使之稍后更容易保持更新,我将在项目根目录下创建一个脚本~/myproject/Vagrantfile

 
  1. $provision_script = <<SCRIPT
  2. export DEBIAN_FRONTEND=noninteractive
  3. apt-get update
  4. apt-get -y install \
  5. apache2 \
  6. postgresql-client-9.4 \
  7. postgresql-9.4 \
  8. libdbd-pg-perl \
  9. libapache2-mod-fastcgi \
  10. libdata-validate-email-perl \
  11. libexception-class-perl \
  12. libexception-class-trycatch-perl \
  13. libtemplate-perl \
  14. libtemplate-plugin-json-escape-perl \
  15. libdbix-class-perl \
  16. libyaml-tiny-perl \
  17. libcrypt-saltedhash-perl \
  18. libdancer2-perl \
  19. libtemplate-plugin-gravatar-perl \
  20. libtext-csv-perl \
  21. libstring-tokenizer-perl \
  22. cpanminus
  23. cpanm -f -n \
  24. Dancer2::Session::Cookie \
  25. Dancer2::Plugin::DBIC \
  26. Dancer2::Plugin::Auth::Extensible::Provider::DBIC \
  27. Dancer2::Plugin::Locale \
  28. Dancer2::Plugin::Growler
  29. sudo a2enmod rewrite fastcgi
  30. sudo apache2ctl restart
  31. SCRIPT

在 Vagrantfile 结尾附近,你会发现一行 config.vm.provision 变量,正如你在示例中看到的那样,你可以在此处以内联方式进行操作,只需通过取消注释以下行:

 
  1. # config.vm.provision "shell", inline: <<-SHELL
  2. # sudo apt-get update
  3. # sudo apt-get install -y apache2
  4. # SHELL

相反,将那四行替换为使用你在文件顶部定义为变量的配置脚本:

 
  1. config.vm.provision "shell", inline: $provision_script

你可能还希望将转发的端口设置为从主机访问虚拟机上的 Apache。寻找包含 forwarded_port 的行并取消注释它。如果你愿意,也可以将端口从 8080 更改为其他内容。我通常使用端口 5000,并在我的浏览器浏览 http://localhost:5000 就可以访问我虚拟机上的 Apache 服务器。

这里有一个设置提示:如果你的仓库位于云存储上,为了在多台机器上使用 Vagrant,你可能希望将不同机器上的 VAGRANT_HOME 环境变量设置为不同的东西。以 VirtualBox 的工作方式,你需要分别为这些系统存储状态信息,确保你的版本控制系统忽略了用于此的目录 —— 我将 .vagrant.d* 添加到仓库的 .gitignore 文件中。不过,我确实让 Vagrantfile 成为仓库的一部分!

好了!

我输入 vagrant up,我准备开始写代码了。一旦你做了一两次,你可能会想到你可以循环利用很多的 Vagrantfile 模板文件(就像我刚刚那样),这就是 Vagrant 的优势之一。你可以更快地完成实际的编码工作,并将很少的时间花在基础设施上!

你可以使用 Vagrant 做更多事情。配置工具存在于许多工具链中,因此,无论你需要复制什么环境,它都是快速而简单的。


原文发布时间为:2018-05-23

本文作者:Ruth Holloway

本文来自云栖社区合作伙伴“Linux中国开源社区”,了解相关信息可以关注“Linux中国开源社区”。

相关文章
|
9月前
|
Ubuntu Linux 虚拟化
嵌入式Linux开发环境搭建之一---VMware Ubuntu安装教程(亲自实践)
嵌入式Linux开发环境搭建之一---VMware Ubuntu安装教程(亲自实践)
221 0
|
jenkins Java Linux
阿粉手把手教你在 CentOS7 下搭建 Jenkins
阿粉的公司是用 Jenkins 去做的 DevOps 实践,那么想要快速熟悉 Jenkins ,第一步就是去把它搭建一下,这周末闲着没事就玩了一把,将整个过程和大家分享下
阿粉手把手教你在 CentOS7 下搭建 Jenkins
|
Linux
Vagrant 使用笔记
Vagrant 是什么?
126 0
Vagrant 使用笔记
|
Linux 网络安全 数据安全/隐私保护
Vagrant 搭建开发环境实践
vagrant是一个命令行的虚拟机管理程序。用于简化搭建开发环境。 vagrant使用ruby语言基于Chef 开发。需要配合其他虚拟机程序进行工作,如vmare、virualbox、hyper-v等。并通过 CLI和VagrantFile(配置文件)管理虚拟机的所有功能。vagrant 使用自己的镜像格式进行环境部署,即box。类似于虚机的iso或者docker中的镜像。
370 0
|
缓存 Linux Shell
Vagrant相关知识脑图
Vagrant主要点和例子、分类的脑图
1745 0
Vagrant相关知识脑图
|
Kubernetes IDE Oracle
TeamCity 之旅1
TeamCity提供一系列特性可以让团队快速实现持续集成:IDE工具集成、各种消息通知、各种报表、项目的管理、分布式的编译等等,所有的这些,都是让你的团队快速享有持续集成带来的效率提升、高质量的软件保障。 使用 TeamCity,你能够在几分钟之内为你的项目配置一个构建服务器,它内建了持续单元测试,代码质量分析和早期的构建问题分析报告,你甚至可以在IDE进行。 TeamCity 提供平滑的学习曲线,你可以逐步的学习经它的高级特性和功能,你很快就能加强你发布管理实践。 本次发布,在可用性作了大量的改进,更新的IDE 插件支持 CVS和SVN,另外还包括一些之前版本不具备的企业级的特性。
1208 0
TeamCity 之旅1
|
关系型数据库 测试技术 应用服务中间件
阿里云centos7.2 搭建 laravel 框架走过的坑
阿里云centos7.2 搭建 laravel 框架走过的坑  前言 公司正在处于发展阶段最近开发的伙伴和运维的伙伴一直在忙碌着 开发人员一直在写laravel架构的代码以及新项目的拓展,时间很赶所以作为linux运维的我也不能怠慢。
1905 0
|
运维 Linux Docker
运维技术之二(6)、完成的安装docker安装jumpserver1.0.0(小白必会)
centos7CentOS 7 (使用yum进行安装)step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.
1370 0
|
运维 Linux 测试技术
运维技术之二(4)、docker安装jumpserver
CentOS 7 系统Docker CE 镜像源站 使用官方安装脚本自动安装 curl -fsSL https://get.docker.com | bash -s docker --mirror AliyunCentOS 7 (使用yum进行安装) step 1: 安装必要的一些系统工具 sud.
2473 0