更新实时网站的过程

时间:2011-08-20 22:58:36

标签: php git

更新实时网站的最佳流程是什么?

我看到很多网站(例如StackOverflow)都警告提前维护会有停机时间。这通常是如何编码的?他们是否有配置值来决定是否在网站标题中显示这样的消息?

另外,如果您的本地主机与生产服务器不同,您需要做什么,并且在转移后需要确保一切正常?在我的例子中,我设置了development.mydomain.com(需要.htaccess身份验证),它有自己的数据库,在将所有内容上传到实际生产站点之前,它基本上是我的最终暂存区域。这是一个很好的分期方法吗?

最后,是一个简单的SFTP上传方式吗?我已经阅读了一些更复杂的方法,例如在Git中使用服务器端钩子。不确定这是如何工作的,或者是否是我应该采用的方法。

非常感谢启蒙......

babonk

3 个答案:

答案 0 :(得分:2)

这(大致)是如何在Google App Engine上完成的:

每次部署应用程序时,它都会根据其版本与子域相关联:

version-1-0.example.com

version-1-1.example.com

example.com与其中一个版本相关联。

如果您拥有新版本的服务器端软件,则将其部署到version-2-0.example.com,当您确定将其投放使用时,请将example.com与之关联。

我不知道细节,因为Google App Engine为我做了这个,我只是设置当前版本。

此外,当SO或其他大型网站出现停机时,更有可能是硬件问题,而不是软件问题。

答案 1 :(得分:0)

这将取决于您的网站和您网站的平台/技术。对于简单的网站,您只需使用FTP更新文件,或者如果服务器可在本地访问,您只需复制新文件即可。如果您的网站由某些云服务托管,那么您必须按照他们提供的任何步骤来执行此操作,因为基于云的托管服务通常不会让您直接访问这些文件。对于具有后端数据库的复杂网站,无论何时更新代码,您都必须更新数据库。为了确保两者同时更新,您必须将网站关闭。为了最大限度地减少停机时间,您可能希望拥有经过良好测试的更新脚本来完成实际工作。这样你就可以取下网站,运行脚本并重新启动它。

答案 2 :(得分:0)

使用PHP(和我假设的Apache),它比其他一些设置(例如必须重新启动进程)容易得多。理想情况下,您有一个系统知道只传输已更改的文件(即rsync)。

我使用Springloops(http://www.springloops.com/v2/)来托管我的git存储库并通过[S /] FTP自动部署。除非您有数千个文件,否则部署几乎是即时的。

如果您真的想要,您可以在部署期间使用.htaccess文件(或等效文件)重定向到“维护不足”页面。除非你平均每秒至少有几个请求(或者其他关键任务),否则你可能甚至不需要这一步(不要过早地优化!)。

如果是我,我会有一个.htacess文件,其中包含重定向指令,并将其设置为仅在维护时间内重定向。如果没有即将进行的部署,请将文件重命名为“.htaccess.bak”或其他内容。然后,在PHP脚本中:

<?php if (file_exists('/path/to/.htaccess')) : ?>
<h1 class="maintenance">Our site will be down for maintenance...</h1>
<?php endif; ?>

然后,为了获得真正的想象力,请设置Springloops预部署挂钩以确保设置维护重定向,并设置部署后挂钩以在成功时更改它。

只是一些想法。

-Landon