環境
Django4.0
ubuntu 22.04 LTS
この記事では, 以下のプロジェクト構成を前提とします.
myProject
| --manage.py
| --db.sqlite3
|
| --config
| |--init.py
| |--settings.py
| |--...
|
| --static
| |--css
| | |--...
| |--image
| | |---...
Djangoの設定ファイル
まずはDjangoの設定ファイル(settings.py)を見ていきます.
以下の3つの設定を書きます.
値は例です.
STATIC_ROOT
python manage.py collectstaticコマンドを打った時の静的ファイルの格納場所となる絶対パス
STATIC_ROOT = '/var/www/myProject/static'
STATIC_URL
STATIC_ROOTに格納されている静的ファイルを参照するための値で,静的ファイルのURLに含まれる.
例えば,STATIC_URL='/static/'で,/css/style.cssファイルを配信する時,URLは
http://example.com/static/css/style.css
となる.
STATIC_URL = '/static/'
STATICFILES_DIRS
プロジェクト内の静的ファイルのディレクトリ
STATICFILES_DIRS = [BASE_DIR / 'static']
Nginxの設定ファイル
次にNginxの設定ファイルを/etc/nginx/sites-available/に作ります.ファイル名をconfig(設定ディレクトリ名)とします.
server {
略
location /static/ {
root /var/www/myProject;
}
略
}
locationの横の/static/はSTATIC_URLと同じ値にします.
rootの右のパスはSTATIC_ROOTの/staticを抜いた値と同じにします.
locationの/static/はURLと比較される部分です.
例えば, リクエストのURLがhttp://example.com/static/image/one.pngだった場合, URLの/static/の部分がlocationの/static/と合致するのでこのブロックが実行されます. そして, rootの右のパス(/var/www/myProject)の後ろに/static/image/one.pngが追加されます.
つまり, /var/www/myProject/static/image/one.pngとなり目的の静的ファイルが配信されます.
参考資料
現場で使えるDjangoの教科書
Django 公式ドキュメント
NginxのBeginner’s Guide
How To Set Up Django with Postgres, Nginx, and Gunicorn on Ubuntu 22.04