我需要最佳做法来更新网站上的一个或多个文件,而不会让它失效;
例如,如果我更新Model.php文件,上传将花费几秒钟,比如在替换服务器上的文件之前的一两秒钟,同时,网站将显示一些错误,即model.php不是发现或不完整,即使我压制错误,网站最终也会死亡。
最佳做法是什么?
答案 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。