Flask App分派:多个uWSGI实例或调度到单个实例。

2024-10-01 17:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个Flask应用程序,其中我们将有多个客户机(10-20个),每个客户机都有自己的配置(对于数据库、客户机特定的设置等等),每个客户机都有一个子域,比如www.client1.myapp.com, www.cleint2.myapp.com。我使用uWSGI作为中间件,nginx作为代理服务器。在

我想有两种方法来部署它,一种是使用application dispatching,以及一个uwsgi实例。另一种方法是只为每个客户端运行一个单独的uwsgi实例,然后使用nginx基于子域将流量转发给正确的应用程序。有人知道每种情况的利弊吗?只是好奇,像Jira这样的应用程序是如何处理这个问题的?在


Tags: 实例方法子域com数据库应用程序flask客户机
1条回答
网友
1楼 · 发布于 2024-10-01 17:22:03

我建议有多个实例,由nginx转发。我正在用一个PHP应用程序做一些类似的事情,它运行得非常好。在

这样做的原因和好处是,你可以将所有东西完全分开,如果一个客户的设置出了问题,你可以重新实例,其他人也没有问题。此外,没有用户,即使他们设法破坏了应用程序级别的安全性,也不能访问任何其他用户的数据。在

我将所有客户机保存在它们自己的数据库中(一个mysql实例,多个dbs),这样我就可以完成一个完整的sqldump(如果使用mysql等),或者对于另一个使用sqlite而不是mysql的应用程序:完全复制.sqlite数据库进行备份。在

这样做意味着你还可以轻松地设置客户端站点的“测试”版本,以及实时版本。然后你可以通过改变你的nginx设置来交换哪个是实时的。比如说做升级,你可以升级测试一个,检查一切正常,然后交换。(此外,对于某些应用程序,客户可能希望有自己的“测试”版本,他们可以心碎,并知道他们(或您)可以在不损害其“真实”数据的情况下立即恢复它)。在

在应用程序调度方面,如果没有为每个客户端提供单独的nginx配置,就无法轻松地让nginx为单独的客户端上载目录提供服务(如果要这样做,那么为什么不针对单个uWSGI实例呢)。同样地,对于单个SSL证书(如果您想要的话…)。在

每个子域(或某些单独的域)都有自己的日志记录,因此,如果某个客户机被DOS's或黑客入侵,很容易看出是哪一个。在

您可以为每个用户设置文件系统级别的大小配额,这样,如果一个客户端开始上传gBs的视频,您的服务器也不会被填满。在

我的工作方式是使用ansible来配置和设置我想要的服务器,客户机特定的详细信息保存在一个单独的host_var文件中。所以我的清单是:

[servers]
myapp.com #or whatever...

[application_clients]
apples
pears
elephants

[application_clients:vars]
ansible_address=myapp.com

然后host_vars/apples

^{pr2}$

然后在配置中,我为每个客户机设置了两个新用户和一个组。例如:applesweb.apples作为两个用户,而组只是apples(两者都在)。在

这样,所有的应用程序代码都归apples用户所有,但是PHP-FPM实例(在您的例子中是uWSGI实例)由web.apples运行。所有代码的权限是rwXr-X -,上载和静态目录的权限是rwXrwXr-X。Nginx以自己的用户身份运行,因此它只能访问upload/static目录,这些目录可以作为直接文件使用。任何你想由uWSGI应用程序提供的私人文件都可以通过这种方式轻松设置。web用户可以读取并执行代码,但不能对其进行编辑。实际用户本身可以读写代码,但通常不使用,除了更新、安装插件等

我可以把一个SFTP用户交给一个客户端,如果他们想在应用程序接口之外上传,那么这个用户就被chroot'd到他们的uploads目录。在

使用ansible或另一个配置系统意味着创建新的客户机设置所需的工作非常少,如果客户机(无论出于什么原因)希望转移到自己的服务器上,只需几行代码就可以更改配置细节,并重新运行脚本。这也意味着我可以使用与主服务器完全相同的配置来安装一个开发服务器,而且我还可以让一个备份的amazon实例处于备用状态,随时可以在需要时接管它。在

我意识到这并不能完全回答你关于利弊的问题,但无论如何,它可能会有所帮助。uWSGI或任何其他WSGI服务器的多个实例(主要是我使用waitress,但也有很多好的实例)设置起来非常简单,如果按逻辑进行的话,有一个好的供应系统,易于管理。

相关问题 更多 >

    热门问题