Headless Linux server running OpenClaw gateway checks

2026 OpenClaw на headless Linux VPS: от install.sh до первого ответа канала через gateway probe и channels probe

Без графической оболочки на Ubuntu или Debian часто путают успешный инсталлятор с готовностью к продакшену. Здесь цель — первый стабильный ответ в чате; порядок официального troubleshooting: CLI, gateway probe, channels probe, и только потом модели. ufw и облачные security groups пересекаются; для IPv6 нужны проверки AAAA и семейства listen.

На headless Ubuntu или Debian часто путают успешный выход установщика с готовностью шлюза к продакшену. Здесь критерий — первый устойчивый ответ канала; порядок официального troubleshooting: Node и путь CLI, openclaw status, gateway probe, зондирование channels, и только затем строки моделей.

Фиксируйте bind слушателя, правила ufw и облачные security groups в одном тикете: эффективная политика — пересечение слоёв, а не самый оптимистичный скриншот.

1. Ложные «успехи»

Боль один: установщик кладёт бинарники, пока Node ниже поддерживаемой major или PATH указывает на старый префикс. Сразу после установки выполните node -v и which openclaw, затем openclaw status до правок JSON, чтобы было видно, какой пользователь владеет конфигом.

Боль два: открыли inbound в облаке, забыли исходящий DNS и TLS. В VPC с жёстким egress таймауты похожи на throttling модели; сначала curl -v к чат-эндпоинтам.

Боль три: путают LISTEN с публичной доступностью. ss может показать только loopback, пока security group блокирует или ufw противоречит консоли.

  1. Заморозить параллельные установщики и редакторы на одном JSON.
  2. Архивировать деревья конфигурации до первого merge.
  3. Напечатать порядок лестницы в шапке тикета.

2. Матрица: какой спутник читать первым

Таблица направляет к нужным статьям SFTPMAC вместо смешивания docker-команд с bare metal.

Плоскость Зона ответственности Первый фокус приёмки Ссылка
Голый VPSЯдро, ufw, SG, системный Nodelisten, egress, зондыЭта статья
DockerДайджест образа, env composebridge, WebSocketМатрица compose
WSL2systemd в WSL, localhostпроброс портовГайд WSL2
Хостинг Remote MacSLA, изоляциябазовая линия 24/7Тарифы SFTPMAC

3. Восемь шагов от install.sh до первого ответа

Боль четыре: пропускают gateway probe и сразу gateway install --force. Это множит процессы и порты, когда проблема была в файрволе или пути к токену. Force оставьте для задокументированного split-brain после снапшотов.

Боль пять: винят модели без зелёного канала. Сначала стабилизируйте gateway status, затем channels status --probe, проверьте каталоги учётных данных и квоты провайдера. Сохраняйте коды закрытия WebSocket и строки HTTP.

Боль шесть: смешивают советы для compose и bare metal. Compose использует bridge и инжектируемые env; VPS — sshd, ufw и иногда user linger systemd.

node -v
which openclaw
curl -fsSL https://openclaw.ai/install.sh | bash
openclaw status
openclaw gateway probe
openclaw gateway status
openclaw doctor
openclaw channels status --probe
  1. Заморозить параллельные правки людей и CI.
  2. Дампы окружения для login-shell, автomation-shell и будущего сервисного пользователя.
  3. Проверить Node 22+, при необходимости переустановить из утверждённых зеркал.
  4. Установщик с ротацией логов.
  5. Перед JSON-операциями status и gateway probe.
  6. gateway status и doctor, затем снова status.
  7. Править ufw и облачные правила в окне времени с заметкой об откате.
  8. Зондировать каналы, затем синтетическое сообщение на провайдера с редактированным скриншотом.

Дополняйте JSON-логи полями probe_step, exit_code и duration_ms, чтобы CI видела тренды за несколько ночей без ручного сравнения скриншотов.

Сохраняйте полные заголовки x-ratelimit-* чат-API рядом с логами шлюза, чтобы отличить 429 провайдера от промежуточного прокси.

Обработчики webhook должны отдавать ключи идемпотентности; в тикете фиксируйте, какой ключ отбросил повтор, иначе redelivery выглядит как новое действие пользователя.

Для объектного хранилища измеряйте глубину очереди и пропускную способность параллельно зондированию каналов: TLS к чату не гарантирует presigned PUT в ваш бакет.

HSTS-preload на nginx может заставить браузер ходить по https, пока внутренние healthcheck ещё ждут http; разводите публичные и внутренние имена в описании тикета.

Проверьте, не урезает ли ForceCommand или Match User в sshd_config окружение для Ansible, иначе ручные зонды и cron разъедутся.

Если cloud-init каждый перезаписывает сеть, ручной iptables может исчезнуть между двумя зондами; версионируйте cloud-init рядом с конфигом шлюза.

Скрипты profile.d, расширяющие PATH в интерактивной оболочке, часто дают ложнозелёные ручные тесты при узком PATH у systemd.

4. Таблица для дежурства

Маркируйте плоскость в тикете, чтобы не вставить куски bare metal в compose-стек. Матрица выбирает, какую статью читать первой, а не какого вендора покупать.

Операторы VPS владеют ритмом ядра, укреплением OpenSSH, зеркалами и обновлениями Node. Операторы Docker — дайджестами и токенами.

Слой Сигнал Критерий успеха
Listenerss и облачная UIЗаданный bind и экспозиция
RPCgateway probeСвязность ok по определению команды
КонфигdoctorНет блокеров
Каналыchannels probeТранспорт end-to-end
Моделилоги, models statusНет затяжных 429

К таблице в тикете добавьте версию установленного OpenClaw, чтобы постмортем не гадал: регрессия релиза или merge конфигурации.

В мультирегионе укажите AZ и transit gateway для SSH-администрирования отдельно от пути webhook — асимметричная маршрутизация даёт зелёные зонды и красный UX.

Для Let’s Encrypt фиксируйте ACME-клиент и метод challenge; HTTP-01 на 80 порту легко конфликтует с временными тестами шлюза на той же машине.

Сохраняйте вывод systemd-analyze blame после первого успешного бутстрапа, чтобы задержки старта не списывали на транспорт чата.

Если включили eBPF-трассировку, укажите версию ядра и коммит BCC — иначе коллеги не воспроизведут хуки.

Одной строкой опишите IPv6: SLAAC, статика или выключен, чтобы dual-stack споры не ходили по кругу.

Для резервных DNS-серверов корпоративной сети выпишите, какие forwarder реально использовал systemd-resolved, а не только то, что прописано в UI облака.

Если на хосте включён AppArmor профиль для nginx, приложите aa-status кратко, чтобы отличить отказ syscall от сетевого RST.

При использовании WireGuard до VPC зафиксируйте allowed-ips и keepalive — иначе «мертвые» туннели дают частично зелёные пробы.

Если логи шлюза пишутся на отдельный диск, мониторьте latency fsync: медленный диск может выглядеть как задержка канала.

5. Файрвол, dual stack, webhooks

Разделите путь управления, RPC шлюза и webhooks каналов: источник, назначение, протокол. Временно широкие правила — только в окне, затем сузить.

ufw и облачные SG пересекаются: allow плюс deny даёт deny. Оба скриншота в один тикет.

Dual stack: проверяйте AAAA и семейство listen вместе, чтобы не списать флап Happy Eyeballs на приложение.

Зафиксируйте, где терминируется TLS — nginx или шлюз — иначе healthcheck и зонды расходятся.

Перед разбором TLS-ошибок синхронизируйте chrony или systemd-timesyncd: даже небольшой сдвиг времени делает свежие сертификаты «невалидными» и уводит расследование не туда.

Если journald разрастается без ротации, кончаются inode при «зелёном» df -h; запись webhook падает без явного сообщения в логе шлюза.

Следите за nf_conntrack_count относительно лимита: всплески WebSocket дают те же симптомы, что и ошибка security group.

Проверяйте PMTU при туннелях между регионами или старом оборудовании: black hole MTU выглядит как зависший TLS-handshake, хотя маленькая проба ещё была зелёной.

DNS search list может утечь внутренние имена наружу; в тикете фиксируйте фактический FQDN и resolver, чтобы аудит не гадал.

6. Пять повторяемых drill

Drill один: tar домашнего дерева и фрагментов до правок JSON, checksum в тикете.

Drill два: gateway probe от того же пользователя, что и сервис, чтобы поймать разницу PATH.

Drill три: исходящий TLS curl -v к чат-провайдеру, фиксировать время рукопожатия.

Drill четыре: пары правил ufw с UTC и однострочным откатом.

Drill пять: после минорного bump снова синтетическое сообщение, скриншоты редактировать, сырые логи хранить отдельно.

Вместе они сокращают время, чтобы понять: вендор модели или ваш периметр.

Перед параллельными тестами каналов проверьте ulimit -n у сервисного пользователя: низкие лимиты PAM дают «too many open files», похожие на сетевую нестабильность.

При ограничении памяти cgroup v2 сопоставляйте OOM ядра с рестартами шлюза, чтобы не винить задержки webhook чат-провайдера.

Планируйте unattended-upgrades вне первой ночи приёмки и фиксируйте перезагрузки ядра — после reboot bind портов может измениться.

В unit systemd задайте LANG/LC_ALL в UTF-8, иначе merge JSON оставит в логах «кракозябры» и усложнит разбор.

Краткоживущие токены не держите world-readable на tmpfs staging; если клали — укажите в тикете время удаления.

Не смешивайте seccomp nginx и Node без сравнения syscall-листов: doctor может остаться зелёным, пока часть healthcheck падает тихо.

7. Границы: split brain, Docker, HOME drift

Официальная лестница в руководстве по gateway probe до смены моделей. systemd HOME drift — после апгрейдов, не для первой приёмки.

Небольшой текстовый файл на хосте с командами зондов, exit-кодами и инициалами экономит день раскопок сети при rebuild.

Перенесите его в идемпотентные задачи Ansible/Terraform, чтобы rebuild наследовал лестницу.

Доказательства: первая страница вывода каждого зонда, абсолютный путь Node для systemd и интерактива, вырезки flow-логов SYN/RST если доступны.

ProxyJump может сделать локальные проверки зелёными при ошибочной SG; явно перечислите IPv4-only провайдеров чата.

DR с холодного снимка, квартальный исходящий sweep после ротации сертификатов, зелёный gateway плюс синтетический fetch к объектному хранилищу, корреляция fail2ban с диапазонами CI-раннеров.

В Ansible become_user не равен login-shell, который вы проверяли по SSH; не меняйте ansible_user и become_user молча без повторной лестницы.

Terraform ignore_changes на файрволах может скрыть дрейф: каждое исключение сопровождайте ID тикета.

Для постмортемов заведите канал только с хронологией команд без оффтопа — так руководству проще читать цепочку доказательств.

Пин Node из стороннего репозитория сопровождайте указанием источника (Nodesource, дистрибутив, asdf), иначе в PATH останутся два бинарника с разными OpenSSL.

Сетевые модули ядра (BBR, fq) включайте в тот же change-set, что и порты шлюза, иначе откат окажется наполовину в ядре, наполовину в userspace.

8. FAQ

В Установщик ок, probe красный? О Сначала listener, ufw, DNS/egress, облачные правила, потом модели.

В Сразу systemd-сервис? О Сначала шлюз в foreground для приёмки, затем daemon со снапшотами.

В Ротация API-ключей? О Прогнать лестницу целиком ещё раз; вчерашний зелёный не гарантирует завтра.

В Зонды зелёные, а пользователи жалуются на задержки? О Снимите steal time гипервизора, проверьте burst-credits тарифа VPS и сравните гистограммы задержек API чата с round-trip шлюза, чтобы не спрятать ни ядро, ни провайдера.

Если на одном хосте крутятся агенты мониторинга с агрессивным polling, временно отключите их в тестовом окне и снова прогоните лестницу — иногда именно они заполняют conntrack или исчерпывают локальные порты.

Для смешанного стека контейнеров и systemd на одной машине явно запретите двум командам слушать один порт через разные сетевые namespace, иначе половина зондов смотрит в docker0, половина в host.

В Нужно ли хранить сырой трафик pcap? О Только кратко и с согласия безопасности; чаще достаточно flow-логов и вырезок curl -v, чтобы не раздувать хранилище тикетов.

В Можно ли автоматизировать всю лестницу в CI? О Да, но оставьте ручной прогон при смене региона или провайдера DNS — автоматизация скрывает контекст маршрутизации, который люди должны увидеть хотя бы раз.

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

9. Вывод и вариант Remote Mac

Упорядоченная приёмка снижает выгорание выходных на headless Linux и показывает слой отказа.

Самостоятельный VPS остаётся мощным, но требует постоянного внимания к ядру, дистрибутиву и политике.

Перед продом сравните JSON-вывод openclaw doctor с человекочитаемым, чтобы CI и инженеры видели одинаковые блокеры; приложите оба варианта в один тикет.

Секреты webhook крутите как пароли БД: двойная запись, план отката. Цветом помечайте dev/stage/prod в тикетах, чтобы diff файрвола не попал не в тот VPC.

Если always-on шлюзы и пути ближе к Apple важнее каждого ручного винта в ядре, сравните часы инженеров с тарифами SFTPMAC Remote Mac и заложите повторяющиеся обзоры файрвола в календарь на квартал вперёд, включая окно после обновлений ядра, смены DNS и любых правок маршрутизации для всех окружений.