Резервное копирование и восстановление
SubLane Руководство: резервное копирование и восстановление.
После использования вашего экземпляра создайте резервную копию перед обновлением или перемещением серверов. Первая просьба.
SubLane может экспортировать запущенный экземпляр, проверить резервную копию и восстановить ее в новый каталог. Настройки системы → Резервное копирование и восстановление Восстановление никогда не перезаписывает запущенный экземпляр; переключение на восстановленные данные является явным перезапуском оператора.
Что включается
Новые резервные копии — двоичные файлы age, зашифрованные паролем. После расшифровки архив gzip/tar содержит:
sublane.db: последовательный SQLite Снимок, включая данные WAL.credentials.key: соответствующий ключ шифрования для учетных данных подписки и восстанавливаемых ключей шлюза.manifest.jsonФорматная версия, время создания, SubLane Версия сборки, версия схемы, размеры файлов и контрольные суммы SHA-256.
Пользователи, хэши паролей, API ключи, учетные записи подписки, пулы, разрешения, каталоги, настройки, записи запросов, резюме использования, охлаждения и записи аффинити включены. Сессии браузера захватываются в резервной копии, но очищаются в восстановленном каталоге. Выбор темы / языка браузера, среда процесса, файлы развертывания и ожидающие в памяти OAuth Попытки не учитываются.
Для нового экспорта требуется пароль из 12–128 символов. SubLane его не сохраняет. Храните пароль отдельно: при потере восстановить зашифрованную копию невозможно. Старые незашифрованные .tar.gz по-прежнему можно проверить и восстановить без пароля, но они содержат читаемые ключи и требуют закрытого хранения.
Командная строка
Запустите команды из каталога с достаточным свободным пространством для снимка базы данных и сжатого архива:
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-passwordbackup читать SUBLANE_DATA_DIR или ./dataс факультативным --data-dir Переопределить. restore Всегда требуется явный новый каталог; даже существующий пустой каталог отклоняется. Родительский каталог должен существовать. Существующие архивные файлы и каталоги восстановления никогда не заменяются. Успешные команды печатают JSON Результат с операцией, пути и резервных метаданных. sublane --help Перечислите команды
Обслуживание команды не начинается HTTP Сервер, SDK исполнителей, OAuth, или автоматические проверки релиза, и не зависят от адреса сервера/конфигурации public-URL. Они имеют пятнадцатиминутный срок и отвечают на SIGINT/SIGTERM. Снимки базы данных ограничены 4 GiB и архивным IO использует ограниченные буферы. Разрешить дисковое пространство для извлечения и миграции при проверке или восстановлении, помимо самого архива.
После успешного восстановления:
- Остановите текущее SubLane обслуживание.
- Сохраняйте свой оригинальный каталог данных нетронутым.
- Начинать SubLane с восстановленным каталогом:
SUBLANE_DATA_DIR=./data-restored ./bin/sublane- Войдите снова и проверьте ожидаемых пользователей, пулы, ключи и состояния учетной записи, прежде чем возобновить командный трафик.
Оригинальный каталог доступен для отката путем остановки 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-адрес после начала загрузки.
Пример резервного копирования браузера и восстановления элементов управления:

Docker Compose
Для экспорта и проверки в рабочем контейнере:
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 -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:
services:
sublane:
environment:
SUBLANE_DATA_DIR: /data/restore-readyЗатем прекратите первоначальный процесс и начните с переопределения:
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/export | JSON {password} → .age |
POST /api/settings/backup/verify | multipart/form-data: password + file |
POST /api/settings/backup/restore | multipart/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, без символьных ссылок), отдельно от данных и копий. Файл перечитывается при каждом запуске.
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 в переопределении.