Первые шаги
Первая копия
От пустой машины до копии, которую уже развернули обратно и проверили.
Отсюда — от пустого места до копии, которую уже развернули обратно и проверили. В примере хранилище локальное, а источник — команда, чтобы весь путь можно было пройти на одной машине. В конце показано, как перевести то же самое на настоящий сервер.
Устройство одной строкой: завести сервер (адрес, пользователь, вставленный ключ), завести хранилище (папка, облако, другой компьютер), завести задание (что + куда + когда) — и всё. Ставить на ваши хосты, кроме доступа по SSH, нечего. Что изменилось и почему — в SIMPLIFICATION.md.
1. Собрать
go build -o bin/unruin ./cmd/unruin
Ещё понадобится restic в PATH (restic version).
2. Самая маленькая конфигурация
local.yaml — снимает вывод команды в локальное хранилище:
servers:
here:
host: 127.0.0.1
user: youruser
ssh_key: "env://SSH_KEY" # для команды, запускаемой локально, не нужен
destinations:
primary:
backend: { type: local, path: /tmp/unruin-repo } # mode по умолчанию restic
repo_password: "env://REPO_PW"
jobs:
- name: hello
server: here
source: { type: command, command: "printf hello-world" }
dest: [ { name: primary, required: true } ]
rotation: { keep_last: 3 }
verify: true
3. Проверить
./bin/unruin validate local.yaml
# config OK: 1 server(s), 1 destination(s), 1 job(s)
validate ловит опечатки, битые ссылки, недостающие параметры и негодный cron —
до трёх часов ночи, а не в три часа ночи.
4. Запустить
Источники-потоки идут по SSH, поэтому настоящему запуску нужен доступ по SSH до
host. Чтобы честно попробовать на одной машине, включите SSH на localhost — или
сразу перейдите к шагу 6 и возьмите настоящий сервер. Когда SSH работает:
export REPO_PW="придумайте-длинную-фразу"
export UNRUIN_STATE_DIR=/tmp/unruin-state
./bin/unruin run local.yaml hello
# job "hello": success
Unruin снял вывод команды в хранилище, а затем развернул его обратно — достал последнюю точку восстановления во временную папку и убедился, что она не пустая.
5. Посмотреть и прибраться
restic -r /tmp/unruin-repo snapshots # точка восстановления с меткой job:hello
./bin/unruin prune local.yaml hello --dry-run # что удалила бы уборка
6. Настоящий сервер
Направьте задание на настоящую машину и настоящую базу:
servers:
vps-prod-1:
host: 10.0.0.11
user: root
ssh_key: "kr://ssh/vps-prod-1"
destinations:
minio-primary:
backend: { type: s3, endpoint: https://minio.example.com, bucket: backups }
access: "kr://minio/primary" # в записи поля access_key и secret_key
repo_password: "kr://restic/minio-primary#password"
jobs:
- name: app-db-nightly
server: vps-prod-1
source: { type: postgres, db: app }
dest: [ { name: minio-primary, required: true } ]
schedule: "0 3 * * *"
rotation: { keep_daily: 14 }
Положите секреты во встроенное хранилище kr:// (или вставьте в поле в панели) и
запускайте:
export UNRUIN_MASTER_PASSPHRASE="придумайте-длинную-фразу" # открывает хранилище kr://
printf %s 'значение-секрета' | ./bin/unruin secret set restic/minio-primary#password
./bin/unruin run prod.yaml app-db-nightly # разово
./bin/unruin serve prod.yaml # или демон с расписанием
Для источника-пути (files / docker_volume) на цель ставить нечего: Unruin
доставит туда свой restic по SSH сам. Пользователю SSH достаточно уметь читать
путь. См. SERVER-SETUP.md.
Каждое поле — в CONFIGURATION.md, как оно работает — в ARCHITECTURE.md, а восстановление после аварии — в RESTORE.md.