将站点更新从开发/阶段/测试环境推向生产的最佳实践是什么?

时间:2008-09-23 19:06:11

标签: maintenance

现在我有一个运行基本LAMP配置的开发服务器。生产服务器是slicehost。但我想知道将代码/ db的实例推送到阶段dev的最佳方法是什么?阶段>生产。它与你如何创建阶段有关吗?

如果不将网站关闭,你怎么做?如果你不进行负载平衡,它甚至可能吗?

我知道这有点笼统,我只是想指出正确的方向。

7 个答案:

答案 0 :(得分:2)

我使用.htaccess来创建一个“维护模式”jiffy,其中只有我的IP可以在更新时看到主站点。其他人都可以查看一条短信,这样他们就知道应该在几个小时内重新上线。

然后我:

  1. 进行任何数据库编辑
  2. SVN导出/上传文件
  3. 运行自动化测试并尽可能快速查看以确保没有任何可怕的错误
  4. 还原.htaccess
  5. 这是给定的,但在推送到实时服务器之前,您应该尽可能多地在本地进行测试。有些人使用两个实时服务器(如生产服务器上的密码名称子域)作为实时更新的测试区域。这可以减少主站点的实际停机时间。

    我应该强调,重要的是不要在未事先关闭服务器的情况下将更新推送到实时服务器(特别是如果你使用二进制文件和ASPNET),因为用户在更新时尝试使用该网站会收到可怕的错误消息而你可能会锁定文件。

答案 1 :(得分:1)

我会研究某种自动“构建”风格的灯具环境,您可以在其中安装脚本,为每个环境打包并准备您的版本。

我认识到PHP没有实际构建,但您可以设置自动化来更改任何配置或设置问题,并将所有内容保存到准备实施的文件夹中。

如果没有负载平衡/ Web场环境,我不相信您可以完全消除停机时间。但是,在我的书中减少它的最简单方法是建立一致的代码准备过程并多次测试过程。自动化将有助于那里。

至于实际复制文件的行为,我不仅仅知道使用FTP或其他方便的东西。也许发布加载消息。再次,这可以全部编写出来。

最后请记住,因为PHP没有构建,所以它可以很好地跟踪现在的内容与您更改的内容之间的差异,并且只移动这些文件。有时,这会增加不必要的复杂性。

答案 2 :(得分:1)

我不知道这是不是一个好主意,但是从源控制系统自动检出怎么办?也许有一些开发分支 - 测试前沿,维护/小改进的开发,以及生产代码的生产。每当开发稳定时,将其合并到生产分支中,并由生产机器定期自动检出。

答案 3 :(得分:0)

就将文件推送到所有Web服务器而言,我发现好的旧机器人可以解决问题。我的dev / stage / prod环境当然都是相同的。只需建立一个临时页面,告诉用户该网站将立即回来。

答案 4 :(得分:0)

现在我们使用一系列带有配置文件的shell脚本,这些配置文件对我们更改的文件进行tar操作,将它们scp到集群中的每个服务器,然后在它们出现后解压缩它们。这种方法当然有其缺点,我们正在考虑一种方法,其中每个服务器成员都安装了一个svn客户端,并且一旦我们标记新版本,我们就将生产服务器上的工作副本切换到该新标记。当然,我们现在在维护时间内发布,因此我们不需要为用户做任何特殊操作(他们无论如何都会看到维护页面)。

答案 5 :(得分:0)

我的核心配置中有一个选项允许访问网站或预设网址列表我可以将所有用户重定向到(并使用适当的http代码停止任何API流量)。

这些网址是指向静态html文件的链接,向用户解释发生了什么。

启用此功能后,不会向数据库或任何文件发出请求,因为所有请求都会发送到HTML文件,然后才会发生这种情况,从而为部署任何更新提供了“明确”的空间。

答案 6 :(得分:0)

用pv和ftp执行任务的apache ant为我买单。甚至有人用ANT做数据库的东西,但我倾向于想亲自观看。一旦你有一个干净的推送构建ftp到你的所有位置,你会惊讶于它是多么容易。