簡體   English   中英

在EC2上部署Flask應用以進行本地訪問

[英]Deploying Flask app on EC2 for localhost access

我已經完成了一個簡單的Flask應用,該應用正在嘗試使用Apache2托管在AWS EC2實例上。 我一直在關注本教程

我在開發過程中所做的唯一更改(在運行應用程序時,應用程序運行完全正常,然后嘗試通過本地主機訪問它):

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

這是app.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>

從上面的文件中可以看到,我只希望flask應用程序在本地主機上可用。

當我運行apache並嘗試訪問my_site.com:5000的網站時,出現“無法連接錯誤”。 我真的不知道為什么。 任何幫助,將不勝感激。

另外,如果需要的話,這是Flask應用本身的目錄結構:

/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

更新:

因此,我感到我的代碼設置方式存在問題。 因此,我將所有內容都放入run.py__init__.py run.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對嗎? 它應該只是自動的,至少這是我所假設的。

將所有代碼移至/ var / www

錯了 您需要將代碼發布在不可通過網絡訪問的目錄中。 僅將您的靜態文件發布到/var/www

請參閱官方部署指南 ,了解如何使用Apache和mod_wsgi進行設置。 如果遇到問題,可以考慮安裝了flask,nginx和uwsgi的AMI映像

nginx + uwsgi堆棧在文檔中也有詳細介紹

這是您需要遵循的步驟(簡化):

假設您的應用程序是:

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 

您是否在apache上啟用了mod_wsgi?

a2enmod wsgi 
service apache2 restart

我還將嘗試一個簡單的“ hello world”示例,這將是/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 webmaster@localhost

    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的內容

import sys

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

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

from main import app as application

順便說一句,您的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

您也可以像(Burhan Khalid)提到的那樣嘗試nginx。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM