网站沙盒化的最佳实践?

3

我目前在一家几乎没有正式流程的网店工作,有数百个PHP网站,包括定制CMS和购物车代码等棘手的东西。

我们正在努力改进事情。我正在推动使用CVS/SVN。

我的问题是,网站工作沙盒的最佳实践是什么?我们使用的是LAMP堆栈。我们的一些站点已经硬编码(或用户输入)到当前域名链接中,因此设置一个不同的域名如preview.mysite.com将会破坏指向www.mysite.com的链接。如果我们开始应用回归测试,也许域名应该统一进行测试?这可以通过本地主机条目来完成。

因此,考虑到我们有很多站点,最好有一个始终在适当沙盒中进行预览的过程。想知道这如何与SVN/CVS周期集成。

我只是寻找行业最佳实践,因为我们正在努力达到这个目标。如果这意味着克隆一个站点到一个额外的服务器,那就这样做吧。

2个回答

1

是的,你应该有第二个STAGE服务器。我的做法是将代码放入我的开发机上的CVS中,并在进行常规提交时进行。当我准备将版本推送到“STAGE”服务器时,我会浏览我想要STAGE的文件并将它们标记为STAGE:

cvs tag -F STAGE

然后我去STAGE服务器,并使用STAGE标志进行更新以获取文件的STAGE版本:

cvs up -r STAGE

这也会在这些文件上设置粘性标签为“STAGE”,因此在未来,当我在我的stage服务器上进行更新时,可以省略STAGE标签:

cvs up

最后,当我在STAGE服务器上测试完我的代码后,我使用rsync将其滚动到生产服务器上...

我们有几个开发人员一起工作,因此保持稳定的STAGE版本可能会变得棘手。在这种情况下,如果我只对一个或两个文件进行小更改,我将单独将它们通过scp传输到生产服务器。

最后,为了确保我知道我的生产服务器上有什么,当我将文件发送到生产服务器后,我会将舞台服务器上的所有文件标记为RELEASE,并且还标记为RELEASE20090713或当前日期。这样,我就可以通过时间获得移动快照,以备需要时使用。请注意,这不会更新粘性标记,因此我的舞台服务器上的常规旧cvs up仍然可以获取最新的STAGE文件。
现在,在您的情况下,就硬编码的URL而言...您已经知道...很糟糕...所以在进行修复时,请一并解决它们。但是,您可能可以使用Apache URL重写来重写STAGE上的URL,以便与自定义TCP端口通信。
如果您拥有像思科路由器这样的智能网络设备,您可以设置它来执行PAT(端口地址转换)以用于您的IP。端口80可以转发到您的常规生产Web服务器,而端口8080可以转发到您的STAGE服务器(其端口为80)。然后,您只需让Apache在您的STAGE服务器上执行URL重写,并将8080附加到它看到的所有主机名。现在,您所有的帖子和链接都将转到正确的STAGE服务器,并且您的Apache配置也可以完全相同。

1
关于硬编码(或用户输入)的域名:您可以将域名添加到您的hosts文件中。这应该可以解决您在开发和预览期间遇到的问题。您的浏览器将检索www.mysite.com的IP地址,并在hosts文件中找到127.0.0.1或预览站点的IP地址。棘手的部分是,仅通过浏览器中的URL,您无法确定您是否正在查看生产站点。(Firefox的ShowIP插件可以帮助您解决此问题。)
关于CVS / SVN:我真的建议您选择SVN。它不比CSV难用,但具有一些优点(例如,可以重命名)。有关更多信息,请参见this question
关于在沙盒中预览,我们的做法是:我们大部分开发都在主干上进行(或者在一个分支上,但其余流程几乎相同)。一旦我们准备好向客户展示,我们创建一个标签。这个标签用于更新预览服务器。如果客户不满意,我们会在主干(或分支)上继续开发,创建一个新的标签,使用该标签更新预览等。一旦客户满意,我们使用完全相同的标签在预览中运行,也更新生产服务器。这样我们就可以确保预览和生产服务器具有相同的代码库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接