Djangoサイトの静的ファイルとメディアファイルをAmazon S3に保存する方法


  1. Amazon S3バケットの作成: まず、AWS Management Consoleにアクセスし、新しいS3バケットを作成します。バケット名を選択し、適切なリージョンを選択してください。

  2. Djangoの設定: settings.pyファイルで、静的ファイルとメディアファイルのストレージバックエンドを設定します。以下のように設定します:

# settings.py
# 静的ファイルの設定
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'
AWS_S3_REGION_NAME = 'your-region-name'
AWS_ACCESS_KEY_ID = 'your-access-key-id'
AWS_SECRET_ACCESS_KEY = 'your-secret-access-key'
# メディアファイルの設定
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'

上記の設定では、your-bucket-nameyour-region-nameyour-access-key-idyour-secret-access-keyをそれぞれ自分の設定に置き換えてください。

  1. Djangoのcollectstaticコマンドの実行: Djangoのcollectstaticコマンドを実行して、静的ファイルをS3バケットにアップロードします。
python manage.py collectstatic
  1. メディアファイルの処理: メディアファイルのアップロードや表示には、DjangoのMEDIA_URLMEDIA_ROOTの設定が必要です。以下のように設定します:
# settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

また、models.pyファイルで、モデルフィールドを定義する際にupload_toパラメータを使用して、メディアファイルをアップロードするディレクトリを指定することもできます。

  1. サイトのテンプレートでの使用: 静的ファイルとメディアファイルは、テンプレート内で次のように使用できます:
<!-- 静的ファイルの使用 -->
{% load static %}
<link rel="stylesheet" href="{% static 'css/styles.css' %}">
<!-- メディアファイルの表示 -->
{% if object.image %}
    <img src="{{ object.image.url }}" alt="Image">
{% endif %}

以上で、Djangoサイトの静的ファイルとメディアファイルをAmazon S3に保存する方法が完了です。これにより、ファイルの配信や管理が簡単になり、スケーラビリティが向上します。