DjangoのstaticをS3へ
2022/03 の作業
前回、S3のバケットを設定したので、static をそっちにする。
1.boto3 インストール
S3 と連携する為に、boto3 をインストール。
(work_venv) $ pip install boto3
2.Django の S3 の設定
base.py のアプリケーションに storages を追加。
prod.py に S3 へアクセスする情報や、Django が出す画面の URL 等の設定。
(work_venv) $ vi worksite/worksite/settings/base.py
・・・・
INSTALLED_APPS = [ ・・・・ # boto3
'storages',
] ・・・・
(work_venv) $ vi worksite/worksite/settings/prod.py
・・・・ # バケット名 AWS_STORAGE_BUCKET_NAME = 'work-bucket' AWS_ACCESS_KEY_ID = 'アクセスキーID' AWS_SECRET_ACCESS_KEY = 'シークレットアクセスキー' # パブリックアクセス時のバケットのドメイン AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME AWS_S3_OBJECT_PARAMETERS = { 'CacheControl': 'max-age=86400', } # static # バケット直下のディレクトリ AWS_LOCATION = 'static' # パブリックアクセス時のURL STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION) STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' ・・・・
3.static ファイルの S3 への配置
collectstatic すると、S3 のバケットの下に static ファイルがコピーされる。
prod.py の AWS_LOCATION の下にコピーされる。
(work_venv) $ python manage.py collectstatic --settings worksite.settings.prod
4.NGINX の設定
NGINX の static を無効化して、EC2 側の static へのアクセスは不要なので、アクセスできない様にしておく。
それと、CSP の設定にバケットの URL を追加する。
$ sudo vi /etc/nginx/sites-available/worksite_nginx.conf
・・・・ add_header Content-Security-Policy "・・・・ script-src ・・・・ https://work-bucket.s3.amazonaws.com; img-src ・・・・ https://work-bucket.s3.amazonaws.com; style-src ・・・・ https://work-bucket.s3.amazonaws.com; font-src https://work-bucket.s3.amazonaws.com; ・・・・"; ・・・・ location /static {
#
alias /home/wagtail_user/worksite/static;
return 444;
} ・・・・
スタイルシートの編集等するんで、static は S3 にしておかなくて良かった様な気がする。