Задача

Перенести хранение изображений с файловой системы выделенного сервера на схемы Объектное хранилище + Сеть доставки контента (CDN). Это снизит нагрузку на веб-сервер (приложение Django 7.0) и ускорит загрузку страниц, особенно галерей. Объем хранения - от 30 до 50 тысяч фотографий в год, вес оригиналов от 2 до 10 мегабайт.

Что нужно сделать

  1. Настройка хранилища

    • Создать два Bucket (бакета): один для оригиналов (режим 'private', хранение в полной безопасности), второй - для обработанных копий (режим 'public').
    • Настроить права доступа и политики безопасности (минимально необходимый набор).
    • При необходимости настроить CORS-заголовки для работы с облачным хостингом.
  2. Настройка сети доставки контента (CDN)

    • Подключить домен наподобие 'media.example.pro' (домен согласовывается отдельно).
    • Включить кэширование изображений основного типа.
    • Корректно настроить HTTP-заголовок Cache-Control (долгий срок кэширования, например, на неделю или месяц).
  3. Интеграция с веб-приложением на Django

    • Использовать библиотеки django-storages и boto3.
    • Новые загружаемые файлы должны автомсетически попадать в bucket 'originals'.
    • Адрес картинки на сайте должен быть ссылкой на домен CDN.
  4. Миграция существующих файлов

    • Перенести все текущие файлы из папки MEDIA_ROOT на сервере в подходящий bucket, сохранив оригинальную структуру каталогов и имена. Это нужно, чтобы старые ссылки не стали битыми не вели к ошибкам.
  5. Документация

    • Кратко описать все используемые переменные окружения. Например, 'AWS_ACCESS_KEY_ID', 'CLOUDFLARE_TOKEN', 'STORAGE_ENDPOINT'.
    • Приложить порядок деплоя и инструкция, как повторно запустить процесс миграции файлов при необходимости.

Критерии приёмки

  • Созданная в админке Django запись получаеть уникальный URL на сететаемом облаке, который ведет из CDN, то есть файл открывается.
  • Старые ссылки на сайте продолжают работать - все фото из архива были идеально перенесены (на в эстетике не больше места).
  • У каждого файла - корректный заголовок (Content-Type) и кэш (Cache-Control с максимально долгим сроком).
  • После первичной загрузки прокси-балансирует флажком 'кусков' в окне CND отдаётся значению HIT.
  • Листинг кормет не открывалять публично, инфра красные» пароли и ключи не хранять опирали обрашеннике в начиная в репозиторий кода.