はじめに
Djangoプロジェクトのstaticファイル(cssや画像)をEC2(Amazon Linux2)+Apache環境で正しく表示させる設定方法を備忘も兼ねて書き残しておきます。
環境
- Amazon Linux 2(64bit)
- Apache2.4.43
- MySQL8.0.21
- Python3.7.8
- Django3.1
設定内容
Django開発用サーバとApache等のWebサーバではstaticファイルを表示させる方法が異なります。まずはsettings.pyの中身を以下のように書き換えます。
settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static') # 本番用
# STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")] # 開発用
その後以下のコマンドを実行して、各アプリケーション下にあるstaticファイルをプロジェクト直下のstaticフォルダに集約します。
$ python3 manage.py collectstatic
次にApacheの設定ファイルを/etc/httpd/conf.d/配下に作成します。
ここでは"myproject.conf"という名前で作成しています。
以下のコマンドを実行して設定ファイルを編集しましょう。
sudo vi /etc/httpd/conf.d/myproject.conf
myproject.conf
LoadModule wsgi_module /usr/local/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so
ServerName <EC2のパブリックIPアドレスを記載>
WSGIScriptAlias / /home/ec2-user/myproject/myproject/wsgi.py
WSGIPythonPath /home/ec2-user/myproject:/usr/bin/python3
<Directory /home/ec2-user/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static/ /home/ec2-user/myproject/static/
<Directory /home/ec2-user/myproject/static>
Require all granted
</Directory>
1〜12行目まではApacheとmod_wsgiを関連付けるための記述です。
14行目以降がstaticフォルダを許可するための記述です。
※パスやファイル名は適宜環境に合わせて書き換えてください。
最後にApacheのリスタートします。
sudo service httpd restart
これで正しくstaticファイルが表示されるようになるはずです。