Обновление, бэкап и восстановление

Команды rivo update, rivo rollback, rivo backup и rivo restore, ключ бэкапов, ротация, выгрузка в S3 и переезд на новый сервер.

Статья для своей установки (Self-host и Свой VPS). Облако обновляется и бэкапится само.

CLI rivo

rivo status              # контейнеры, домен, здоровье API, последний бэкап, размер данных
rivo logs api -f         # логи сервиса (api, web, db, caddy)
rivo update              # обновление (перед ним автоматически снимается бэкап)
rivo rollback            # откат обновления: прежняя версия и данные на момент обновления
rivo backup              # резервная копия прямо сейчас
rivo restore --latest    # восстановление из последнего архива
rivo start | stop | restart

Если команды rivo нет в системе — то же самое через /opt/rivo/infra/rivo.

Обновление

sudo rivo update                  # последняя версия
sudo rivo update --version 1.4.2  # конкретная версия

Перед обновлением снимается бэкап. Затем скачиваются образы новой версии и стек перезапускается; миграции базы API накатывает сам при старте. Данные, сертификаты и секреты обновление не трогает.

Перед обновлением унесите BACKUP_PASSPHRASE с сервера (см. ниже) и проверьте, что на диске есть место ещё на одну копию: без копии обновление не начнётся.

Откат обновления

sudo rivo rollback                                    # последняя копия перед обновлением
sudo rivo rollback backups/rivo-20261007-031500.tar.gz.enc   # конкретный архив

Новая версия могла обновить схему базы, а прежняя такой схемы не знает. Поэтому откат возвращает и версию, и данные — к копии, снятой перед обновлением. Всё, что внесено после неё, пропадёт. Команда попросит напечатать ОТКАТИТЬ (для скриптов — --yes) и до заливки снимет страховочный дамп текущей базы.

Порядок такой: закрепляются образы прежней версии, API останавливается, затем копия восстанавливается и стек поднимается уже на прежней версии. Прежняя версия берётся из самого архива.

rivo update --version <прежняя> поверх обновлённой базы не сработает: команда откажет, не меняя версию, и предложит rivo rollback. Исключение — версия с той же схемой базы.

Если инстанс обновлялся версией до октября 2026, копия перед обновлением называется как обычная (rivo-<дата>-<время>). Укажите её явно: это последний архив до времени обновления.

Если обновления закончились

Лицензия Self-host бессрочная, а обновления оплачены на срок: 12 месяцев с покупки, дальше — продление на год. Версия, собранная после конца обновлений, не ставится:

Ошибка: обновления закончились 2026-11-01, продлить — https://me.rivo.day

Ничего не ломается: установленная версия продолжает работать без ограничений, версии, собранные до конца срока, ставятся через --version. Чтобы получить новые, продлите обновления в кабинете, затем Настройки → Лицензия → «Проверить» (иначе инстанс сверит лицензию сам в течение суток) и повторите rivo update. У подписок (Облако, Свой VPS) такого ограничения нет.

Резервные копии

rivo backup                  # копия сейчас → backups/rivo-<дата>-<время>.tar.gz.enc
rivo backup --to /mnt/usb    # разовая копия в другой каталог
sudo rivo backup --schedule  # ежедневно в 03:30 (включает и установщик)

В архиве — дамп базы, загруженные файлы (они и так зашифрованы), deploy/.env с ключами инстанса и служебные отметки. Архив зашифрован ключом BACKUP_PASSPHRASE.

Унесите BACKUP_PASSPHRASE с сервера — например, в менеджер паролей. Установщик печатает его в конце установки, он же лежит в /opt/rivo/deploy/.env. С ним архив восстанавливается на любом новом сервере вместе с ключами шифрования. Без него архив не открыть ничем.

Настройки — в deploy/.env:

  • BACKUP_DIR — куда класть архивы;
  • BACKUP_KEEP_DAILY=7, BACKUP_KEEP_WEEKLY=4 — ротация «по копии за последние 7 дней и за 4 недели до них»;
  • S3_BUCKET, S3_ENDPOINT, S3_REGION, S3_PREFIX, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY — если заполнены, архив уезжает ещё и в S3-совместимое хранилище (нужен awscli или mc). Срок хранения там задаётся политикой бакета.

Проверить расписание: systemctl list-timers rivo-backup.timer, ошибки — journalctl -u rivo-backup.service -n 50. Таймера нет — sudo rivo backup --schedule.

Восстановление

sudo rivo restore --latest
sudo rivo restore backups/rivo-20261006-033000.tar.gz.enc

Пока не пройдены все проверки, база не тронута:

  1. Архив расшифровывается и проверяется на целостность.
  2. Ключи шифрования архива сверяются с инстансом: под чужими ключами пароли и файлы не расшифровались бы, поэтому — отказ.
  3. Сверяется версия схемы: архив старше программы восстанавливается (недостающие миграции API накатит сам), архив новее — отказ, сначала rivo update.
  4. Нужно напечатать ВОССТАНОВИТЬ (для скриптов — --yes).
  5. Снимается страховочный дамп текущей базы, база заливается одной транзакцией, прежние файлы откладываются рядом, стек поднимается.

Переезд на новый сервер

  1. Поставьте Rivo на новый сервер — Установка на свой сервер.
  2. Положите архив в /opt/rivo/backups/ (с флешки или из S3).
  3. Выполните с явным путём к архиву:
sudo rivo restore backups/<архив старого сервера> --with-keys

--with-keys берёт из архива ключи старого инстанса (APP_SECRET, VAULT_KEY, BACKUP_PASSPHRASE). Команда спросит старый BACKUP_PASSPHRASE — у новой установки свой, к старому архиву он не подходит.