如何并行运行Web项目的分支?

时间:2013-10-04 22:38:05

标签: branch virtual-machine vhosts docker

我想在单独的vhosts /域上运行/托管项目的Git存储库的特定分支以进行测试/预览。我正在考虑一个过程,在Git推送之后,将一个分支部署到一个预览"或"测试"服务器,用于在浏览器中进行手动测试。

E.g。如果有一个名为" feature / my-new-feature"的分支会很高兴。部署到特定服务器,并使用#34; my-new feature.project.com"等网址访问项目。

我面临的问题(理论上,首先)主要是关于数据库连接/配置,端口等的挑战。例如,如果在单个服务器上的不同子域上运行多个分支,则需要共享单个MySQL安装 - 但实际上每个分支都需要它自己独立的MySQL实例,因为所有分支的数据库配置都没有改变,这意味着它们连接到同一个主机并使用相同的主机数据库名称,用户等

一种方法可能是为其上的每个分支运行一个VM自己的子域,将端口直接映射到VM(至少我认为这可能是某种方式),但对于许多项目而言许多分支这意味着我需要大量的硬件来处理这个问题。 (也可能还有很多钱。)

然后我听说了docker和/或Linux容器,并认为这可能会有用,但我不完全确定它是如何工作的。

我想知道在没有干扰服务和相关冲突的问题的情况下,并行运行多个版本项目的既定方法是什么。

是否可以使用泊坞窗进行此类设置,或者这是我前往的完全错误的方向?

非常感谢你的导师。

1 个答案:

答案 0 :(得分:4)

您的问题范围相当大。

关于更好的Linux容器和docker可用于您的想法:是的,绝对。容器重量轻,部署成本低(比VM便宜),使用容器进行连续部署/并行测试确实很有效。

现在,这是docker的工作原理:你创建了一个dockerfile,它描述了你的应用程序需要里面容器(mysql,php,等等)的服务,你在容器OS上有什么特定的调整/设置需要,以及放置应用程序代码的位置。然后从该dockerfile创建一个“图像”,最后从该图像启动一个新容器,该容器将完全独立,为您的应用程序提供“干净的房间”上下文。

容器具有特定的ip,并将公开您在其上选择的服务。然后,这些服务将被NAT到主机上(您甚至可以在启动时选择在哪个端口上)。然后使用nginx反向代理它们相当简单,以便从各种域名/ URL中提供这些容器。

您可以在此处了解dockerfile(以及一般的泊坞窗):http://docs.docker.io/en/latest/

如果我确实以这种方式测试分支,我会:

  • 编写描述我的应用程序堆栈的Dockerfile,并将其推送到我项目的每个分支
  • 使用CI工具(jenkins,strider,无论如何)并将其挂钩到github,以便在每次推送提交(docker build -rm -t me / myproject:branchname)上构建新图像,然后停止以前运行该分支的容器,并从新构建的映像启动一个新容器(假设构建成功)
  • 将我的主机nginx设置为反向代理,映射,说http://example/branchhttp://localhost:NATTED_PORT/

请注意,Hipache(https://github.com/dotcloud/hipache)可能是摆弄nginx作为代理的替代方法,尽管我没有第一手经验。

这是对所涉及步骤的粗略描述,你可能有一些学习要做的事情,但这应该让你走上正轨我希望。