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 противоречит консоли.
- Заморозить параллельные установщики и редакторы на одном JSON.
- Архивировать деревья конфигурации до первого merge.
- Напечатать порядок лестницы в шапке тикета.
2. Матрица: какой спутник читать первым
Таблица направляет к нужным статьям SFTPMAC вместо смешивания docker-команд с bare metal.
| Плоскость | Зона ответственности | Первый фокус приёмки | Ссылка |
|---|---|---|---|
| Голый VPS | Ядро, ufw, SG, системный Node | listen, egress, зонды | Эта статья |
| Docker | Дайджест образа, env compose | bridge, WebSocket | Матрица compose |
| WSL2 | systemd в WSL, localhost | проброс портов | Гайд WSL2 |
| Хостинг Remote Mac | SLA, изоляция | базовая линия 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
- Заморозить параллельные правки людей и CI.
- Дампы окружения для login-shell, автomation-shell и будущего сервисного пользователя.
- Проверить Node 22+, при необходимости переустановить из утверждённых зеркал.
- Установщик с ротацией логов.
- Перед JSON-операциями
statusиgateway probe. gateway statusиdoctor, затем сноваstatus.- Править ufw и облачные правила в окне времени с заметкой об откате.
- Зондировать каналы, затем синтетическое сообщение на провайдера с редактированным скриншотом.
Дополняйте 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 — дайджестами и токенами.
| Слой | Сигнал | Критерий успеха |
|---|---|---|
| Listener | ss и облачная UI | Заданный bind и экспозиция |
| RPC | gateway 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 и любых правок маршрутизации для всех окружений.