nginxのインストールは省略。ubuntuならaptitudeでインストールすればいい。デフォルトはちょっと古いけど。 djangoで作ったmysiteプロジェクトを/path/to/mysiteに置いているという前提。
uwsgiをインストール
全てvirtualenv上で行うとよさげ。 uWSGI で Django を使う方法 — Django 1.4 documentationほぼそのまま
$ source path/to/virtualenv/bin/activate
$(virtualenv) pip install uwsgi
uwsgi.iniを作る
djangoのプロジェクトを/path/to/mysiteに置いた場合の設定。pidfile,daemonizeはプロジェクト毎に適当に設定。
# uwsgi.ini
[uwsgi]
chdir=/path/to/mysite
module='mysite.wsgi:application'
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/mysite.log
socket=127.0.0.1:1234 #適当なポート
env= DJANGO_SETTINGS_MODULE=mysite.settings
virtualenvで使う場合、sudoを使わないでuwsgiを起動するので、/var/log/uwsgi/yourproject.logの権限に注意する。 uwsgiの起動や終了のコマンドは以下の通り
起動
$ uwsgi --ini uwsgi.ini
再起動
$ uwsgi --reload /tmp/project-master.pid
終了
$ uwsgi --stop /tmp/project-master.pid
nginxの設定
Setting up Django and your web server with uWSGI and nginx — uWSGI 2.0 documentationを参考にした。
uwsgi_params
uwsgi_paramsは/etc/nginx/uwsgi_paramsに入ってるけど、修正する可能性もあるので、/path/to/mysite/uwsgi_paramsにコピーして、それを修正する。
nginx.conf
upstream django {
server 127.0.0.1:1234; #uwsgi.iniで設定したポート番号
}
server {
server_name hoge.example.com; # substitute your machine's IP address or FQDN
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django media
# Finally, send all non-media requests to the Django server.
location / {
uwsgi_pass django;
include /path/to/mysite/uwsgi_params; # the uwsgi_params file you installed
}
}
これを作成して、/etc/nginx/sites-enabledへシンボリックリンクを貼っておけば良い
$ service nginx restart #reloadでもいい?
でWebアクセスできるようになる。はず。
静的ファイルの設定手順
nginx+uwsgiでプロジェクトを公開した場合、manage.py runserverの場合と違い、静的ファイルの置場を設定しないといけないっぽい
location ~ ^/static/ {
root /path/to/mysite;
break;
}
settings.pyにSTATIC_URL, STATIC_ROOTを追加
# settings.py
STATIC_URL = '/static/'
STATIC_ROOT = "/path/to/mysite/static"
テンプレでは次のように静的ファイルにアクセスする
<script type="text/javascript" src="{{ STATIC_URL }}js/hoge.js"></script>
この設定だけでは静的ファイルが/path/to/mysite/staticに入ってないので、collectstaticコマンドを使ってファイルを集める
$ python manage.py collectstatic
これで各アプリに入ってる静的ファイルとadmin関連の静的ファイル全て持って来てくれる
設定反映
$ sudo service nginx reload #ubuntuの場合
deploy時に良く使うメモ
mysite/settings.pyを以外を設定ファイルとして読み込む場合はmanage.pyに以下のオプションを付ける uwsgi.iniのenvも変更しておく
--settings=mysite.settings_deploy
設定ファイルは例えばこんな感じで書いて、元のsettings.pyを上書きする
from pystock.settings import *
DATABASES = {
.......
}