2013-12-09 121 views
0

我已经完成了一个简单的Flask应用程序,该应用程序试图在带有Apache2的AWS EC2实例上托管。我一直在关注this tutorial在EC2上部署Flask应用程序以进行本地主机访问

只有我的开发过程(其中应用程序,当我运行它,然后尝试通过本地主机访问它运行完全正常)所做的更改是:

1) Moved all the code in to /var/www 
2) Changed it so that 
     if __name__=='__main__': 
      app.run(debug = False) #Now False instead of True 
3) Added a app.wsgi file 
4) Added file my_app to /etc/apache2/sites-available 
5) Ran these commands: 
    $ sudo a2dissite default 
    $ sudo a2ensite sitename.com 
    $ sudo /etc/init.d/apache2 restart 

这里是应用程序。 WSGI文件:

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

from app import app as application 

这里是/etc/apache2/sites-available的程序my_app文件:

<VirtualHost *:5000> 
     WSGIDaemonProcess app 
    WSGIScriptAlias//var/www/my_app/app.wsgi 

    <Directory /var/www/my_app> 
      WSGIProcessGroup app 
     WSGIApplicationGroup %{GLOBAL} 
     Order deny,allow 
     Allow from 127.0.0.1 
    </Directory> 
</VirtualHost> 

正如你从上面的文件中看到的,我只想在本地主机上使用容器应用程序。

当我运行apache并尝试访问网站my_site.com:5000时,出现“无法连接错误”。我无法弄清楚为什么。任何帮助,将不胜感激。

而且,这里是我的瓶应用程序本身的目录结构,如果这是需要的:

/var/www/my_app/ 
    app/ 
     __init__.py 
     static/ 
      css/ 
       bootstrap.css 
      favicon.ico 
      js/ 
       bootstrap.js 
     templates/ 
      base.html 
      index.html 
      search.html 
     views.py 
    app.wsgi 
    flask/   #my virtualenv 
     #Your typical virutalenv structure 
    flask_util_js.py #File that is a FLask entension for client-side generation of URLs 
    requirements.txt 
    run.py 
    virtualenv.py #Creates virutalenv flask 

UPDATE:

所以,我的感觉是,我有办法我代码设置是有问题的。所以我把run.py__init__.pyviews.py中的所有东西都拿了下来,并做了一个大的main.py。我已经更新了我app.wsgi看起来像这样:

app.wsgi

import sys 

activate_this = '/home/achumbley/flask/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 

sys.path.insert(0, '/home/achumbley/new_flask_app') 

from main import app as application 

而现在,我/etc/apache2/sites-available/new_flask_app样子:

<VirtualHost *> 
    ServerName dev.east.appliedminds.com 

    WSGIDaemonProcess app 
    WSGIScriptAlias//var/www/app.wsgi 

<Directory /home/achumbley/new_flask_app> 
    WSGIProcessGroup main 
    WSGIScriptReloading On 
    WSGIApplicationGroup %{GLOBAL} 
    Order deny,allow 
    Allow from all 
</Directory> 

最后,他是我的最新目录结构:

/home/my_username/new_flask_app/ 
    logging.log 
    flask_util_js.py 
    main.py 
    static/ 
    templates/ 

它仍然不起作用。但是,我可能不知道如何运行整个事情。我应该运行一个python main.py对不对?它应该是自动的,至少这是我所设想的。

回答

2

感动了所有的代码到/ var/WWW

这是不对的。您需要将您的代码发布到非Web可访问的目录中。只发布您的静态文件到/var/www

请参阅official deployment guide关于如何使用Apache和mod_wsgi进行设置。如果遇到问题,可以考虑安装了flask,nginx和uwsgi的this AMI image

nginx + uwsgi栈也是detailed in the documentation

以下是具体步骤(简体),您需要遵循:

假设您的应用程序是:

my_app/ 
    static/ 
     logo.gif 
     style.css 
    templates/ 
     index.html 
    main.py 

然后按照下列指示:

  1. 上传所有的代码到/home/youruser/
  2. app.wsgi文件上传到/var/www/
  3. 上传静态目录的内容,以/var/www/static
  4. app.wsgi文件:

    import sys 
    sys.path.append(0, '/home/youruser/my_app') 
    
    from main import app as application 
    
+0

好吧,所以我将代码移出并使用app.wsgi文件中的应用程序的绝对路径。重新启动apache,但仍然不起作用。它现在应该工作吗?另外,我还看到了很多其他示例,显示了位于/ var/www中的整个应用程序,您确定不允许其中存在代码? –

+0

是的,绝对确定。你在'app'目录下没有'app',这就是为什么它不起作用。导入行应该引用你有'if __name__ =='__main __''行的模块。 –

+0

Gah,所以我完全重构了我的代码,以便所有内容都包含在您的示例中的main.py中。我认为我做的一切都是正确的。但它仍然不会服务我的应用程序...更新的问题 –

1

是否启用mod_wsgi的Apache的?

a2enmod wsgi 
service apache2 restart 

我也将用一个简单的“世界你好”例如尝试,这将是main.py的/home/ubuntu/new_flask_app下的内容:

from flask import Flask 
app = Flask(__name__) 

@app.route('/') 
def hello_world(): 
    return 'Hello World!' 

if __name__ == '__main__': 
    app.run() 

这是我的工作例如样品瓶Apache的配置:

<VirtualHost *:80> 
    ServerAdmin [email protected] 

    ServerName app.com 

    WSGIDaemonProcess new_flash_app user=ubuntu group=ubuntu threads=5 
    WSGIScriptAlias//var/www/app/app.wsgi 

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

</VirtualHost> 

,这将是app.wsi

内容

顺便说一句,你的wsgi和main.py(或应用文件)不需要在同一个目录下,只要确保配置指向正确的文件即可。

您可以测试你的服务器是这样的:

$ telnet localhost 80 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
GET/
Hello World!Connection closed by foreign host. 
$ 

我还要检查所提到的Apache日志/var/log/apache2/error.log

您也可以尝试nginx的一样(布尔汗哈立德)。

相关问题