раздел 05

DigitalOcean Spaces

Что это

Spaces - объектное хранилище DigitalOcean, S3-совместимое. По сути это аналог бакетов: вы кладёте файлы и получаете на них ссылки, работаете по протоколу S3. Опционально к Spaces подключается CDN для быстрой раздачи файлов по миру.

Зачем

Диск Droplet ограничен и исчезнет вместе с сервером. Растущие медиа, пользовательские загрузки и бэкапы держат в Spaces: практически безлимитно, надёжно, файлы отдаются напрямую, не нагружая Droplet. Идея S3 в целом разобрана в курсе Серверы, раздел про S3.

Как: создать Space и ключи

  1. В панели: Create - Spaces Object Storage.
  2. Выберите регион, задайте уникальное имя Space (это и есть «бакет»).
  3. Создайте ключи доступа: API - Spaces Keys - Generate New Key. Получите пару access key и secret key.
  4. Запишите endpoint вашего Space (адрес для обращения).

Endpoint, имя Space и ключи передаёте приложению через переменные окружения - и оно загружает/читает файлы по протоколу S3.

Когда нужно

  • Пользователи грузят фото, документы, вложения.
  • Раздаёте видео или много картинок (тут особенно полезен встроенный CDN).
  • Регулярные бэкапы базы, которые надо хранить отдельно от сервера.

Когда не нужно: маленький проект без медиа и загрузок - хватит диска Droplet.

Пример

Веб-приложение на Droplet, пользователи грузят аватары. Создаёте Space app-uploads, генерируете ключи, передаёте их приложению через .env. Файлы летят в Space, в базе - ссылки. Бэкапы Postgres кладёте в отдельный Space.

Антипаттерны

  • Хранить пользовательские файлы на диске Droplet. Заполнится, пересоздадите сервер - потеряете файлы.
  • Светить ключи доступа. Утечка secret key = чужой доступ ко всему хранилищу.
  • Делать Space полностью публичным. Публичным делайте только то, что и должно быть публичным.

Что дальше

Проект растёт - разберём масштабирование Droplet и когда переходить на managed-БД и несколько серверов. Про данные в целом - в курсе Хранение данных.