Program

Apache+mod_wsgi+Flaskインストール

はいこんばんは。
生きてます生きてます。

ここ一週間、またPythonごりごりやってます。
今度は小さーいシステムなんでFlask (Python製マイクロフレームワーク)でさくっと作ってます。
Flaskはマイクロと名前がついているだけあって、インストールは楽だしアプリ作成手順もシンプルだし…で、触ってて楽しいですね(・∀・)。

今回、Flaskをサーバーにインストールして動かしたのでそのメモ。
環境:
サーバー: EC2, Apache + mod_wsgi
Pythonバージョン: Python2.6.6 (EC2デフォルトのバージョン)

あ、ついでなので、PythonでできたWebアプリケーションを扱う時に言われる
「ファイル更新したらApacheリロードしなきゃいかんのめんどくさー!」
って誤解も解いておきますね。

2012.5.20 追記 —-
httpd.confに「WSGIScriptReloading On」が抜けていたので追加
—- 追記ここまで

インストール・設定方法

※pip使っているのは単純に好みからです

EC2のyumで入るmod_wsgiはバージョンが古くて変なエラーが出るので
最新版をソースからインストールする。

/etc/httpd/modules
mod_wsgi.soがあるか確認。

Flaskアプリをてきとーに書く。

Flaskアプリケーションはどこに置いてもいいけど
今回は /home/foo/flask/flasktest.py に置いてみる。

次はwsgiファイルを書く。

こいつはアプリケーショントップに置きます。
/home/foo/flask/flasktest.wsgi

httpd.confを書き書き。
基本はドキュメント( http://flask.pocoo.org/docs/deploying/mod_wsgi/ )通り。
※WSGI部分だけ書いてます

[plain title=”httpd.conf”]
LoadModule wsgi_module modules/mod_wsgi.so

WSGISocketPrefix /var/run/wsgi
<VirtualHost *:80>
ServerName example.com

DocumentRoot /var/www/html
<Directory /var/www/html>
Order allow,deny
Allow from all
</Directory>

WSGIDaemonProcess example.com user=apache group=apache threads=5
WSGIScriptAlias / /home/foo/flask/flasktest.wsgi
WSGIScriptReloading On

<Directory /home/foo/flask>
WSGIProcessGroup example.com
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
[/plain]
ここのDocumentRootは指定しなくてもいい気はするんだけど。
なんか設定しないと変な挙動になったので一応。。

で。やたらとハマるのはWSGIのDaemonモード。
EC2だと
WSGISocketPrefix /var/run/wsgi
なんだけど、
WSGISocketPrefix run/wsgi
とする環境もあるっぽい。
これをきちんと設定しないとPermission deniedほげほげ
と言われて先に進めない。

あと
WSGIDaemonProcess example.com user=apache group=apache threads=5
のuserとgroupはきちんと指定しましょう。
指定し忘れると怒られます。

WSGIDaemonProcess example.com

WSGIProcessGroup example.com
の太字部分は合わせましょう。でないと
No WSGI daemon process called ‘ほにゃらら’
と怒られます。

と、ここまで書いたら

sudo /usr/sbin/apachectl configtest

で確認。

OKであればApache(リ)スタート。

sudo service httpd restart

これでブラウザからアクセスすれば動くはず(・ω・)

ファイル更新時、コマンドラインを使わずにプロセスを再起動

そういえばPythonはPHPと違って、ファイル更新しただけだと反映されませんよね。
で、Apache再起動しなきゃーってなる。
これは非常に面倒くさい orz

ところがDaemonモードでmod_wsgiを動かしている場合、
SSHでコマンドを叩く必要はありません。
wsgiファイルの日付が更新されると自動でプロセス再起動が発生します。

pythonファイルを一通り更新し、最後に日付を更新したwsgiファイルをつっこむと、次回アクセス時にプロセスが再起動されて更新完了。
参考:modwsgi wiki

PythonでできたWebアプリケーションの運用は、これを知っておくと大分楽だと思いますヨ。
あ、mod_wsgiで動かすアプリケーションであれば、どれも同じ方法で更新できます。(Djangoとかもね)

環境ができあがってしまえばFlaskたのしーっす。
SNSのような、ログインが必要なアプリケーションであればDjango使ったほうが楽かもだけど、ちょっとしたアプリケーションならFlaskで十分。

…というわけで、そこのあなたもFlaskいかが(・∀・)?

Facebook / 広告
2011年11月04日 | Posted in ProgramNo Comments » 

関連記事

コメントを残す

メールアドレスが公開されることはありません。

スパム対策のため、コメントする際は下記の計算式を埋めてください。 計算式の有効期限が切れました。計算式の隣にある再読み込みボタンを押してください。