Program, WordPress

Python Flaskアプリを nginx + uWSGI 環境下へデプロイしたのでメモ

こんばんは、ころすけ(@wg_koro)です。

さよならGoogle Reader

先日、Google Reader終了カウントダウンページを作りました。この時に使ったのがPython+Flask。

ローカルで作って、さあサーバーへデプロイしよう・・・という時にふと気づいた。

「今更mod_pythonはないなぁ。せっかくだからuWSGIにしよう!」

というわけで、今回、カウントダウンページはFlask + nginx + uWSGIで構築しました。この構築時のメモをつらっと書き記します。

uWSGI

超簡単。

$ pip install uwsgi

以上w!

インストールはさくっとできたので、動かしてみる。ドキュメントを参考に、簡単なFlaskアプリを書いて試す。

Flaskは起動ファイルがそのままWSGIファイルとして使えるので、ダイレクトに指定する。

$ uwsgi --http :9090 --wsgi-file /var/www/example.py

これで動く。確認するにはブラウザで9090ポートへアクセスするか、サーバー内から http://localhost:9090/ へwgetする。正常に動作していれば、HTMlが返ってくる。

次に、作ったFlaskアプリケーションを動かしてみる。Flaskはvirtualenv環境下で作ったので、uwsgi起動時にvirtualenv下のディレクトリパスを指定しないとダメ。
参考:uWSGI+virtualenv+Flask | おいぬま日報

$ uwsgi -s /tmp/mysock.sock --http :9090 -H /home/myaccount/.virtualenvs/bye  --python-path /var/www/myapp -w app:app --processes 3 --threads 2

これでOK。

ミソは下記の通り。

  • -H: virtualenv下のディレクトリパスを指定
  • –python-path: Flaskアプリを設置しているディレクトリ
  • -w: Flaskオブジェクトを代入した変数名・・・であってるのかな? app = Flask(__name__) ←コレ

毎回、このオプションを指定するのはしんどいので、設定ファイル(uwsgi.ini)にしてしまう。

[uwsgi]
socket = /tmp/mysock.sock
http = :9090
venv = /home/smaster/.virtualenvs/bye
python-path = /var/www/deploy/current/source
wsgi = app:app
processes = 3
threads = 2

起動時はこの設定ファイルを呼び出すだけでOK!

$ uwsgi uwsgi.ini

次に、uwsgiがサーバー再起動時に自動で走るように、サービス起動スクリプトを作る。

/etc/init.d/uwsgi として設置し、パーミッションを変更。
こうすると service uwsgi start/stop/restart で動かすことが可能。

ついでに
sudo chkconfig –add uwsgi
sudo chkconfig uwsgi on
として、自動起動するようにする。

nginx

nginxの設定ファイルは結構シンプル。

静的ファイルだけnginxで受けて、残りはuwsgiへ流す。これでできあがり!

意外と楽に組み込むことができました。迷った箇所はあまり無い感じ。uwsgiは結構シンプルなので、PythonでWebアプリ書く時はこれで決まりかな〜。

Facebook / 広告
2013年05月29日 | Posted in Program, WordPressNo Comments » 

関連記事

コメントを残す

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

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