我们应该如何build立一个支持持续发展的Web服务器?

我已经租用了一个VPS(Linux – Fedora),并将其用作同一Web应用程序的开发和生产的Web服务器

我已经安装了apache,subversion以及运行PHP所需的所有软件包。

在Apache中,我创build了两个虚拟主机:

dev.mydomain.com (for ongoing development, /var/domains/dev.mydomain.com/public_html ) www.mydomain.com (for production, /var/domains/www.mydomain.com/public_html ) 

将只有一个开发人员,他将在Windows XP上使用Netbeans作为IDE。

我可以想象,他要做的第一件事就是在Netbeans中将一个副本从SVN存储库中签出到他的电脑中。 我要做的就是在这些文件夹上设置两个SVN存储库。

 /var/domains/dev.mydomain.com/public_html /var/domains/www.mydomain.com/public_html 

因此,当他在本地副本上做了一些更改,然后提交更改时,他可以在浏览器上访问dev.mydomain.com以查看页面并执行代码debugging。

之后,当他认为dev.mydomain.com中的代码可以用于生产时,他可以使用Netbeans将更改提交到www.mydomain.com

上述情况有什么问题吗? 这是如何设置这样一个Web服务器?

假设你正在做纯粹的HTML /graphicsdevise,这应该没问题。 如果父亲是dynamic的,特别是如果它做了什么事情,甚至是模糊的复杂/有趣/棘手,我不会把我的生产箱子设置成我的开发箱。

你需要一个和你的生产环境尽可能相似的开发环境,使用同一个盒子来完成这个任务,但是还是有一些问题。 最重要的是你可以降低你的生产箱testing你的新发展。 无限循环,没有正确退出的function,数据库备份……所有这些(以及更多)都会对您的生产环境产生负面影响。

我的第一个意见是,如果你不做内部发展,就是租第二个箱子。 我的第二个倾向是购买一个便宜的打浆机箱,你可以复制环境。 硬件与软件相比是不太重要的。 例如,在我上一份工作中,我们有一个colo的高端小型企业独立服务器来处理我们的生产环境。 我们的testing环境是一对eMachines。

回顾一下:如果你正在做任何dynamic的网站开发,我不会用生产来testing它。 获得第二个托pipe环境,或购买一个打浆机箱,并设置相同。

至less能够自动提交和发布小型项目是很方便的,但真正的部署脚本(例如使用rsync作为@Kevin Mbuild议)可以更好地控制和隔离生产环境。 例如,一些框架依赖于特定的目录设置(对于caching,tmp目录),保持颠覆是没有意义的。 部署脚本可以确保这些目录存在适当的权限等。

如果你想自动发布提交,你需要做几件事情:

  1. 本文介绍如何在提交上设置自动部署。 您可能需要也可能不需要所有脚本,具体取决于用户设置,权限等。
  2. 您需要确保您的服务器已configuration为不会在已发布的工作副本中提供.svn目录。

另外,如果你依赖于安装的软件(PHP,Python等)。 您需要制定一个计划,在将软件投入生产之前,如何执行升级并在dev中进行testing。 这在一个盒子上很难做到。

我认为库信息存储在工作副本,所以它不会提交到任何指定的地方。 此外,信息以数据库格式存储,而不是存储在客户端上的熟悉的目录/ directory / directory / file.html文件夹结构中。

你想要的是rsync 。 开发人员会像你所描述的那样从subversion repo中完成正常的svn checkout,但是当他准备推送到产品时,你或他将通过sshlogin到服务器并执行rsync -av --cvs-exclude /var/domains/dev.mydomain.com/public_html /var/domains/www.mydomain.com/public_html 。 这列出了所有已更新的内容,同时复制到生产环境,除了.svn目录外