ДокументацияХранение данныхПостоянные диски

Постоянные диски

Подключите зашифрованный SSD-диск к web-сервису, приватному сервису или фоновому воркеру, чтобы изменения в локальной файловой системе сохранялись между деплоями и перезапусками.

По умолчанию любой сервис на Muerte Cloud работает на эфемерной файловой системе: всё, что записано на диск во время работы, исчезает при следующем деплое или перезапуске. Постоянный диск даёт одному конкретному пути монтирования надёжное хранилище, которое переживает жизненный цикл контейнера.

Постоянные диски хорошо подходят для:

  • Самостоятельно размещённой инфраструктуры (поисковые индексы, брокеры сообщений, очереди)
  • Блогов, CMS и вики
  • Совместных приложений с локальными загрузками и вложениями
  • Своих хранилищ данных, когда управляемые базы не подходят
Если можно — берите управляемую базу
Для реляционных и key-value нагрузок используйте управляемую базу данных Muerte Cloud вместо собственной СУБД на диске. Вы сразу получаете автоматические бэкапы, восстановление на точку во времени и высокую доступность.

Диски используют NVMe SSD из того же пула оборудования, что и наши управляемые базы. Все тома шифруются на диске — как и их ежедневные автоматические снапшоты.

Настройка#

Перед подключением диска изучите ограничения и нюансы ниже — в первую очередь то, что диск закрепляет сервис за одним инстансом.

Диск можно добавить при создании сервиса (раскройте Advanced внизу формы) или в любой момент позже — на вкладке Disks сервиса в панели управления.

  1. 1
    Задайте путь монтирования
    Абсолютный путь внутри контейнера, куда монтируется диск. Сохраняются только записи внутри этого пути — остальная файловая система остаётся эфемерной. См. Путь монтирования.
  2. 2
    Выберите размер
    Начните с минимального размера, в который помещается рабочий объём данных. Диск можно увеличить в любой момент, но уменьшить — нельзя.
  3. 3
    Сохраните
    Muerte Cloud запустит новый деплой. Диск станет доступен сервису, как только деплой выйдет в прод.

Путь монтирования#

Путь монтирования — это абсолютная директория внутри контейнера. Данные внутри неё сохраняются; данные, записанные в любое другое место, теряются при следующем деплое или перезапуске.

Выбирайте путь исходя из того, как приложение пишет данные:

  • Если фреймворк пишет по относительному пути (например, Rails ./storage для загрузок), смонтируйте диск по абсолютной форме этого пути — или его родительской директории.
  • Иначе смонтируйте отдельную директорию, например /var/data, и укажите её приложению через переменную окружения.

Типичные пути монтирования по рантаймам:

FieldDescription
Node.js / Python / Ruby / Elixir / RustИсходники лежат в /opt/muerte/project/src. Пример пути диска: /opt/muerte/project/src/storage.
GoИсходники лежат в /opt/muerte/project/go/src/<owner>/<repo>. К пути диска добавляется /data.
DockerИсходники лежат в WORKDIR вашего Dockerfile (обычно /app). Пример пути диска: /app/storage.
Отдельная директорияЛюбая абсолютная директория на ваш выбор, например /var/data или /mnt/uploads.

Запрещённые пути монтирования

Эти пути нельзя использовать как корень монтирования:

  • / (корень файловой системы)
  • /opt, /opt/muerte, /opt/muerte/project, /opt/muerte/project/src
  • /home, /home/muerte
  • /etc, /etc/secrets

Вложенные директории разрешены — например, монтирование в /opt/muerte/project/src/uploads работает нормально.

Мониторинг использования#

На вкладке Disks каждого сервиса видно занятое и свободное место, а также график использования во времени. Алерты приходят автоматически при заполнении диска на 80% и 95% — чтобы вы успели расширить его.

Снапшоты#

Muerte Cloud раз в 24 часа снимает зашифрованный снапшот каждого постоянного диска. Снапшоты хранятся минимум семь дней и позволяют вернуть диск к этому моменту времени.

Восстановление заменяет весь диск
Восстановление из снапшота заменяет всё содержимое диска. Изменения, сделанные после снятия снапшота, теряются; частичное восстановление отдельных файлов не поддерживается.

Запустить восстановление можно на вкладке Disks сервиса. Сервис автоматически передеплоится, как только том будет восстановлен из снапшота.

Восстановление собственной СУБД

Если на диске лежит своя база данных (MySQL, MongoDB, Postgres в вашем контейнере), не полагайтесь на снапшоты диска как на резервную копию. Блочный снапшот каталога активной базы может восстановиться в несогласованном состоянии.

Вместо этого делайте бэкапы на уровне приложения по расписанию — например mysqldump, mongodump или pg_dump — и складывайте архивы в объектное хранилище или на отдельный диск.

Передача файлов на диск и обратно#

Muerte Cloud не предоставляет SSH или веб-консоль внутрь контейнеров, поэтому интерактивно скопировать файлы на работающий инстанс нельзя. Передачу файлов стоит закладывать через само приложение:

  • Реализуйте в приложении собственный маршрут для загрузки и скачивания файлов по пути монтирования диска.
  • Начальные данные кладите в образ на этапе сборки — диск подключается только во время выполнения, а не во время сборки.
  • Для регулярных бэкапов, восстановлений или разовых копий используйте снапшоты диска вместо ручного копирования файлов.

Ограничения и нюансы#

Только один инстанс
Диск подключается к одному инстансу. Сервис с диском нельзя горизонтально масштабировать на несколько реплик.
Только во время работы
Команды сборки и pre-deploy выполняются на отдельных мощностях и не видят диск. Всё нужное на этапе сборки копируйте в образ.
Короткий простой при деплое
Диск отключает zero-downtime деплой: старый инстанс останавливается до старта нового, чтобы исключить параллельную запись.
Увеличить можно, уменьшить — нет
Диск можно расширить в любой момент без простоя. Уменьшение не поддерживается — выбирайте стартовый размер с запасом.
Не для cron-задач
Cron-задачи выполняются на эфемерных мощностях. Если нужно постоянное состояние, используйте фоновый воркер с диском.
Шифрование на всех уровнях
Тома и снапшоты шифруются при хранении ключами проекта, которыми управляет платформа.