在ec2实例的不同子域上运行多个Flask应用程序

时间:2013-01-24 20:55:04

标签: python dns apache2 flask

我有一个Amazon EC2实例运行我使用Flask构建的动态网站。

我不确定在同一个ec2实例上运行不同webapps的最佳方法是什么。我在这里阅读了有关应用程序调度的信息:http://flask.pocoo.org/docs/patterns/appdispatch/以及关于Apache2虚拟主机:http://blog.agdunn.net/?p=162

我想在ec2实例上运行我的主网站www.mydomain.com(我已经开始工作了)然后链接到我构建的其他Flask应用程序,例如在www.subdomain.mydomain.com。

这可以通过使用虚拟主机来完成,还是通过使用应用程序调度在wsgi层上完成?如果是这样,哪个更好?

一如既往,非常感谢帮助和建议。

编辑:感谢您的回复

目前我正在尝试运行主网站,这是一个存储在var/www/mysite内的烧录应用,位于主域domain.co.za之外,另一个应用位于var/www/flaskhello/flaskhello,关闭子域hello.domain.co.za。目前,测试子域应用程序只是一个烧瓶hello world应用程序。我有apache2配置文件和wsgi文件设置如下所示。

我遇到的问题是,domain.co.zahello.domain.co.za都显示了flaskhello应用。出于某种原因,var/www/flaskhello/flaskhello/index.wsgi文件似乎优先于var/www/mysite/index.wsgi,并且我对sys.path.insert...行所做的更改似乎有效。

编辑2

现在我读过this Google Groups thread,这与我正在尝试但使用DJango类似。仍然没有成功,但它让我们想知道WSGIApplicationGroup %{GLOBAL}是否是造成这个问题的原因。我试过改变一下,但我不完全确定我在做什么,也找不到关于如何在WSGI中使用ApplicationGroups的任何好文档。

再次感谢您的帮助。

-

我有以下文件

etc/apache2/sites-enabled/019-domain.co.zaetc/apache2/sites-available/domain.co.za

<VirtualHost *:80>
     WSGIDaemonProcess index
 WSGIScriptAlias / /var/www/mysite/index.wsgi

 <Directory /var/www/index>
        WSGIProcessGroup index
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
 </Directory>
</VirtualHost>

etc/apache2/sites-enabled/018-hello.domain.co.zaetc/apache2/sites-available/hello.domain.co.za

<VirtualHost *:80>
 WSGIScriptAlias / /var/www/flaskhello/flaskhello/index.wsgi

 <Directory /var/www/index>
        WSGIProcessGroup index
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
 </Directory>
</VirtualHost>

var/www/mysite/index.wsgi

import sys
sys.path.insert(0,'/var/www/mysite')

from index import app as application

var/www/flaskhello/flaskhello/index.wsgi

import sys
sys.path.insert(0,'/var/www/flaskhello/flaskhello')

from index import app as application

2 个答案:

答案 0 :(得分:2)

最终工作了 有用的阅读: Aagudnn.net blog post Graham's answer on Google Groups

事实证明我的一条路径错误 blush 并且我仍然需要设置ServerName和ServerAlias部分配置文件。另外,我不能对两个单独的DaemonProcesses使用相同的名称。

现在一切都很完美。

我的最终配置文件:

<VirtualHost *:80>
    ServerName www.domain.co.za
    ServerAlias domain.co.za
         WSGIDaemonProcess www.domain.co.za
     WSGIScriptAlias / /var/www/mysite/index.wsgi
     <Directory /var/www/mysite/index>
            WSGIProcessGroup index
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
     </Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName www.hello.domain.co.za
    WSGIDaemonProcess www.hello.domain.co.za
 WSGIScriptAlias / /var/www/flaskhello/flaskhello/index.wsgi
 <Directory /var/www/flaskhello/flaskhello>
        WSGIProcessGroup www.hello.domain.co.za
    Order deny,allow
    Allow from all
 </Directory>
</VirtualHost>

答案 1 :(得分:1)

这绝对可行。如果您打算使用不同的域,您当然需要使用vhosts,并且您可能希望查看virtualenv以分离应用程序python堆栈(甚至LXC容器以提高安全性)。如果您计划使用不同的应用程序,那么它们将具有单独的调度命名空间,因此您必须使用不带url_for的重定向作为参数,而是实际的硬链接URL。这是非常典型的设置,它应该非常容易实现 - 当您遇到第一个具体问题时,请回复我们:)