Python 将更新部署到Flask应用程序

Python 将更新部署到Flask应用程序,python,flask,web-deployment,Python,Flask,Web Deployment,作为来自PHP生态系统的人,我在这里寻找高层次的见解。将更新部署到运行在单一服务器(无负载平衡节点)上的live Flask应用程序的常见方法是什么,由Nginx背后的一些WSGI(如Gunicorn)提供服务 具体来说,当您将更新从git存储库或rsync文件拉到服务器时,我假设这会留下一个小窗口,当应用程序的文件发生更改时,请求可以通过该窗口到达应用程序 我主要是为生产部署了Laravel应用程序,所以要防止这种情况,可以使用php artisan down在文件复制时弹出一个维护页面,并使

作为来自PHP生态系统的人,我在这里寻找高层次的见解。将更新部署到运行在单一服务器(无负载平衡节点)上的live Flask应用程序的常见方法是什么,由Nginx背后的一些WSGI(如Gunicorn)提供服务

具体来说,当您将更新从git存储库或rsync文件拉到服务器时,我假设这会留下一个小窗口,当应用程序的文件发生更改时,请求可以通过该窗口到达应用程序

我主要是为生产部署了Laravel应用程序,所以要防止这种情况,可以使用
php artisan down
在文件复制时弹出一个维护页面,并使用
php artisan up
在完成所有操作后恢复站点

Flask的等效功能是什么,或者是否有其他处理方法(Nginx config)


谢谢

看来Docker可能是我最好的选择:

  • 让Nginx在主机上运行,应用程序在带有Gunicorn的容器中运行。Nginx将流量定向到容器A
  • 在启动文件同步之前,先拆下容器A,然后启动容器B,后者在同一本地端口上侦听。容器B可以是维护页面或应用程序的副本
  • 启动文件同步并等待它完成。完成后,拆下容器B,然后再次启动容器A

  • 如果您关心正常运行时间,那么您将拥有冗余的Web服务器,这意味着您将在服务器之间拥有一个负载均衡器。因此,如果您想更新到新版本,您可以选择一个Web服务器,将其从负载平衡池中删除(以任何方式对负载平衡器最有效),然后在没有流量流向它的情况下进行更新。从字面上说,任何不涉及排放流量的东西都会在应用程序更新时容易出错。这将是一个非常简单的设置,只有一个VPS实例。我只是不希望在文件复制时请求通过的情况下被处理。显示一个维护页面已经足够好了,Docker似乎会让我这么做。当我更新我的应用程序文件时,它们不会被重新加载,直到我重新加载apache。我想nginx的行为也一样。只需推送文件,完成后,重新加载web服务器。是的,我在部署应用程序时注意到类似的行为。当我从repo中提取更新时,应用程序直到我重新启动Gunicorn容器才更新。JS文件和类似的东西只是从一个公共目录中提供的,但是它们确实更新了(这是有道理的)。