【问题标题】:Setting up a server to host multiple domains using django, virtualenv, gunicorn and nginx使用 django、virtualenv、gunicorn 和 nginx 设置服务器以托管多个域
【发布时间】:2017-03-13 08:30:08
【问题描述】:

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

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

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

  • django
  • 独角兽
  • nginx
  • postgreSQL 和 psycopg2(尽管有些网站会使用地理空间和其他扩展)

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

  • 使用的 python 模块(可能对所需的 python 版本有影响)

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

那么我的问题是:

全局安装 django、gunicorn、nginx、postgreSQL 和 psycopg2 并仅使用 virtualenv 进行管理是否“可接受”(或在上述情况下被视为最佳实践)项目之间不同的部分(例如python模块/版本)?

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

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

【问题讨论】:

    标签: python django postgresql nginx virtualenv


    【解决方案1】:

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

    首先,不清楚您认为哪种“资源”会被浪费。唯一相关的是磁盘空间,我们只讨论几兆字节;甚至不值得考虑。

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

    【讨论】:

    • 好的,感谢您的意见。但是 nginx 绑定到一个端口,所以很明显,在每个 virtualenv 中安装 nginx 是没有意义的——因为只有一个 nginx 实例可以绑定到端口 80(或 443)——我在这里错过了什么吗?
    • 你不能在 virtualenv 中安装 nginx。 Virtualenvs 用于 Python 库。 nginx 安装在系统级别并代理到站点,每个站点都在 virtualenv 中运行。同样,Postgres 已安装并在全局范围内运行,但 psycopg 已为每个环境安装。
    • 您能否确认我的理解是否正确:[postgresql、nginx、virtualenv] gunicorn 位于 virtualenv 中。我正在努力看看它是如何工作的(每个应用程序都有自己的 gunicorn 实例),但都绑定到同一个端口(这里是 Apache2 老手......)
    • 是的。但是 gunicorn 实例不会绑定到同一个端口。它们会绑定到各个端口,甚至更好的套接字,而 nginx 会从端口 80 代理到各个端口。
    【解决方案2】:

    我不认为这是可取的。

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

    最终它会达到一个你永远无法升级的地步,因为项目 A 的依赖项 foo 不适用于 django 1.N,但项目 B 的依赖项栏至少需要 1.N - 此时无论如何你都会退回到更清洁的解决方案, 单独的环境。

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

    【讨论】:

      【解决方案3】:

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

      我目前在多台服务器上进行了这样的配置,我对此非常满意,因为我非常灵活而且非常重要 - 我很安全,因为如果任何项目中存在严重错误,其他项目仍然安全。

      【讨论】:

        猜你喜欢
        • 2013-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 2018-02-10
        • 2018-03-27
        • 2017-01-19
        • 2015-06-21
        相关资源
        最近更新 更多