раздел 05
Объектное хранилище Selectel (S3)
Что это
У Selectel есть S3-совместимое объектное хранилище: отдельный сервис, куда вы кладёте файлы (картинки, видео, бэкапы) и получаете на них ссылки. Работает по протоколу S3, как у Amazon, поэтому подходят любые S3-клиенты и библиотеки.
Зачем
Диск сервера ограничен и пропадёт вместе с сервером. Растущие пользовательские файлы, медиа и бэкапы логично держать в хранилище: оно практически безлимитное, надёжное и отдаёт файлы напрямую, не нагружая ваш сервер. Подробно про идею S3 - в курсе Серверы, раздел про S3.
Как: создать бакет и получить ключи
- В панели Selectel откройте «Облачное хранилище» (объектное хранилище).
- Создайте бакет - контейнер для файлов. Задайте имя и тип доступа (приватный по умолчанию).
- Создайте сервисного пользователя / ключи доступа для программного доступа. Вы получите пару:
access keyиsecret key. - Запишите endpoint хранилища (адрес, по которому к нему обращаются).
Эти данные (endpoint, бакет, access key, secret key) вы передаёте своему приложению через переменные окружения - и оно может загружать и читать файлы.
Когда нужно
- Пользователи грузят фото, документы, вложения.
- Раздаёте видео или много картинок.
- Делаете регулярные бэкапы базы и складываете их отдельно от сервера.
Когда не нужно: маленький проект без пользовательских загрузок и без медиа - хватит диска сервера.
Пример
Веб-приложение на сервере Selectel, пользователи грузят аватары. Создаёте бакет app-uploads, получаете ключи, передаёте их приложению через .env. Аватары летят в бакет, в базе - только ссылки. Бэкап Postgres по расписанию кладётся в отдельный бакет app-backups.
Антипаттерны
- Хранить пользовательские файлы на диске сервера. Диск заполнится, пересоздадите сервер - потеряете файлы.
- Светить ключи доступа. Утечка
secret key= чужой доступ ко всему хранилищу. - Делать бакет публичным целиком. Публичным делайте только то, что и должно быть публичным.
Что дальше
Проект растёт - сервер начинает упираться в ресурсы. Разберём, как это понять и как масштабироваться. Связанные темы - в курсе Хранение данных.