基本的なところは動かせるようになったので次はnginxとuWSGIのインストール、設定を行って外から見えるようにします。
このあたりは前にpythonをuWSGI経由で使えるようにしようと思った時に、本体とあまり関係ないのによくわからなくてやる気をかなり削がれたところです(笑
書いてみるとそこまでではないですね。ただし毎度のごとく正確な内容かどうかの保証はできませんが……
今回インストールしたバージョンは
nginx 1.4.1
uWSGI 1.9.12
です。
nginxのインストールと設定
portsのwww/nginxにあるので特にconfigも変更しないでここからインストールしました。
/etc/rc.confにもnginx_enable=”yes”を追加しておきます。
設定ファイルは/usr/local/etc/nginxにあるのでuWSGIと接続する設定を追加します。
nginx.confのlocation部分を変更
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
uwsgi_pass 127.0.0.1:49152;
include uwsgi_params;
}
uWSGIとは127.0.0.1:49152でデータのやりとりをすることにします。uWSGI側もあとで合わせた設定にします。
rc.confにも書いたのでnginxは最起動時に立ち上がりますが、手動で起動する場合は
uWSGIのインストールと設定
仮想環境にpipでインストール。
設定ファイルはtestenvの下にetc/wsgi.iniとして作り、以下のような内容を記述。
iniファイルはどこに置くのが良いのかはわかりませんが、仮想環境下にbinが作成されるので同じような感じでetcを作ることにしました。
socket = 127.0.0.1:49152
processes = 5
master = true
chdir = /home/ichinomoto/testenv/testproject
module = testproject.wsgi:application
harakiri = 20
max-requests = 5000
vacuum = true
pidfile=var/testproject.pid
daemonize=var/testproject.log
socketはnginx.confのuwsgi_passに書いた物と同じにします。サイトによっては/tmp/testproject.sockのようにファイルにしてあるところもありますが、その場合nginx.confにあるuwsgi_passの書き方が”wsgi_pass unix:///tmp/testproject.sock”のようになります。詳細は他のサイトを参照のこと。
設定が固まるまではフォアグラウンドで動かしておくために最後のdaemonizeは外した方が良いかもしれません。
なお、この設定にするのであればpidファイルとdaemonizeに書いたログファイルのためにvirtualenvの下にvarディレクトリを作っておきます。
起動時には設定ファイルを指定します。
なお、pidとログファイルの位置は相対パスになるのでvirtualenvの直下から起動する前提で書いてあります。起動スクリプトを書いてbinの下に置いておくなどした方が良いかもしれません。
停止は、フォアグラウンドならCtrl-Cで。
daemonize=var/testproject.logを設定している場合にはQUITシグナルを送ります。
ここまでできたらあとは中身を作ることに専念できます。
[追記]
面倒なので結局起動スクリプトを作りました。
これを使う場合はwsgi.iniにあるpidfile行とdaemonize行がかぶるのでコメントアウトしてください。
vitualenvのbinの下にtestenv_ctrl.shとして作成しました。
virtualenv_dir="/home/ichinomoto/testenv/"
wsgi_ini="${virtualenv_dir}etc/wsgi.ini"
wsgi_pid="${virtualenv_dir}var/testproject.pid"
wsgi_log="${virtualenv_dir}var/testproject.log"
start(){
echo "uWSGI testproject start"
uwsgi --ini $wsgi_ini --daemonize $wsgi_log --pidfile $wsgi_pid
}
stop(){
echo "uWSGI testproject stop"
kill -QUIT `cat $wsgi_pid`
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
esac
virtualenv環境に入ればパスが通った状態になるので
で起動できます。あとstopとrestartも。
[参考]
仮想環境ではなくFreeBSD本体側にuwsgiを入れる場合の参考に。
FreeBSD + Django + nginx + uWSGI
こちらのサイトではrc.confに起動オプションを書いてuwsgiを起動しています。
上の説明ではiniファイルを作りましたがすべて引数で渡すことも可能です。
log ファイルを cat しても pid はわからないです。
あと、普通 止めてから起動しますが、 uWSGI には reload に設定したファイルに touch コマンドなどでファイルの日時を更新すると reload してくれます。
参考になりました。ありがとうございました。
ミスの指摘ありがとうございます。確かにlogファイル見てもしょうがないですね。
reloadもファイルにtouchするだけでできるのは知りませんでした。
情報ありがとうございます。