【问题标题】:How can I use a single server to deploy multiple WSGI apps on multiple domains?如何使用单个服务器在多个域上部署多个 WSGI 应用程序?
【发布时间】:2014-01-29 01:08:11
【问题描述】:

假设的

  • 我有一个名为 myserver 的 Linux VPS 服务器,安装在 myserver.com

  • 在这台服务器上,我有两个Flask WSGI 应用程序app-oneapp-two

  • 我想在myserver 上部署这两个应用程序,但我希望它们安装在app-one.comapp-two.com 域上。

  • 应用程序没有外部依赖项(没有数据库、缓存等)。它们是独立的单文件应用程序。

  • 我没有安装 Apache、NGinX 或任何其他网络服务器软件;只是 Python、Flask 和两个 WSGI 应用程序。

  • 我有 Python/Flask 经验,但我没有很多 WSGI 部署或多域工作经验。基本说明和/或阅读材料表示赞赏。

问题/TL;DR

如何使用安装在一个域的服务器将两个 WSGI 应用程序部署到两个域?我是否需要专门为这种情况安装软件,还是只需将应用程序指向我选择的域?

感谢您的任何建议。

【问题讨论】:

    标签: python flask wsgi


    【解决方案1】:

    一旦您将 DNS 设置为将 app-one.comapp-two.com 都指向 myserver.com 的 IP 地址,那么您需要设置一些东西来路由从端口 80(或 443,如果您要使用 SSL)到您的每个应用程序。这通常通过Apachenginx 中的虚拟主机完成。

    如果您需要在同一个 Python 进程中运行这两个应用程序(无论您是否使用非 Python 网络服务器作为您的应用程序容器),那么您需要手动分派到每个应用程序:

    from werkzeug.exceptions import NotImplemented
    from werkzeug.wsgi import get_host
    
    class DomainDispatcher(object):
        """Simple domain dispatch"""
        def __init__(self, domain_handlers, default_handler=None):
            self.domain_handlers = domain_handlers
            self.default_handler = domain_handlers.get("default", default_handler)
            if self.default_handler is None:
                self.default_handler = NotImplemented()
    
        def __call__(self, environ, start_response):
            host = get_host(environ)
            handler = self.domain_handlers.get(host, self.default_handler)
            return handler(environ, start_response)
    

    使用示例:

    from app_one import app as app1
    from app_two import app as app2
    
    from domain_dispatcher import DomainDispatcher
    
    dispatcher = DomainDispatcher({'app-one.com': app1, 'app-two.com': app2})
    
    if __name__ == '__main__':
        # Wrap dispatcher in a WSGI container
        # such as CherryPy
    

    【讨论】:

      猜你喜欢
      • 2019-03-10
      • 2021-10-06
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      相关资源
      最近更新 更多