2013年11月26日 星期二

Python Flask with apache and mod_wsgi in Ubuntu

Flask 是個 Python 的 microframework,比起 django 來講,什麼都得自己來,但相對也比較好掌控,前陣子剛好在 server(Ubuntu) 架設,所以紀錄一下。

要成功,主要分為兩點:

  1. apache 和 mod_wsgi 的設定(依據作業系統配置方法也不同)
  2. Flask app 的設定

Apache and mod_wsgi

假設你的 domain name 是 myname.com,而你想讓 application 的網址是 app.myname.com

首先,安裝 mod_wsgi
sudo apt-get install libapache2-mod-wsgi
再來,
cd /etc/apache2/sites-available
vim app
內容寫入
<Virtualhost *:80>
    DocumentRoot /var/www/app
    ServerName app.myname.com
    LoadModule wsgi_module modules/mod_wsgi.so
    WSGIScriptAlias / "/var/www/app/app.wsgi"
    <Directory /var/www/app>
      Order deny,allow
      Allow from all
    </Directory>
</Virtualhost>
最後,
sudo a2ensite app
sudo service apache2 restart
vim /etc/hosts
在 /etc/hosts 裡加上
127.0.0.1 app.myname.com

這部份結束!

Flask Application


要 create 一個 wsgi file:

cd /var/www/app
vim app.wsgi
而內容寫下測試的輸出結果:
def application(environ,start_response):
    status='200 OK'
    output='Python Flask with apache and mod_wsgi in Ubuntu'
    headers=[('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
    start_response(status, headers)
    return [output]
再來,要讓 app.wsgi 可以存取
chmod a+x app.wsgi

接著瀏覽 app.myname.com,如果有出現
Python Flask with apache and mod_wsgi in Ubuntu
那就代表 apache 和 mod_wsgi 成功,可以進行實際設定了。
將 app.wsgi 改成
import sys
sys.path,append('/var/www/app')

from main import app as application
其中 main 的意思代表主要 py 檔的檔名,所以 main.py 內容就是
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Welcome!'

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

這樣就大功告成啦!
瀏覽 app.myname.com 可以看到
Welcome!

Reference 

如果想更進一步了解 Flask ,可以到 http://flask.pocoo.org/

沒有留言:

張貼留言