Эксплуатация
Проверка и стенд для опытов
Одноразовая цель в Docker, чтобы всё потрогать безопасно, и набор автоматических тестов.
Потрогать Unruin можно двумя способами: стенд (одноразовая цель, оркестратор и панель — всё в Docker), где ничего не жалко, и набор автоматических тестов. Здесь про оба, а ещё про то, как убедиться, что копия действительно есть.
- Впервые видите? Начните с GETTING-STARTED.md — от нуля до проверенной копии на настоящем сервере.
- Каждое поле конфигурации — CONFIGURATION.md.
1. Поднять стенд
examples/dev/ поднимает цель для копий (sshd + Postgres + restic) и
оркестратор (планировщик и панель), настроенные копировать базу app с цели
(источник-поток) и /etc (источник-путь) в локальные хранилища с рассылкой копий.
Есть два варианта:
| Файл | Для чего |
|---|---|
docker-compose.dev.yml |
классический стенд (чтение и запуск) |
docker-compose.web.yml |
вся конфигурация из браузера — заводить, менять и удалять задания, серверы, хранилища. Этот и берите, если хотите пощупать панель |
cd examples/dev
ssh-keygen -t ed25519 -N "" -f keys/id_dev # один раз, если keys/ пуст
( cd ../.. && go build -o bin/unruin ./cmd/unruin ) # бинарник монтируется внутрь
docker compose -f docker-compose.web.yml up --build -d
open http://localhost:8080 # панель
После правки кода: ( cd ../.. && go build -o bin/unruin ./cmd/unruin ) && docker compose -f docker-compose.web.yml restart unruin.
Стенд держит панель на loopback и без ключа, поэтому правка разрешена и всё можно вести из браузера. Секреты —
file://иenv://, так что мастер-фраза, чтобы попробовать, не нужна.
2. Погонять панель
Откройте http://localhost:8080. На пустой конфигурации встречает панель приветствия с тремя шагами; в засеянном стенде задания уже есть, и вы увидите список.
- Запустить задание — Запустить сейчас в строке, затем щёлкнуть по строке и смотреть, как в живом журнале идёт копирование, рассылка и контрольное восстановление.
- Завести задание — + Новое задание: выбрать источник, отметить хранилища
(первое — основное), задать расписание (готовые варианты и подсказка обычными
словами помогают). Оно попадёт в
jobs.yamlи пойдёт по расписанию. - Изменить или удалить задание — кнопки в строке.
- Хозяйство — ⚙ Хозяйство: заводить, менять и удалять серверы и
хранилища. Редактор хранилища знает про тип (выбираете
local/s3/sftpи заполняете поля). Сервер или хранилище, которым ещё пользуется задание, удалить нельзя. - Посмотреть на проверку — введите в любую форму заведомую чушь (несуществующее хранилище, сервер без адреса). Её отвергнут с текстом ошибки, а работающая конфигурация останется нетронутой.
- Плашка секретов — если мастер-фразы
kr://нет или она неверная, в шапке появится ⚠.
Не на loopback (настоящее развёртывание): задайте UNRUIN_API_TOKEN; панель
откроется на экране, который просит этот ключ, проверит его до того, как
запомнить, и положит в localStorage. Ключ, переставший действовать посреди
сеанса, возвращает вас на тот же экран, а не морозит панель на старых данных.
3. Попробовать все три схемы секретов
Копии нужны ключ SSH (на сервер) и ключ хранилища (на каждое хранилище restic). Unruin держит ссылки, которые разрешает в момент запуска:
| Схема | Как подать |
|---|---|
kr:// |
встроенное шифрованное хранилище — по умолчанию (ниже) |
env:// |
переменная окружения (ключ хранилища на стенде — env://REPO_PW) |
file:// |
примонтированный файл — по умолчанию на стенде (file:///keys/id_dev) |
Встроенное хранилище (kr://) — быстрая проба
# Дать serve мастер-фразу и положить секрет (значения идут со stdin, не из argv):
docker compose -f docker-compose.web.yml exec \
-e UNRUIN_MASTER_PASSPHRASE='harness-pass' unruin \
sh -c 'unruin secret set ssh/target < /keys/id_dev && unruin secret ls'
Добавьте UNRUIN_MASTER_PASSPHRASE в environment: службы unruin в файле
compose, сделайте restart unruin, направьте сервер на kr://ssh/target (через
⚙ Хозяйство или API) и запустите задание — ключ разрешится из шифрованного
хранилища. unruin secret ls показывает только имена, никогда значения.
4. Убедиться, что копия действительно есть
Статусы в панели — один сигнал; правда — точки восстановления в самом хранилище:
cd examples/dev
docker compose -f docker-compose.web.yml exec unruin \
restic -r /repo -p <(printf %s dev-not-secret) snapshots
Должны быть точки с меткой job:<имя>. Контрольное восстановление делает это на
каждом запуске с verify: true (по умолчанию так): разворачивает собственную
точку задания во временную папку и требует, чтобы там было настоящее содержимое.
5. Команды (вне стенда, на настоящем парке)
unruin validate jobs.yaml # проверка на бумаге (ссылки, параметры, расписания)
unruin validate jobs.yaml --preflight # + вживую: разрешить секреты, соединиться по SSH, дотянуться до хранилищ
unruin run jobs.yaml <job> # выполнить одно задание сейчас
unruin serve jobs.yaml # демон с расписанием и панелью
unruin prune jobs.yaml <job> [--dry-run] # уборка по правилам хранения (привилегированный доступ)
unruin unlock jobs.yaml <job> [--remove-all] # снять брошенную метку занятости
unruin secret set|ls|rm <name> # хранилище kr://
validate --preflight — самый быстрый ответ на вопрос «а это вообще пойдёт?». Он
разрешает секреты (поэтому неверное имя kr:// или отсутствующая мастер-фраза
падают сейчас, а не в три часа ночи) и подтверждает, что SSH и хранилища
достижимы.
6. Прогнать автоматические тесты
go test ./... # весь набор (модульные и герметичные)
go test -race ./... # с детектором гонок (тесты демона и хранилища истории)
go vet ./...
go test -short ./... # пропустить интеграционные, которым нужны настоящие инструменты
По умолчанию набор герметичен: SSH, restic и поставщики секретов подменены
заглушками. Интеграционные тесты (настоящий restic против временных хранилищ,
SSH против одноразового контейнера) закрыты флагом и пропускаются под -short;
гоняйте полный набор, когда эти инструменты установлены.
Отдельные модули со своими тестами: site/docsgen (генератор документации) и
desktop (компаньон). Корневой ./... до них не достаёт — заходите в каталог.
7. Убрать за собой
cd examples/dev
docker compose -f docker-compose.web.yml down -v # остановить и стереть тома