使用 django、virtualenv、gunicorn 和 nginx 设置服务器以托管多个域

Setting up a server to host multiple domains using django, virtualenv, gunicorn and nginx

我正在设置一台新的服务器机器,它将托管多个 Django 网站。

我必须指出,我拥有(开发并绝对控制)服务器上 运行 的所有网站。

我很确定所有 的网站将使用相同版本的:

我知道 django 应用程序之间唯一不同的是:

我可以理解使用 virtualenv 来管理项目具有特定 python 模块(甚至 python 版本要求)的实例,但对我来说这似乎很浪费(就资源而言) ,让每个项目(通过 virtualenv),分别安装 django,nginx,gunicorn ...等

那么我的问题是:

是否'acceptable'(或在上述场景中被认为是最佳实践)全局安装django、gunicorn、nginx、postgreSQL和 psycopg2 并简单地使用 virtualenv 来管理项目之间不同的部分(例如 python modules/versions)?

注意:在这种情况下,将有一个 nginx 服务器处理多个域。

最后但同样重要的是,是否可以使用virtualenv 来管理不同项目中的不同postgreSQL 扩展?

我认为不建议这样做。

通过这样做,您将在项目之间创建依赖关系,这意味着您将永远无法在没有所有其他项目的情况下升级一个项目。这将是一个巨大的 PITA。

最终它会达到你永远无法升级的地步,因为项目 A 的依赖项 foo 不能与 django 一起工作 1.N 但项目 B 的依赖项栏至少需要 1.N - 这时候你就倒下了无论如何回到更清洁的解决方案,单独的环境。

这至少适用于事物的 django 方面,它可能与 Postgres 和 Nginx 一起工作得更好。

没有。它可能会起作用,但这是个坏主意。

首先,不清楚您认为哪种 "resources" 会被浪费。唯一相关的是磁盘 space,我们只讨论几兆字节;想都不敢想

其次,您现在无法单独升级它们中的任何一个;对于除了微不足道的升级之外的任何事情,您都需要一起测试和发布它们,而不是只做您需要的并单独部署那个。

我建议使用 docker 虚拟化,这样每个项目都有自己的范围并且不会干扰其他项目。

我目前在多台服务器上都有这样的配置,我真的很高兴,因为我真的很灵活,而且真正重要的是 - 我很安全,因为如果任何项目中有严重的错误, 其他项目还是安全的。