Выбрал сервис Yandex Object Storage (S3) для медиа (фото) и статики. Потратил пару дней, чтобы подключить. Статью от Яндекса не нашел, использовал пару сторонних сайтов и информацию с Chat GPT. И вот решил написать свою статью.
Начнем с Django. По идее в settings.py у вас так:
# медиа и статичные файлы в режиме разработки STATIC_URL = "static/" STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ] MEDIA_ROOT = f"{BASE_DIR}/media" MEDIA_URL = "/media/"
Переходим в Yandex Cloud. Вы зарегистрировались, переходим в Identity and Access Management для создания сервисного аккаунта.


Переходим в сервисный аккаунт и создаем новый ключ (запишите данные: ID и Ключ)

Переходим в Object Storage и создаем бакет. Это простой пример (доступ ограничен, объём неограничен)

Переходим в созданный бакет. Заходим в безопасность и нажимаем Назначить роли.

Назначаем созданному сервисному аккаунту роль Admin. Переходим к Django (settings.py).
Для начала установим пакеты django-storages и boto3. Добавляем приложение ‘storages’ в INSTALLED_APPS.
INSTALLED_APPS = [ ..., 'storages', ]
# медиа и статичные файлы в режиме разработки # STATIC_URL = "static/" # STATICFILES_DIRS = [ # os.path.join(BASE_DIR, "static"), # ] # MEDIA_ROOT = f"{BASE_DIR}/media" # MEDIA_URL = "/media/" # связь с Yandex S3 (статика) AWS_S3_ACCESS_KEY_ID = "ваш key_id" AWS_S3_SECRET_ACCESS_KEY = "ваш ключ" AWS_STORAGE_BUCKET_NAME = "имя бакета" AWS_S3_ENDPOINT_URL = "https://storage.yandexcloud.net" AWS_S3_CUSTOM_DOMAIN = f"storage.yandexcloud.net/{AWS_STORAGE_BUCKET_NAME}" AWS_S3_OBJECT_PARAMETERS = { "CacheControl": "max-age=86400", } STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/" MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/media/" DEFAULT_FILE_STORAGE = "online_store.s3_storage.MediaStorage" STATICFILES_STORAGE = "online_store.s3_storage.StaticStorage"
В той же папке, где settings.py создайте файл s3_storage.py. Код внутри файла:
from storages.backends.s3boto3 import S3Boto3Storage class MediaStorage(S3Boto3Storage): location = "media" #папка в бакете file_overwrite = False #запрет на перезапись файлов class StaticStorage(S3Boto3Storage): location = "static" file_overwrite = False
После запускаем команду:
python manage.py collectsatic и проверяем
Спасибо за прочтение 🙂
ссылка на оригинал статьи https://habr.com/ru/articles/938040/
Добавить комментарий