SubLaneSubLane

Резервное копирование и восстановление

SubLane Руководство: резервное копирование и восстановление.

После использования вашего экземпляра создайте резервную копию перед обновлением или перемещением серверов. Первая просьба.

SubLane может экспортировать запущенный экземпляр, проверить резервную копию и восстановить ее в новый каталог. Настройки системы → Резервное копирование и восстановление Восстановление никогда не перезаписывает запущенный экземпляр; переключение на восстановленные данные является явным перезапуском оператора.

Что включается

Новые резервные копии — двоичные файлы age, зашифрованные паролем. После расшифровки архив gzip/tar содержит:

  • sublane.db: последовательный SQLite Снимок, включая данные WAL.
  • credentials.key: соответствующий ключ шифрования для учетных данных подписки и восстанавливаемых ключей шлюза.
  • manifest.jsonФорматная версия, время создания, SubLane Версия сборки, версия схемы, размеры файлов и контрольные суммы SHA-256.

Пользователи, хэши паролей, API ключи, учетные записи подписки, пулы, разрешения, каталоги, настройки, записи запросов, резюме использования, охлаждения и записи аффинити включены. Сессии браузера захватываются в резервной копии, но очищаются в восстановленном каталоге. Выбор темы / языка браузера, среда процесса, файлы развертывания и ожидающие в памяти OAuth Попытки не учитываются.

Для нового экспорта требуется пароль из 12–128 символов. SubLane его не сохраняет. Храните пароль отдельно: при потере восстановить зашифрованную копию невозможно. Старые незашифрованные .tar.gz по-прежнему можно проверить и восстановить без пароля, но они содержат читаемые ключи и требуют закрытого хранения.

Командная строка

Запустите команды из каталога с достаточным свободным пространством для снимка базы данных и сжатого архива:

Command line · 1
mkdir -p backups
./bin/sublane backup --password-stdin --output ./backups/team.sublane-backup.tar.gz.age < /secure/backup-password
./bin/sublane backup verify --password-stdin --input ./backups/team.sublane-backup.tar.gz.age < /secure/backup-password
./bin/sublane restore --password-stdin --input ./backups/team.sublane-backup.tar.gz.age --data-dir ./data-restored < /secure/backup-password

backup читать SUBLANE_DATA_DIR или ./dataс факультативным --data-dir Переопределить. restore Всегда требуется явный новый каталог; даже существующий пустой каталог отклоняется. Родительский каталог должен существовать. Существующие архивные файлы и каталоги восстановления никогда не заменяются. Успешные команды печатают JSON Результат с операцией, пути и резервных метаданных. sublane --help Перечислите команды

Обслуживание команды не начинается HTTP Сервер, SDK исполнителей, OAuth, или автоматические проверки релиза, и не зависят от адреса сервера/конфигурации public-URL. Они имеют пятнадцатиминутный срок и отвечают на SIGINT/SIGTERM. Снимки базы данных ограничены 4 GiB и архивным IO использует ограниченные буферы. Разрешить дисковое пространство для извлечения и миграции при проверке или восстановлении, помимо самого архива.

После успешного восстановления:

  1. Остановите текущее SubLane обслуживание.
  2. Сохраняйте свой оригинальный каталог данных нетронутым.
  3. Начинать SubLane с восстановленным каталогом:
Command line · 2
SUBLANE_DATA_DIR=./data-restored ./bin/sublane
  1. Войдите снова и проверьте ожидаемых пользователей, пулы, ключи и состояния учетной записи, прежде чем возобновить командный трафик.

Оригинальный каталог доступен для отката путем остановки SubLane и переключение SUBLANE_DATA_DIR Не запускайте два экземпляра шлюза против одного и того же каталога данных. Восстановление возвращает все сохраненное состояние к моментальному снимку: более поздние отзывы ключей, изменения пароля и новые записи не включены. Поставщик подписки может аннулировать старые токены обновления с момента резервного копирования; повторно авторизовать затронутые учетные записи при необходимости. Проверка проверяет дешифрование и локальную целостность без контакта с поставщиками.

Web интерфейс

Только включенные администраторы могут использовать страницу или ее конечные точки.Мутации требуют точного происхождения браузера, а экспорт перепроверяет сеанс администратора после подготовки файла.

  • Скачать Backup Создает и загружает полный архив, пока экземпляр остается доступным.
  • Проверить резервную копию проверяет выбранный файл и отображает время его создания; SubLane Размер версии и базы данных.
  • Подготовьтесь к восстановлению Загружает и проверяет файл снова, затем создает <current data directory>/restore-readyСтраница показывает полный путь и инструкции перезапуска. Текущий экземпляр продолжает работать со своими исходными данными до тех пор, пока оператор не переключит каталоги.

существующий restore-ready Проверить его на сервере или использовать CLI с другой новой целью. Ни один каталог не может быть перезаписан через Интернет. APIЕсли данные восстановления были подготовлены, но запись живого аудита не удалась, каталог сохраняется, и страница сообщает о сбое аудита; проверьте его перед повторным использованием.

Веб-загрузки и загрузки ограничены 256 МБ сжатых данных; для больших резервных копий требуется CLI. Одна операция экспорта / проверки / восстановления выполняется одновременно на сервер. Загрузка, обработка и загрузка имеют ограниченные сроки. Временные файлы удаляются после завершения, сбоя или нормальной отмены. Принудительное уничтожение процесса или потеря мощности могут оставить частный .sublane-backup-* каталог; удаляйте оставшиеся каталоги только тогда, когда не выполняется операция резервного копирования.

Экспорт и подготовленные восстановления проверяются без записи содержимого архива, имен файлов, путей файловой системы или учетных данных. Cache-Control: no-storeСтраница загружается из выбранного файла; браузер получает скачанный архив в качестве временной капли и выпускает свой URL-адрес после начала загрузки.

Пример резервного копирования браузера и восстановления элементов управления:

Backup page with download, archive verification and restore preparation

Docker Compose

Для экспорта и проверки в рабочем контейнере:

Docker Compose · 3
docker compose -f docker.compose.yaml exec sublane sh -c 'mkdir -p /data/backups'
docker compose -f docker.compose.yaml exec -T sublane sublane backup --password-stdin --output /data/backups/team.sublane-backup.tar.gz.age < /secure/backup-password
docker compose -f docker.compose.yaml exec -T sublane sublane backup verify --password-stdin --input /data/backups/team.sublane-backup.tar.gz.age < /secure/backup-password
docker compose -f docker.compose.yaml cp sublane:/data/backups/team.sublane-backup.tar.gz.age ./team.sublane-backup.tar.gz.age

Для восстановления скопируйте резервную копию в частное место записи, видимое внутри контейнера, а затем подготовьте отдельный каталог:

Docker Compose · 4
docker compose -f docker.compose.yaml exec -T sublane sublane restore --password-stdin --input /data/backups/team.sublane-backup.tar.gz.age --data-dir /data/restore-ready < /secure/backup-password

Действия по восстановлению сети приводят к одной и той же цели. Чтобы активировать ее, создайте локальную Compose переопределить, например docker.compose.restore.yaml:

Docker Compose · 5
services:
  sublane:
    environment:
      SUBLANE_DATA_DIR: /data/restore-ready

Затем прекратите первоначальный процесс и начните с переопределения:

Docker Compose · 6
docker compose -f docker.compose.yaml stop sublane
docker compose -f docker.compose.yaml -f docker.compose.restore.yaml up -d

Для уже остановленного контейнера используйте docker compose -f docker.compose.yaml run --rm --no-deps sublane ... вместо того, чтобы exec для выполнения команд технического обслуживания против названного объема данных. Сохраняйте выбранную оверрайд в последующих командах развертывания. Не удаляйте названный объем во время этой процедуры.

Проверка и поведение неудачи

Проверка проверяет точные записи и размеры архива, дайджесты SHA-256, целостность gzip, поддерживаемую версию консолидированной схемы. SQLite целостность и иностранные ключи, ограниченные учетные записи и расшифровка учетных данных и зашифрованных API Связи проверки также ограничивают отдельных SQLite Значения и SQL-заявления на уровне 1 МиБ. Симлинки, обход пути, дубликаты/неожиданные файлы, отсутствующие файлы, усеченные архивы и неизвестные будущие схемы отвергаются. Более старые схемы разработки не принимаются этой сборкой предварительного выпуска.

Восстановление закрывает и синхронизирует подготовленную базу данных/ключ перед публикацией всего нового каталога с атомной беззаменной операцией. Linux и macOS требуют поддержки файловой системы для этой операции; неподдерживаемая операция не срабатывает, не возвращаясь к перезаписи. Никакая дополнительная таблица баз данных или миграция схемы не вводится с помощью поддержки резервного копирования. SQLite Скриншоты, использующие SQLite Онлайн резервное копирование API через прикрепленный драйвер Go, а не копирование файла базы данных в реальном времени.

Конечная точкаЦель
GET /api/settings/backupОзнакомьтесь с лимитом размера веб-сайта и фиксированным пунктом восстановления
POST /api/settings/backup/exportJSON {password} → .age
POST /api/settings/backup/verifymultipart/form-data: password + file
POST /api/settings/backup/restoremultipart/form-data: password + file

Использовать application/gzip или application/octet-stream Недействительные архивы возвращают 400, существующий пункт назначения возвращает 409, негабаритные загрузки возвращают 413, а занятый операционный слот возвращает 429 с Retry-AfterХранение и другие операционные сбои возвращают исправленные 503 ошибки.

credentials.key · Пароль резервной копии

Остановите существующий экземпляр, скопируйте исходный ключ в закрытое место вне каталога данных и задайте права пользователя службы. Удаляйте старую копию только после проверки запуска и зашифрованной резервной копии.

SUBLANE_CREDENTIALS_KEY_FILE: Необязательный закрытый файл ключа вне каталога данных; без настройки сохраняется прежний путь.

При раздельном хранении ключа переместите восстановленный credentials.key в новое закрытое место вне каталога данных и обновите SUBLANE_CREDENTIALS_KEY_FILE перед перезапуском. Не перезаписывайте ключ исходного экземпляра.

Используйте 12–128 символов. Храните пароль отдельно: при потере его нельзя сбросить. Обязателен для зашифрованных копий. Для старых незашифрованных архивов оставьте пустым.

--key-file FILE · --password-stdin · scrypt: 18 (~256 MiB)

Читайте пароль через --password-stdin из закрытого однострочного файла с правами 0600; не передавайте его в аргументах или переменных окружения.

Интерфейс отправляет multipart/form-data: сначала password, затем file. Старые необработанные загрузки по-прежнему поддерживаются без пароля.

Автоматический перенос ключа в Compose

В репозитории приложения доступен scripts/separate-key.sh для существующих развёртываний Compose с SubLane v0.12.0+. Сохраните и проверьте скрипт перед запуском на хосте Docker. Сначала экспортируйте и проверьте резервную копию для восстановления, зашифрованную паролем.

Вынести существующий ключ
sudo bash scripts/separate-key.sh --dir /srv/sublane --key-dir /srv/sublane-secrets

--dir указывает на существующее развёртывание с docker.compose.yaml и необязательным .env. --key-dir должен быть новым абсолютным путём на постоянном хранилище хоста вне фактической точки монтирования данных и каталога восстановления; родительский каталог уже должен существовать. Поддерживаются обычные ASCII-пути, включая пробелы. Требуются локальный Linux с rootful Docker без переназначения userns и SELinux, Compose, Bash, jq и GNU coreutils. Исправный сервис должен называться sublane, а каталог данных должен быть корнем доступного для записи bind-монтирования или именованного тома. В Compose нужны отступы сервисов в два пробела, блочное отображение environment и блочный список volumes. Неподдерживаемая структура отклоняется до остановки сервиса.

Скрипт проверяет проект, образ, монтирование, закрытые права доступа, размер исходного ключа в 32 байта и его хеш. Текст Compose и подстановка переменных сохраняются, нормализованные конфигурации сравниваются. Новый каталог хоста остаётся собственностью root с режимом 0700; в контейнер только для чтения монтируется лишь файл ключа 0600, принадлежащий UID/GID сервиса. Права сервиса не повышаются.

До переключения, после него и после удаления старого ключа создаётся и проверяется временная зашифрованная копия с новым случайным паролем. Временные файлы проверки находятся вне каталога данных и затем удаляются. Предусмотрите достаточно дискового пространства и памяти для KDF резервного копирования. Эти проверки не сохраняют копию для восстановления. Старый файл удаляется только после проверки новой конфигурации, состояния сервиса, хеша ключа и учётных данных; повторное создание и проверка подтверждают независимость от старого файла.

Перехватываемые ошибки или сигналы после начала переключения вызывают попытку отката. Явный откат доступен и после успешного переноса:

Откатить перенос ключа
sudo bash scripts/separate-key.sh --dir /srv/sublane --rollback

Закрытые данные восстановления остаются в /srv/sublane/.key-migration. Откат возвращает исходную конфигурацию и соответствующий ключ, пересоздаёт и проверяет исходный сервис. Он отказывается перезаписывать последующие изменения конфигурации или окружения и другой ключ; версии образа и базы данных никогда не понижаются. Внешний ключ и данные восстановления сохраняются с закрытым доступом. Повторный перенос не перезаписывает существующие записи или целевые каталоги: перед новой попыткой надёжно сохраните проверенные данные восстановления и выберите новый каталог ключа.

Скрипт использует общий с установщиком .update-lock; не запускайте другие операции развёртывания одновременно. После принудительного завершения или отключения питания убедитесь, что перенос и обновление не выполняются, удалите только оставшийся пустой .update-lock и используйте --rollback. Если откат не удаётся проверить, сохраняются ключевой материал восстановления и закрытый operation.log. Сохраняйте оба каталога до завершения восстановления. Долговременно хранимые копии и пароли к ним должны находиться отдельно.

Автоматические зашифрованные резервные копии

Включите параметры развёртывания ниже. Каталог должен быть закрытым (0700), независимый пароль из 12–128 символов хранится в закрытом обычном файле (0600, без символьных ссылок), отдельно от данных и копий. Файл перечитывается при каждом запуске.

Automatic backup deployment settings
export SUBLANE_BACKUP_DIR=/srv/sublane-backups
export SUBLANE_BACKUP_PASSWORD_FILE=/secure/sublane/backup-password
export SUBLANE_BACKUP_INTERVAL=24h
export SUBLANE_BACKUP_KEEP=7

Копирование выполняется при старте, затем после каждой попытки выдерживается интервал. Полная проверка новой копии предшествует ротации зарезервированных файлов scheduled-; ручные и новая проверенная копии сохраняются. Результаты в журнале сервиса. Без удалённой выгрузки и формы расписания; в деморежиме отключено.

SUBLANE_BACKUP_INTERVAL: 1h–720h (default 24h). SUBLANE_BACKUP_KEEP: 1–365 (default 7).

Используйте отдельный каталог резервных копий для каждого экземпляра.

Необязательный SUBLANE_BACKUP_WEBHOOK_URL отправляет на публичный HTTPS-адрес ограниченное по времени JSON-событие backup_failure при каждой неудачной попытке. Это адрес оператора экземпляра, отдельный от уведомлений пространства; ошибки доставки журналируются.

В Docker используйте пути контейнера, подключите закрытый файл пароля и отдельный доступный для записи каталог через локальное переопределение Compose и дайте доступ пользователю сервиса. Стандартный tmpfs /tmp — 64 MiB. Для больших проверок нужен отдельный закрытый доступный для записи mount и TMPDIR в переопределении.