Django Girls Tutorialをやってから、時間を空けて改めてデプロイしたら少しハマったのでお作法をメモしておく事にする
環境
- Nginx+Uwsgi
- Django1.10.5
- Python 3.5.2
まずはmigrate
$ python manage.py migrate
管理ユーザを作る
/admin/
にアクセスした時のスーパユーザ
$ python manage.py createsuperuser
staticファイルの取扱い
ここがDjangoバージョンによって情報がたくさんあって、ちょっと迷った。
まずは、settings.py
を見る
$ tail settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'blog/static/'),
)
STATIC_ROOT
には、このあと実行する「manage.py collectstatic
を実行した時に、staticファイルが出力されるパス」を記述。これが無い場合、You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path
というエラーが出る。
STATICFILES_DIRS
には、同じく「manage.py collectstatic
を実行した時に、STATIC_ROOT
に追加で出力するファイルがあるパス」を記述。ここに指定したパスが、STATIC_ROOT
と重複している場合、The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
というエラーが出る。
次に、.gitignore
に、STATIC_ROOT
にあるファイルを除外するように指定。
$ cat .gitignore
mysite/static/ # mysiteプロジェクトの場合
最後に、collectstatic
を実行
$ python manage.py collectstatic
これを実行すると、STATIC_ROOT
の中に、STATICFILES_DIRS
に指定したパスの配下にあるファイルと、site-package(adminとか)のstaticファイルがどんどこコピーされていく
Nginxの設定
staticファイルはnginxだけで処理させるように、uwsgiの記述より上に、/static
のaliasを書いておく
# staticfiles
location /static {
alias /path/to/mysite/static; # STATIC_ROOTへのパスをここに書く
}
location / { try_files $uri @uwsgi; }
location @uwsgi {
include uwsgi_params;
uwsgi_pass unix:/path/to/mysite.sock;
}
ドキュメント:Managing static files (e.g. images, JavaScript, CSS)
uWSGI実行時にPATHを解決する場合(2019-10-28追記)
uwsgi
コマンド実行時に、--static-map
オプションに実体のPATHを渡してあげる事でも解決出来ました
1 | // --static-map=[URL]=[実体のPATH]という形式で記述 |