如何在不强迫用户等待的情况下更新网站?


8

停机对用户来说不方便,目前,他们在站点引擎升级时必须等待。此外,当使用现成的脚本时,存在设置更改无法按预期进行的风险(即使它们已在暂存站点上进行了测试)。

如何在一个服务器上保留一个站点的多个版本,并在它们之间切换而不引起任何停机(例如,使用htaccess文件)?

Answers:


6

您在Linux / BSD机器上吗?如果是这样,您可以轻松地使用符号链接来实现此目标。

在此处创建网站的版本1:

/var/www/www.example.org.v1

创建指向该目录的符号链接

cd /var/www
ln -s www.example.com.v1 www.example.com

这应该给您一个目录列表(ls -la),看起来像这样:

lrwxr-xr-x   1 userid  users    18 Aug  3 03:35 www.example.com -> www.example.com.v1
drwxr-xr-x   2 userid  users   512 Aug  3 03:35 www.example.com.v1

将您的Web服务器设置/var/www/www.example.com为用作其文档根目录。您将永远不必更改此设置;所有重新指向都将在文件系统级别完成。

现在,当您要交换站点的版本2时,只需将新版本放在以下位置:

/var/www/www.example.org.v2

并更新符号链接以指向此版本:

ln -sfh www.example.com.v2 www.example.com

这将使您的目录输出看起来像这样:

lrwxr-xr-x   1 userid  users    18 Aug  3 03:43 www.example.com -> www.example.com.v2
drwxr-xr-x   2 userid  users   512 Aug  3 03:42 www.example.com.v1
drwxr-xr-x   2 userid  users   512 Aug  3 03:41 www.example.com.v2

如您所见,www.example.com符号链接现在指向您网站的版本2。这是一项原子操作,不应导致与文件不可用相关的任何停机时间。

当然,在确保更新数据库结构,提供任何静态资源(并链接到正确的版本)等方面,仍然存在相当大的复杂性,但是至少这要确保为数据库提供所有正确的资源。新站点立即可用。

Windows Vista和Server 2008还使用该mklink命令支持符号链接,尽管我没有任何直接的经验。


7

您可以在apache中使用虚拟主机,以在2个不同的URL上具有2个版本的代码。一个常用的例子是:

test.example.com-> /var/www/version1.2

www.example.com-> /var/www/version1.1

两者都在同一台服务器上,但全世界可能只有一台可以访问。一旦确定test.example.com可以正常工作,就可以更改它们在apache配置中指向的位置,然后...。新站点,新代码。假设没有数据库架构更改,这应该起作用。因此,进行更改后,它将是:

test.example.com-> / var / www / newtestversion

www.example.com-> /var/www/version1.2

这是虚拟主机的示例apache config指令:

<VirtualHost *:80>

     ServerAdmin gabe@localhost

     DocumentRoot "/var/www/version1.1"

     ServerName test.example.com

</VirtualHost>

有关如何执行此操作的更多信息,请参阅apache虚拟主机文档。

我不确定如何在IIS中执行此操作,但我想也有办法。

如果出现问题,请将虚拟主机切换回原始主机,然后您的旧站点又恢复正常了……没有问题。您必须重新启动apache才能使这些更改生效,但这通常是非常快的事情。



0

我的建议是:

  • 上载任何更改之前,请在开发服务器上进行本地测试。除非您有理由确定在测试服务器上可以正常运行,否则请不要在实时服务器上进行更改。
  • 以最少的交通时间执行维护。对于大多数网站,这将是在周末的清晨。如果不能选择周末,请在一周内人流量最少的时间内进行。
  • 提前警告您的用户计划维护。

有没有办法设置多个版本并在它们之间无缝切换?
明胶

我以前没有做过,但是我想您可以通过多服务器或虚拟服务器设置来完成。如果这正是您要寻找的东西,那么对于ServerFault来说可能是一个更好的问题。
维塔士媒体

@Simon:是的,使用WampServer并安装不同版本的Apache,PHP和MySQL的各个模块相匹配的直播服务器- wampserver.com/en
DisgruntledGoat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.