如何在不降低网站的情况下更新网站?

时间:2013-03-31 18:19:33

标签: php

我需要最佳做法来更新网站上的一个或多个文件,而不会让它失效;

例如,如果我更新Model.php文件,上传将花费几秒钟,比如在替换服务器上的文件之前的一两秒钟,同时,网站将显示一些错误,即model.php不是发现或不完整,即使我压制错误,网站最终也会死亡。

最佳做法是什么?

3 个答案:

答案 0 :(得分:11)

我在实践中经常使用的一种做法是 -

  • 使用版本控制系统(VCS),如SVN或Git

  • 在实时服务器上的
  • ,使网站的web根目录成为包含最新版本网站(例如/www/domain.com/r555)的目录的符号链接,用于版本号。 555

  • 当出现更改时,请检查对VCS的更改

  • 有一个脚本可以检查新目录的最新修订,并带有修订名称(例如/www/domain.com/r556

  • 结帐时,更改符号链接并将其指向/www/domain.com/r556

如果您有动态数据(例如文件上传)以及VCS中无法获得的动态数据,则会出现一些障碍,但无需停机即可处理这些数据。

但是,数据库更改等内容仍可能需要某种维护模式。

答案 1 :(得分:1)

更新产品时,创建一个名为1.1的文件夹并将新应用程序放在那里(无论是手动还是通过某些VCS),然后将公共html目录符号链接到它。开关将是瞬时的。

这不是一种不常见的方法,因为其中一个好处是如果代码出现问题,管理员可以立即将符号链接回1.0文件夹。

另一个好处是将VCS标记命名为与文件夹相同,以便可以轻松跟踪正在使用的版本。

答案 2 :(得分:0)

使用缓存服务器/应用程序为用户保留缓存副本。 Varnish就是一个例子。您可以将Varnish设置为在指定的时间内缓存内容,以及在实际网站的服务器无法访问时的替代时间(Model.php not found错误等)。

在这种情况下,如果您更新生产系统,Varnish可以继续提供网站的缓存副本,直到后端启动并再次正常运行(无论是2秒还是2小时)。只需记住在更新后清除Varnish缓存,以防用户(UI,内容等)发生变化。

所有网络服务器都有一些缓存功能,但是 缓存。

另一种选择是在HAProxy之类的负载均衡器后面运行同一网站的两个或多个实例。一次更新一个,HAProxy可以将流量重定向到您当前没有更新的流量。

如果您需要有关服务器级缓存或负载平衡的更多信息,请转到Server Fault