gpt4 book ai didi

php - 在不停机的情况下更新服务器文件的正确方法

转载 作者:行者123 更新时间:2023-12-02 03:05:09 24 4
gpt4 key购买 nike

我想到了这种方法来更新服务器文件而无需停机:

  1. 将新文件上传到新文件夹,例如到/www/v1/
  2. 在 httpd.conf 中,更新 DocumentRoot 以指向新文件夹
  3. 重新启动 Apache。

这有什么缺点吗?有更好的办法吗?

在重新启动时访问文件时是否会出现任何竞争条件错误?

最佳答案

没有一种方法可以始终工作 - 即使您准备并部署新服务器,然后更改负载平衡器以指向新计算机。某人可能刚刚从原始服务器请求了一个页面,然后从新计算机上的网站的新副本中获取该页面的部分内容。然而在实践中这不太可能造成大问题。

在具有复杂需求的较大站点上,事情会变得更加困难 - 并且需要付出代价。大多数站点都有更简单的要求。即使是数据库迁移也可以计划为尽量减少中断 - 但也会很复杂,并且必须通过计划的停机时间来解决。

由于在同一台计算机(或少量计算机)上的站点副本之间进行切换很容易(有效地移动 Apache 或 Nginx DocumentRoot),因此这是一种易于使用的技术(并且不需要多台机器和负载均衡器来实现)是这样:

  1. 虽然网站仍在磁盘上的当前位置正常运行...
  2. 在新目录中查看并准备一个完全独立的网站副本
  3. 根据需要运行任何必需的composer安装或 Assets 获取/准备
  4. 更改新旧网站之间的符号链接(symbolic link)。

实际上,这就是 Capistrano (和其他类似的工具)确实如此。基本目录的布局如下:

base-directory
releases
20151010-0925/
vendor/ (composer-installed files)
web/index.php
20151120-1007/
vendor/ (composer-installed files)
web/index.php
current (symlink to ../releases/20151010-0925/)
shared/ (files shared between releases)

部署网站的新版本时 - 创建一个新的完整版本,然后在完成后更改“当前”符号链接(symbolic link)。

此实例中的 Apache 文档根将指向 .../base/current/web/通过符号链接(symbolic link)到达网站的基础。

如果部署在任何时候未能准备好,您可以简单地中止它,并可以选择删除您尝试部署的已发布版本,而不更改符号链接(symbolic link)。

我已经使用了这种技术,从简单的单页 HTML/CSS 网站到运行数千个并发用户的三机集群。

关于php - 在不停机的情况下更新服务器文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33822905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com