detachbox
СтраницыОбслуживание ноды

Обслуживание ноды

Нода сама обновляется и сама проверяет своё состояние. Ваш администратор обновляет Ubuntu и её ядро и может сам выбрать момент, когда обновятся Incus и cloudflared.

Проверка командой doctor

sudo detachbox-node-host doctor

doctor проверяет ноду насквозь и ничего не меняет. На каждую проверку у него 20 секунд, а её строку он печатает сразу, как только проверка закончилась:

  • что detachbox всё ещё принимает токен ноды, node-host и его версию, последний ответ сервера;
  • соединения туннеля с Cloudflare и обратный путь через него, до node-host и до шлюза терминалов;
  • исходящий HTTPS и TLS до api.detachbox.com;
  • Incus и его фиксацию в apt, а также ждут ли установки новые сборки Incus или cloudflared;
  • модуль ZFS, загруженный сейчас, и тот, что загрузит следующее ядро, дедупликацию, здоровье пула и его заполненность;
  • что файрвол терминалов совпадает с вашими частными сетями;
  • базовый образ и время начала его последней сборки.

Для каждого ✗ написано, как исправить. Если какая-то часть зависла, например Incus или ZFS, её строка ✗ заканчивается на … within 20 s, а следующие проверки той же части не ждут и пишут not checked: … did not answer above. Знак … отмечает то, что проверку не проваливает: то, что пока узнать нельзя, например первый ответ сервера в первые минуты после перезапуска node-host, или обновление, которое ждёт установки. Строка обновлений выглядит как ✓ Updates Incus <version>, cloudflared <version>: the newest builds apt knows of или … Updates not yet: …; <build> waits: sudo detachbox-node-host upgrade installs it (node-host does on a day no terminal runs).

sudo detachbox-node-host doctor --report отправляет результат в detachbox, и ваш контакт в detachbox видит то же, что и вы.

Что обновляется само

  • node-host обновляется сам в течение нескольких минут после каждого выпуска detachbox. Он ставит только то, что подписано ключом выпусков detachbox, и возвращает прежний выпуск, если новый не поднялся.
  • Базовый образ терминалов пересобирается каждые 6 часов, с обновлениями Ubuntu и свежими Claude Code, Codex и OpenCode. В работу он идёт только после проверочного запуска; неудачная сборка оставляет на месте последнюю удачную. Работающие терминалы остаются на образе, с которого стартовали, а новый или перезапущенный терминал получает текущий.

Incus и cloudflared

Оба зафиксированы в apt, и фиксация никогда не снимается: ваш собственный apt upgrade их не трогает. Перезапуск cloudflared один раз рвёт все соединения через туннель ноды (вкладки терминалов, превью, загрузки), а перезапуск Incus рвёт соединения открытых вкладок терминалов. И те и другие сами переподключаются за секунды, а терминалы продолжают работать вместе с сессиями tmux, агентами и всеми процессами в них. Терминал, который запускают или останавливают в эти секунды, один раз выдаст ошибку, а повторная попытка пройдёт; сборка базового образа, которая идёт в этот момент, падает и собирается заново в течение 6 часов. Поэтому обновляются они только в момент, который выбираете вы, или в день, когда не работает ни один терминал.

sudo detachbox-node-host upgrade --check      # спрашивает оба репозитория разработчиков, ничего не меняет
sudo detachbox-node-host upgrade              # что вышло новее и что будет с терминалами, вопрос [y/N]
sudo detachbox-node-host upgrade --confirm    # обновляет без вопроса

upgrade перечисляет, что вышло новее, сколько терминалов работает и что с ними сделают перезапуски, а потом спрашивает. Без терминала спросить негде, поэтому такой запуск откажется и назовёт --confirm. Когда начинают ставиться пакеты, обновление доходит до конца, что бы ни случилось с вашей сессией; следить за ним можно командой sudo tail -f /var/lib/detachbox-node/install/install.log. В конце оно запускает doctor и печатает ✓ Upgraded: …; на нашей тестовой ноде всё заняло около минуты.

node-host пробует то же обновление раз в день, первый раз через 15 минут после своего старта, и только когда не работает ничего, кроме edge: ни одного терминала, ни одной сборки базового образа. Если терминал работает, node-host пишет в журнал, что обновление ждёт, и пробует снова через день. Нода, на которой всегда работает какой-нибудь терминал, сама не обновится никогда: doctor будет показывать обновление, пока вы не запустите upgrade.

Обновления ядра

Ubuntu и её ядро обновляете вы. Ставьте каждое новое ядро вместе с его linux-headers, и DKMS сам соберёт для него ZFS 2.4.4 ноды; на нашей тестовой ноде это заняло около 4 минут. После этого doctor показывает строку ZFS for <kernel> для работающего ядра и ещё одну для самого нового установленного, которое загрузится при следующей перезагрузке. Обе должны быть ✓, прежде чем вы перезагрузитесь; после перезагрузки в новое ядро нода поднимается сама.

Если ядро всё же загрузится без ZFS ноды, node-host выключит дедупликацию раньше, чем терминал запишет хоть байт, и скажет об этом в doctor и в detachbox. Дедупликацию он включит снова при первом старте на исправном модуле.

Перезагрузки

Перезагрузка останавливает запущенные процессы и сессии tmux. node-host и туннель стартуют вместе с сервером, а терминалы поднимаются сами, с файлами, пакетами apt и образами Docker на месте; контейнеры Docker с политикой restart: запускаются снова. Каждый агент сам возвращается к последнему разговору и ждёт своего инженера. Агент, который не вернулся, запустится там же кнопкой Перезапустить терминал на этом разговоре.

Когда нода не в сети

Через минуту после того, как нода перестала отвечать, кабинет показывает Нода не в сети с 14:02 в верхней панели и на странице Compute, а открытый терминал пишет, что подключится сам, как только нода вернётся. Файлы остаются на сервере. После 10 минут тишины аккаунт, которому принадлежит нода, получает одно письмо: в нём время, когда нода замолчала, и подсказка запустить sudo detachbox-node-host doctor. Ещё одно письмо приходит, когда нода снова ответит. Перезагрузка и обновление node-host никогда не длятся так долго.

Больше ядер или памяти

Добавьте их в сервер и напишите вашему контакту в detachbox. node-host сообщает в detachbox ядра, память и пул сервера, а ваш контакт применяет новый размер; само ничего не меняется. Работающий Compute получает новый размер без перезапуска, и Журнал это записывает.

Когда detachbox снимает ноду

Если регистрацию вашей ноды отменили, doctor скажет это одной строкой, «✗ Account taken off», и подскажет, что делать: sudo detachbox-node-host uninstall --confirm или, если вы этого не ждали, отправить эту строку вашему контакту в detachbox. До тех пор node-host ведёт себя тихо, туннель и edge остаются как есть, а detachbox он спрашивает раз в 15 минут, так что нода, снятая по ошибке, вернётся в пределах этого времени. Если отказ 401 пришёл не от сервера detachbox, а, например, от прокси, который требует собственного входа, нода не снята: doctor пишет об этом в строке Account. Пропустите ноду через такой прокси без входа или отправьте строку вашему контакту в detachbox.