Первые шаги
Установка
Один контейнер, один файл конфигурации, одна мастер-фраза — и зачем нужен каждый из них.
Unruin поставляется одним образом Docker: бинарник unruin, restic, клиенты
postgresql-client и mariadb-client и docker CLI. Один контейнер — это весь
управляющий слой.
Эта страница доводит до работающего экземпляра. Боевая поза — выставление наружу, укрепление, резервная копия тома с состоянием, список проверок перед запуском — дальше, в развёртывании.
Что понадобится
| Машина, где он будет жить | что угодно с Docker. Между запусками он ничем не занят. |
| Доступ по SSH к тому, что копируем | пользователь, который может читать данные, и его закрытый ключ. |
| Место под копии | папка рядом, хост по SSH/SFTP или ведро, совместимое с S3. |
| Одна фраза, которую вы сохраните | ею открывается хранилище секретов. Запишите её там, где не эта машина. |
На серверы, которые копируются, ставить не нужно ничего. Для источников-папок
и docker-томов Unruin сам доставляет свой статический restic в
~/.cache/unruin/ пользователя на цели, когда тот там впервые понадобится.
Взять образ
Закреплённая версия:
docker pull git.dreep.ru/smirnar/unruin:1.0.0
Или собрать из клона — тем же Dockerfile, из которого собирается опубликованный образ:
git clone https://git.dreep.ru/smirnar/unruin.git
cd unruin
docker build -t unruin:local .
Если тег в реестре вам недоступен, соберите из исходников. Для сборки не нужно ничего, кроме Docker, и получится тот же самый образ.
Есть и обычная сборка на Go — чтобы гонять команды без Docker. Ей нужен
инструментарий Go и restic в PATH:
go build -o bin/unruin ./cmd/unruin
./bin/unruin validate examples/jobs.yaml
Запустить
В репозитории лежит боевой compose — examples/production/. Скопируйте эту папку
себе и работайте от неё, а не пишите свою с нуля: там уже сделано правильно то,
что легко сделать неправильно. Закреплённая версия образа, конфигурация,
примонтированная только на чтение, долговечный том с состоянием, порт, открытый
только на loopback, проверка живости и no-new-privileges.
cp -r examples/production /srv/unruin
cd /srv/unruin
cp .env.example .env # и заполнить — см. ниже
docker compose up -d
Три переменные, которые важны на первом запуске:
| Переменная | Что это |
|---|---|
UNRUIN_MASTER_PASSPHRASE |
открывает встроенное хранилище секретов kr://. Без неё ссылки kr:// не читаются, и панель об этом скажет. |
UNRUIN_API_TOKEN |
обязателен, как только до порта может дотянуться кто-то кроме loopback этой машины. Сгенерировать: openssl rand -hex 32. |
UNRUIN_IMAGE |
точная версия образа. Закрепите её: гоняться за :latest значит позволить случайному docker compose pull подменить работающую версию. |
Всё, что должно пережить перезапуск, лежит на томе unruin-state: история
запусков (runs.db), шифрованное хранилище секретов (secrets.kr), закреплённые
ключи хостов SSH и кэш restic. Потерять его — потерять историю и секреты; что
держать отдельно, написано на странице секреты.
Убедиться, что поднялся
docker compose ps # STATUS должен дойти до "healthy" секунд за 20
docker compose logs unruin # "unruin: dashboard on http://0.0.0.0:8080"
Дальше — проверить конфигурацию, сначала на бумаге, потом по-настоящему:
docker compose exec unruin unruin validate /config/jobs.yaml
docker compose exec unruin unruin validate /config/jobs.yaml --preflight
--preflight разрешает каждый секрет, открывает соединение SSH с каждым сервером
и щупает каждое хранилище. Это разница между «файл разбирается» и «это
действительно пойдёт сегодня ночью». На заготовке из стартовой конфигурации он
и должен упасть, пока вы не направите её на настоящий сервер.
Открыть панель
Compose публикует порт только на loopback хоста:
http://127.0.0.1:8080
Если задан UNRUIN_API_TOKEN, панель откроется на экране, который просит этот
ключ; вставьте один раз, дальше он живёт в браузере. Если вы ходите на машину по
SSH — пробросьте порт, а не открывайте его в сеть:
ssh -N -L 8080:127.0.0.1:8080 you@your-host
Как выставить панель наружу по-человечески — TLS, обратный прокси, какой способ входа выбрать — на странице вход и выставление наружу.
Два способа владеть конфигурацией
Решите это сейчас: от этого зависит, что панели разрешено.
- Через git (так сделано в примере):
/configпримонтирован только на чтение, заданUNRUIN_READONLY=1. Панель читает и запускает; любая попытка что-то изменить получает честный 403. Изменения идут черезgit pullи перезапуск. В бою рекомендуется именно это. - Через панель: уберите
UNRUIN_READONLYи примонтируйте./configна запись. Теперь задания, серверы, хранилища и секреты заводятся из браузера. Каждое изменение проверяется, прогоняется туда-обратно и пишется атомарно; отвергнутое изменение до работающей конфигурации не доходит. См. панель.
Переключаться можно когда угодно — это две строки в compose, и файл конфигурации в обоих случаях один и тот же.
Дальше
- Первая копия — настоящий запуск от начала до конца на одной машине.
- Подключить сервер — пользователь для копий и ключ.
- Развёртывание — список проверок перед боем.