UNRUIN
документация · v1.0

Эксплуатация

Проверка и стенд для опытов

Одноразовая цель в Docker, чтобы всё потрогать безопасно, и набор автоматических тестов.

Потрогать Unruin можно двумя способами: стенд (одноразовая цель, оркестратор и панель — всё в Docker), где ничего не жалко, и набор автоматических тестов. Здесь про оба, а ещё про то, как убедиться, что копия действительно есть.

  • Впервые видите? Начните с GETTING-STARTED.md — от нуля до проверенной копии на настоящем сервере.
  • Каждое поле конфигурации — CONFIGURATION.md.

1. Поднять стенд

examples/dev/ поднимает цель для копий (sshd + Postgres + restic) и оркестратор (планировщик и панель), настроенные копировать базу app с цели (источник-поток) и /etc (источник-путь) в локальные хранилища с рассылкой копий. Есть два варианта:

Файл Для чего
docker-compose.dev.yml классический стенд (чтение и запуск)
docker-compose.web.yml вся конфигурация из браузера — заводить, менять и удалять задания, серверы, хранилища. Этот и берите, если хотите пощупать панель
sh
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://) — быстрая проба

sh
# Дать 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. Убедиться, что копия действительно есть

Статусы в панели — один сигнал; правда — точки восстановления в самом хранилище:

sh
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. Команды (вне стенда, на настоящем парке)

sh
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. Прогнать автоматические тесты

sh
go test ./...            # весь набор (модульные и герметичные)
go test -race ./...      # с детектором гонок (тесты демона и хранилища истории)
go vet ./...
go test -short ./...     # пропустить интеграционные, которым нужны настоящие инструменты

По умолчанию набор герметичен: SSH, restic и поставщики секретов подменены заглушками. Интеграционные тесты (настоящий restic против временных хранилищ, SSH против одноразового контейнера) закрыты флагом и пропускаются под -short; гоняйте полный набор, когда эти инструменты установлены.

Отдельные модули со своими тестами: site/docsgen (генератор документации) и desktop (компаньон). Корневой ./... до них не достаёт — заходите в каталог.


7. Убрать за собой

sh
cd examples/dev
docker compose -f docker-compose.web.yml down -v    # остановить и стереть тома

Бесплатно, целиком ваше, наружу ничего не уходит. Сайт статический: ни аналитики, ни куки, ни внешних запросов.