раздел 05

Объектное хранилище Selectel (S3)

Что это

У Selectel есть S3-совместимое объектное хранилище: отдельный сервис, куда вы кладёте файлы (картинки, видео, бэкапы) и получаете на них ссылки. Работает по протоколу S3, как у Amazon, поэтому подходят любые S3-клиенты и библиотеки.

Зачем

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

Как: создать бакет и получить ключи

  1. В панели Selectel откройте «Облачное хранилище» (объектное хранилище).
  2. Создайте бакет - контейнер для файлов. Задайте имя и тип доступа (приватный по умолчанию).
  3. Создайте сервисного пользователя / ключи доступа для программного доступа. Вы получите пару: access key и secret key.
  4. Запишите endpoint хранилища (адрес, по которому к нему обращаются).

Эти данные (endpoint, бакет, access key, secret key) вы передаёте своему приложению через переменные окружения - и оно может загружать и читать файлы.

Когда нужно

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

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

Пример

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

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

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

Что дальше

Проект растёт - сервер начинает упираться в ресурсы. Разберём, как это понять и как масштабироваться. Связанные темы - в курсе Хранение данных.