如何并行运行一个Web项目的分支机构?

我想在单独的虚拟主机/域中运行/托pipe项目的Git存储库的特定分支,以进行testing/预览。 我正在考虑在Git推送之后,将一个分支部署到“预览”或“testing”服务器以在浏览器中进行手动testing的过程。

例如,将一个名为“feature / my-new-feature”的分支部署到特定的服务器并使项目像“my-new feature.project.com”这样的URL可访问将是很好的。

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

一种方法可能是为自己的子域中的每个分支运行一个虚拟机,将这些端口直接映射到虚拟机(至less我认为这是可能的),但是对于许多分支的项目,这意味着我需要大量的硬件处理这个问题的权力。 (也可能是很多钱。)

然后,我听说Docker和/或Linux容器,也许这可能会奏效,但我不完全确定如何,如果它工作。

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

是否有可能使用泊坞窗这样的设置,或者这是我走的完全错误的方向?

非常感谢你的服务员。

你的问题范围是相当大的。

关于她的Linux容器和docker是可用的,你在想什么:是的,绝对。 容器是轻量级且便宜的部署(比VM便宜),使用容器进行持续部署/并行testing确实工作得很好。

现在,Docker的工作方式如下:创build一个dockerfile,描述你的应用容器内部需要什么样的服务(mysql,php等等),你需要什么特定的容器操作系统的调整/设置,以及应用代码的放置位置。 然后,您从该dockerfile创build一个“图像”,最后从该图像开始一个新的容器,并且该容器将完全独立,为您的应用程序提供“干净的空间”上下文执行。

该容器有一个特定的IP,并将公开您select的服务。 这些服务将被NAT到主机(你甚至可以select在开始时间的端口)。 那么使用nginx来反向代理这些代码是相当简单的,所以要从各个域名/ url中提供这些容器。

你可以在这里了解到dockerfile(和docker一般): http ://docs.docker.io/en/latest/

如果我确实要这样testing分支,我会:

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

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

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