К содержимому

Резервное копирование ​

Проверьте серверный комплект

Команды backup-config, backup-run и backup-status относятся к локальному кандидату нового установщика. Они не заменяют автоматически команду backup прежнего комплекта. Выполняйте этот сценарий только после получения и проверки подходящего комплекта; иначе остановитесь и обратитесь к сопровождающему. Применимость инструкции.

Копия включает database.dump, attachments.tar, config.env, runtime-secrets.tar и контрольные суммы SHA256SUMS. Для S3 в архив попадают сами файлы, выгруженные из хранилища. Одна база без вложений и прежнего ключа шифрования не составляет полного комплекта восстановления.

Что именно вы сохраняете ​

Часть копииЗачем нужна
База PostgreSQLЗаписи системы и её настройки
ВложенияФайлы, которые пользователи добавили в карточки
Конфигурация и секретыПараметры запуска и ключи, необходимые для чтения защищённых данных
Контрольные суммыПроверка, что файлы копии не испортились при хранении или передаче

Представьте, что сервер перестал существовать. Копия на его же диске не поможет. До первого запуска проверьте, что место хранения действительно находится вне этого сервера, а доступ к нему и ключи можно получить без работающей NGENSIA.

Если вам нужна таблица заявок для Excel, используйте экспорт. Выгрузка таблицы — не резервная копия системы.

Для текущего комплекта с rootful Docker выполняйте операторские команды из root-shell (sudo -i), как при установке. Это сохраняет доступ к закрытому runtime и единое владение состоянием operations для systemd-службы. Не ослабляйте права этих каталогов. Согласуйте перерыв: приложение останавливается на время создания согласованной копии. Остановите также внешние процессы, записывающие данные. PostgreSQL должен оставаться запущенным; команда stop останавливает и его, поэтому перед копированием её не применяют.

Настройка места хранения ​

Если выбрали облако и ещё не настраивали rclone, сначала пройдите подключение S3 для резервных копий: там отдельно показаны подключение к провайдеру и шифрование архива.

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

Для дополнительной отправки в S3 заранее настройте rclone: сначала доступ к закрытому S3-хранилищу, затем crypt-обёртку над выбранным remote. В примере backup-crypt — уже существующее имя этой обёртки, а не встроенное хранилище NGENSIA. Сохраните конфигурацию и ключ шифрования отдельно от сервера: без них после аварии не получится прочитать удалённые копии. Если remote ещё не настроен, используйте только внешнее смонтированное хранилище, без полей remote и rcloneConfig.

Подготовьте отдельное хранилище вне сервера и смонтируйте его, например в /mnt/ngensia-backup. Заранее создайте там каталог copies. Приватный JSON-файл с правами 600 содержит:

json
{
  "directory": "/mnt/ngensia-backup/copies",
  "mount": "/mnt/ngensia-backup",
  "minimumFreeBytes": 1073741824,
  "remote": "backup-crypt:ngensia",
  "rcloneConfig": "/etc/ngensia/rclone.conf"
}

Укажите mount, чтобы отсутствие подключённого хранилища останавливало операцию. Поле remote необязательно; вместе с ним требуется приватная конфигурация rclone с правами 400 или 600. Выбранный remote обязан иметь тип crypt, включённое шифрование данных и отдельный ключ. Для S3 используется HTTPS. При копировании только на внешнее смонтированное хранилище уберите оба поля remote и rcloneConfig.

sh
cd /opt/ngensia/deploy
sh ngensia.sh backup-config /etc/ngensia/backup.json
sh ngensia.sh backup-run
sh ngensia.sh backup-status

Скрипт проверяет метку назначения и свободное место. Резерв 1 ГиБ — минимальная проверка, а не расчёт объёма будущей копии. Объём базы и файлов оцените отдельно.

Дополнительное место для S3 ​

S3-копия сначала выгружает все вложения в локальный Docker volume transfers под /data/transfers/export-ДАТА. Затем создаётся attachments.tar во внешнем назначении. На файловой системе Docker нужен запас под полный экспорт вложений, отдельно от места для архива. Проверка minimumFreeBytes контролирует только внешний каталог, не этот локальный том.

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

sh
docker compose --env-file .env -f compose.yml -f compose.s3.yml run --rm --no-deps --entrypoint node app -e 'console.log(require("node:fs").readdirSync("/data/transfers").join("\n"))'

Когда подтверждено, что операция завершилась, экспорт больше не нужен для диагностики и новые операции не выполняются, удалите только его через штатный обработчик. Замените EXPORT_ID точным именем формата export-YYYYMMDDTHHMMSSZ:

sh
docker compose --env-file .env -f compose.yml -f compose.s3.yml run --rm --no-deps --entrypoint node app deploy/storage.mjs discard-export EXPORT_ID

Не удаляйте весь volume, рабочие вложения или bucket. Проверьте освободившееся место и причину ошибки перед повтором копирования.

Проверка результата ​

Успешный результат — verified. При remote выполняются загрузка и сравнение скачанных данных. Предыдущая успешная запись не отменяет ошибку последнего запуска: смотрите обе записи в backup-status.

При ошибке создания архива приложение остаётся остановленным. При ошибке последующей удалённой передачи оно уже может работать: проверьте status. Архив содержит секреты; ограничьте доступ к носителю и храните ключ rclone отдельно. Автоматического удаления старых копий и восстановления на произвольную точку времени нет. Приёмка конкретного облачного провайдера требует отдельной проверки восстановления.

Расписание копий · Аварийное восстановление

Сверено с версией 0.9 · редакция 13.10.2026

Документация NGENSIA · Работа, настройка и эксплуатация