如何从本地 VirtualBox / Vagrant 开发环境部署到生产环境?
Posted
技术标签:
【中文标题】如何从本地 VirtualBox / Vagrant 开发环境部署到生产环境?【英文标题】:How is deployment to Production done from local VirtualBox / Vagrant development environment? 【发布时间】:2014-08-02 18:04:51 【问题描述】:最近我开始阅读有关使用虚拟化软件构建开发环境的文章(我是初学者),似乎“基础设施即代码”是一个非常强大的概念。
我真的很喜欢here 描述的工作流结构:
-
团队使用相同的基本 VirtualBox 映像
Vagrant 用于借助
Chef(或 Puppet)食谱,这是唯一需要置于版本控制之下的代码。
但是,我仍然不太了解代码是如何传输和部署在生产服务器上的。
据我了解,保持 DEV 和 PROD 环境相同的常用方法是将生产服务器实例作为另一个要使用 Chef 配置的虚拟映像来管理。我可以在生产服务器上安装与我(和团队)每天使用 VirtualBox-Vagrant-Chef 完全相同的操作系统。
但生产服务器的硬件可能与虚拟客户操作系统中的硬件不同,这可能会再次导致不一致。
那么,问题来了:
将代码从使用 VirtualBox-Vagrant-Chef 工具链管理的开发环境传输和部署到生产服务器的已知和常见最佳实践是什么?这种做法是否允许任何持续部署?
[编辑]:注意:是否有在生产服务器上运行使用 Chef/Vagrant 配置的相同 VM 实例的任何做法,就像在此 diagram 中描述的那样?
【问题讨论】:
就我而言,我选择在 dev 和 prod 中使用相同的 Linux 发行版,并且我还使用 Chef 管理生产服务器。这样我就可以确定在两种环境中都可以使用相同版本的 apache、db 等。出于这个原因,我在 AWS 中使用 Ubuntu 而不是 Amazon Linux。 Daniel,您的开发人员是物理机还是虚拟机?另外,您能否详细说明一下 Ubuntu-AWS 与 Amazon Linux? Dev 位于我使用 Vagrant(在 VirtualBox 之上)运行并使用 Chef Solo 进行配置的 VM 中,但它可能是物理服务器。它没有太大区别。如果我推荐 Ubuntu,是因为这样你可以在 Vagrant 和 AWS 中拥有完全相同的操作系统;这样,您就不必使您的 Cookbook 适应两个不同的操作系统。这只是优化你的时间的问题。 Linux AMI 是 Red Had 家族,但软件包与 Centos 中的不同。顺便说一句,如果您想学习 Chef,请为自己的辛勤工作做好准备。找到好的文档并不容易。 packer.io 可能与此处相关。 【参考方案1】:在 Puppet 的情况下(厨师很可能也可以这样做),您可以构建清单(食谱),使其在您的流浪环境中表现不同,例如
if $::virtual != "virtualbox" # not in vagrant
include sysctl_tuning
在这种情况下,关于持续交付的问题有点过于宽泛了。我认为答案是“是”,因为它值得。
【讨论】:
Felix,我更感兴趣的是以“适当”的方式使用 Chef/Puppet+Vagrant 的所有优点,即从一开始就避免使用不同的平台。 意味着你将把你的生产转移到 Vagrant?那是......“有趣”可以肯定;-)【参考方案2】:我是你链接的文章的作者,所以我的 0.02
如果我正确理解了您的问题,您不会将 vm 从 dev 转移到生产,而是创建一个可重复的过程,允许您一遍又一遍地创建相同的最终状态(OS + config + app),无论如何目的地在哪里。
通过使用 vagrant,您可以保证您的开发人员使用与生产服务器相同的操作系统,无论他们使用什么操作系统进行开发。
使用 Puppet/Chef 可以保证操作系统的配置是相同的,无论它是在带有 Vagrant 的 vm、生产中的 vm、云 vm 还是裸机硬件中运行。它不需要是虚拟的。
【讨论】:
很抱歉写了这么老的帖子,但我想了解一些东西。如果我理解您的说法正确,您不会使用代码部署您的虚拟机,您只需使用 vagrant 在任何地方复制同一个框。当你想更新你的应用程序时,从技术上讲,你不需要刷新你的盒子,只需使用 GIT 或 wathever VCS 更新你的代码。代码使用盒子来确保相同的环境,但盒子不会被部署一次,然后你只需使用 GIT 更新你的代码库。对吗?以上是关于如何从本地 VirtualBox / Vagrant 开发环境部署到生产环境?的主要内容,如果未能解决你的问题,请参考以下文章