我有一个名为myserver
的Linux VPS服务器,安装在myserver.com
。
在此服务器上,我有两个Flask WSGI应用app-one
和app-two
。
我想在myserver
上部署这两个应用,但我希望它们安装在域app-one.com
和app-two.com
上。
应用程序没有外部依赖项(没有数据库,缓存等)。它们是独立的单文件应用程序。
我没有安装Apache,NGinX或任何其他网络服务器软件;只是Python,Flask和两个WSGI应用程序。
我有Python / Flask经验,但我对WSGI部署或多域工作没有太多经验。基本说明和/或阅读材料表示赞赏。
如何使用在一个域上安装的服务器将两个WSGI应用程序部署到两个域?我是否需要安装特别针对此案例的软件,或者只是将应用程序指向我选择的域名?
感谢您提供任何建议。
答案 0 :(得分:2)
将DNS设置为将app-one.com
和app-two.com
指向myserver.com
的IP地址后,您需要设置一些内容来路由来自端口80的请求(或443如果您要对每个应用程序使用SSL)。这通常通过Apache或nginx中的虚拟主机完成。
如果您需要在同一个Python进程中运行这两个应用程序(无论您是否使用非Python Web服务器作为您的应用程序容器),那么您需要手动分发到每个应用程序:
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