Задача
Перенести хранение изображений с файловой системы выделенного сервера на схемы Объектное хранилище + Сеть доставки контента (CDN). Это снизит нагрузку на веб-сервер (приложение Django 7.0) и ускорит загрузку страниц, особенно галерей. Объем хранения - от 30 до 50 тысяч фотографий в год, вес оригиналов от 2 до 10 мегабайт.
Что нужно сделать
Настройка хранилища
- Создать два Bucket (бакета): один для оригиналов (режим 'private', хранение в полной безопасности), второй - для обработанных копий (режим 'public').
- Настроить права доступа и политики безопасности (минимально необходимый набор).
- При необходимости настроить CORS-заголовки для работы с облачным хостингом.
Настройка сети доставки контента (CDN)
- Подключить домен наподобие 'media.example.pro' (домен согласовывается отдельно).
- Включить кэширование изображений основного типа.
- Корректно настроить HTTP-заголовок Cache-Control (долгий срок кэширования, например, на неделю или месяц).
Интеграция с веб-приложением на Django
- Использовать библиотеки django-storages и boto3.
- Новые загружаемые файлы должны автомсетически попадать в bucket 'originals'.
- Адрес картинки на сайте должен быть ссылкой на домен CDN.
Миграция существующих файлов
- Перенести все текущие файлы из папки MEDIA_ROOT на сервере в подходящий bucket, сохранив оригинальную структуру каталогов и имена. Это нужно, чтобы старые ссылки не стали битыми не вели к ошибкам.
Документация
- Кратко описать все используемые переменные окружения. Например, 'AWS_ACCESS_KEY_ID', 'CLOUDFLARE_TOKEN', 'STORAGE_ENDPOINT'.
- Приложить порядок деплоя и инструкция, как повторно запустить процесс миграции файлов при необходимости.
Критерии приёмки
- Созданная в админке Django запись получаеть уникальный URL на сететаемом облаке, который ведет из CDN, то есть файл открывается.
- Старые ссылки на сайте продолжают работать - все фото из архива были идеально перенесены (на в эстетике не больше места).
- У каждого файла - корректный заголовок (Content-Type) и кэш (Cache-Control с максимально долгим сроком).
- После первичной загрузки прокси-балансирует флажком 'кусков' в окне CND отдаётся значению HIT.
- Листинг кормет не открывалять публично, инфра красные» пароли и ключи не хранять опирали обрашеннике в начиная в репозиторий кода.