conta's diary

思ったこと、やったことを書いてます。 twitter: @conta_

FlaskのアプリケーションをApache上で動かす

Flask簡単で小さなアプリを作るには良い感じ☆
ってことでApacheで動かしてみることにしました
Apache上で動かすのにwsgiっていうのがあるしい

今回の環境は下記の通り
CentOS5.7
python 2.6.5

wsgiインストール

WSGIをソースからインストールします

cd/usr/local/src
wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
tar xzvf mod_wsgi-3.3.tar.gz
cd mod_wsgi-3.3
./configure--with-python=/usr/bin/python
make 
make install

ちゃんとインストールできたかはこれで確認

ls /etc/httpd/modules/mod_wsgi.so 

ファイルがあればOKです

これでインストール完了!

テストを書いてみる

テストとして、/var/www/wsgiの下にflasktest.pyとflasktest.wsgiを準備します

flasktest.py

from flask import Flask
app=Flask(__name__)

@app.route('/')
def index():
    return 'Hello world.'

if__name__=='__main__':
    app.run()

flasktest.wsgi

import sys, os
sys.path.append('/var/www/wsgi')

from flasktest import app as application

構成は下記の通り

/var/www/wsgi/ --- flasktest.py
                \- flasktest.wsgi

.confを書く

/etc/httpd/conf.d の下にwsgi.confを作る。
中身はこんな感じ

LoadModule wsgi_module modules/mod_wsgi.so
WSGISocketPrefix run/wsgi

<VirtualHost *>
    ServerName example.com
    WSGIDaemonProcess wsgi_flask user=apache group=apache threads=5
    WSGIScriptAlias /wsgi /var/www/wsgi/flasktest.wsgi
    <Directory /var/www/wsgi>
        WSGIProcessGroup wsgi_flask
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

ここが結構はまった。
この2つの名前を同じにしとかないといけないらしい。

WSGIDaemonProcess 名前
WSGIProcessGroup 名前

公式ページのをパクって書き換え忘れてた。。。
Internal Server Error がずっと出てて、分かんねーと思って、ふとログをみると

[error] [client --------] No WSGI daemon process called 'example.com' has been configured: /var/www/wsgi/flasktest.wsgi

って書いてあってやっと気づいた。
ぅう(´・ω・`)

起動

下記コマンドでwsgi.confがちゃんとかけてるかチェック

/usr/sbin/apachectl configtest

エラーが出なかったらOK

Apacheをリスタートして、いざ起動

service httpd restart

今回は
WSGIScriptAlias /wsgi /var/www/wsgi/flasktest.wsgi
ってかいてあるんで、

http://-----/wsgi

にアクセスしてちゃんと返事が出れば成功です!

でたー、わーい(・∀・)

実は結構時間かかりました^^;
あんまりよくわかってない部分が多いかも、、、
もうちょい勉強しなきゃだな。。。

おしまい!