Выбрал сервис 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 и проверяем
Спасибо за прочтение :-)
MrSmitix
Будем разбираться почему не обновляется статика после изменения через 3...2...1...
TheStupidBear Автор
не понял, что написали