detachbox
СтраницыУстановка ноды

Установка ноды

Одна команда от root превращает чистый сервер Ubuntu в вашу ноду. Дайте ей токен от вашего контакта в detachbox и пустой диск для пула:

curl -fsSL https://api.detachbox.com/api/v1/node-host/install \
  | sudo bash -s -- <token> --disk /dev/sdb

Установка занимает 30–60 минут, и больше всего времени уходит на сборку OpenZFS и первого базового образа. В конце она печатает «The node … is live», и терминалы вашего аккаунта открываются на https://my.detachbox.com.

Если на сервер заходят другие люди, не пишите токен в команду: её строку видит любой локальный пользователь, пока идёт установка. Без токена команда сама спросит его на вашем терминале строкой detachbox enrollment token: и не покажет набранное:

curl -fsSL https://api.detachbox.com/api/v1/node-host/install \
  | sudo bash -s -- --disk /dev/sdb

Что принимает команда

АргументЧто делает
<token>Токен регистрации: один сервер, одна установка. Без него команда спросит токен сама
--disk /dev/sdbЦелый пустой диск для пула ноды; имя вида /dev/disk/by-id/… тоже подойдёт
--private-network 10.20.0.0/16Частная сеть, куда пускать терминалы; повторите флаг для нескольких сетей или передайте none, чтобы не открывать ни одной. Подробнее на странице Куда ходят терминалы
--verboseКаждая строка запущенных команд идёт и в журнал, и на экран
--checkТолько проверки: на сервере ничего не меняется, токен не расходуется

Повторный запуск без --private-network оставляет сети, которые получил прошлый запуск. Когда нода уже зарегистрирована, меняйте их командой private-networks, а не командой установки.

Сначала проверки

Команда начинает с таблицы проверок: система, root, systemd, корневая файловая система, другие контейнеры и туннели на сервере, CPU и память, диск, частные сети, часы, Secure Boot и заголовки ядра, когда ZFS нужно собирать, DNS, каждый исходящий адрес, TLS и токен. Каждая строка помечена ✓ или ✗, а под каждым ✗ написано, как исправить. Пока все строки не станут ✓, на сервере ничего не меняется.

Чтобы увидеть таблицу заранее, ещё до дня установки, поставьте --check после токена:

curl -fsSL https://api.detachbox.com/api/v1/node-host/install \
  | sudo bash -s -- <token> --check --disk /dev/sdb

Команда выполнит только проверки и закончит строкой Nothing on this machine changed and the token is not spent: the same command without --check installs the node. Скачанный и проверенный node-host остаётся на сервере до следующего запуска, как после любого запуска.

Восемь шагов

  1. Пакеты: самый новый Incus из стабильного репозитория Zabbly (7.6 или новее) и самый новый cloudflared от Cloudflare, из их собственных репозиториев apt, с ключами подписи, встроенными в установщик. Установка фиксирует оба (apt-mark hold): перезапуск любого из них на несколько секунд рвёт открытые соединения с нодой, поэтому обновляются они только в момент, который выберете вы, или в день, когда не работает ни один терминал.
  2. OpenZFS 2.4.4 и предел кеша ZFS. Установщик собирает OpenZFS из официального выпуска (SHA-256 закреплён, подпись проверена ключом выпусков OpenZFS) в пакеты с модулем DKMS, так что модуль получает каждое ядро с заголовками. Модуль Ubuntu он меняет на новый без перезагрузки.
  3. Пул ZFS boxes на вашем диске.
  4. Incus: хранилище, два моста (один для терминалов, другой для edge ноды), их правила файрвола, проекты и собственный API Incus только на мосту edge.
  5. Первый базовый образ: Ubuntu с Docker, Claude Code, Codex и OpenCode, 10–20 минут. Дальше нода пересобирает его каждые 6 часов.
  6. Регистрация на api.detachbox.com: нода получает имя, ключи, туннель Cloudflare и собственный домен под detachbox.dev; node-host получает конфиг и юниты.
  7. Запуск cloudflared и node-host.
  8. Подъём со стороны сервера: detachbox связывается с node-host через туннель, запускает edge (шлюз терминалов и прокси превью), прогоняет проверочный запуск и создаёт Compute вашего аккаунта. Команда печатает каждый этап, когда сервер до него доходит.

Каждый шаг печатает, чем занят, например configure, compile и упаковку при сборке OpenZFS. Пока идёт долгая часть, раз в 30 секунд появляется строка.

Повторный запуск продолжает с места остановки

Если установку что-то остановило, например закрытый адрес, оборванное соединение или перезагрузка, запустите ту же команду снова. Она продолжит с шага, на котором остановилась, и ничего сделанного не повторит. Скачанный и проверенный node-host остаётся на сервере, доступный только root, пока установка не поставит его на место. По одному токену node-host можно скачать три раза, потом раз в 30 минут; сколько ждать, команда скажет сама.

  • Если обрывается удалённая оболочка, из которой вы запустили установку, установка останавливается там, где была. Запущенная без терминала, из скрипта или инструмента с лимитом времени, она продолжает работать. При неустойчивом соединении запускайте её внутри tmux.
  • Ctrl-C или sudo kill <pid> из другой сессии останавливает запуск за секунды вместе со всем, что запустил его шаг.
  • Одновременно идёт только один запуск. Команда, запущенная поверх работающего запуска, ничего не меняет: она скажет, с какого времени он идёт, назовёт его процесс и объяснит, как за ним следить.
  • Повторный запуск идёт на тот же диск. Чтобы начать заново на другом диске, сначала удалите ноду.

Если шаг не прошёл

Команда печатает, что сломалось и почему, какая команда или правка это исправит, и последние 30 строк упавшей команды. Ошибка уходит в detachbox вместе с вашим токеном, так что ваш контакт в detachbox тоже её видит. Исправьте и запустите ту же команду снова. Частые случаи разобраны на странице Неполадки ноды.

Журнал

/var/lib/detachbox-node/install/install.log хранит каждый запуск целиком: строку с его началом и выпуском, каждую строку каждой команды и то, чем запуск закончился. Если сессия оборвалась, журнал скажет, чем закончился запуск. Следить за запуском из другой сессии:

sudo tail -f /var/lib/detachbox-node/install/install.log

Что работает на сервере

Что · от когоЧто делает
detachbox-node-host · rootЕдинственный путь detachbox к ноде: выполняет подписанные запросы сервера в локальном Incus, держит бюджет CPU и памяти аккаунта, пересобирает базовый образ и обновляется из подписанных выпусков
cloudflared-detachbox · cloudflared, в песочницеТуннель Cloudflare ноды, только исходящий
Incus · rootТерминалы, каждый — контейнер со своим Docker
Контейнер edge · внутри IncusШлюз терминалов и прокси превью

Что куда ложится

ПутьЧто там
/usr/local/bin/detachbox-node-host, /usr/local/lib/detachbox-node/Программа
/etc/detachbox-node/Её конфиг (node-host.json) и ключи
/var/lib/detachbox-node/Её состояние; запись установки и журнал — в install/
/etc/systemd/system/detachbox-node-host.service, /etc/systemd/system/cloudflared-detachbox.serviceДве службы
/etc/cloudflared/detachbox.tokenТокен туннеля
/etc/apt/sources.list.d/, /etc/apt/keyrings/Репозитории Zabbly и Cloudflare и их ключи
/etc/sysctl.d/90-detachbox.conf, /etc/modprobe.d/zfs.confНастройки sysctl ноды и предел кеша ZFS
/usr/src/openzfs-buildСборка OpenZFS
Пул boxes на вашем дискеДиск вашего аккаунта, системные диски терминалов и базовые образы