OpenClaw уже стоит, но Gateway нельзя вешать на публичный интерфейс — на Ubuntu 24.04 VPS обычно упираются в выбор адреса прослушивания, предсказуемые перезапуски через systemd и схему Cloudflare Tunnel (или аналог), когда наружу уходит только loopback за контролируемым хостнеймом. Текст дополняет гайды по Docker в проде и мультиплатформенной установке трактом bare metal + systemd + туннель: базовая среда, параметры Gateway, пример unit-файла, ingress и разбор по симптомам, плюс типичная топология со стабильным удалённым Mac как исполнительным слоем.
Мультиплатформенный гайд закрывает «как запустить». Docker-продакшен — для команд со стандартом на контейнеры и доставку через Compose/оркестратор. Здесь — bare-metal Ubuntu 24.04, минимум прослоек, systemd для восстановления после падений и автозапуска, Cloudflare Tunnel или свой reverse proxy, чтобы TLS и ACL жили вне процесса Node. Подходы не взаимоисключающие: сначала стабилизируете железо, потом при желании упаковываете в образ.
Шесть пунктов ниже — типичные ошибки модели системы из тикетов. Без них чеклисты дальше бесполезны.
«curl сработал» = «безопасно в проде»: bind на 0.0.0.0 без фронт-прокси перекладывает auth и TLS на дефолты приложения; дрейф конфига открывает сканирование извне.
Игнор связки Node и glibc: старые пребилды и неверный NODE_OPTIONS на 24.04 дают ложный сценарий «локально ок, под systemd не поднимается».
Случайные права и /root: после апгрейда или logrotate процесс не читает конфиг — systemd уходит в плотный рестарт, журнал зашумлён.
Health только по PID: без HTTP-ready и проверки доступности control plane модели балансировщик шлёт трафик, туннель отдаёт 502 — вы копаете не тот слой.
Туннель жив, ingress не тот порт: расхождение cloudflared и реального listen-сокета Gateway — DNS есть, loopback не совпадает.
Linux-шлюз как универсальный воркер: Xcode, симуляторы и специфика Apple Silicon на VPS выглядят как «OpenClaw падает», хотя проблема в топологии планировщика задач.
Если схема «loopback + туннель» вам подходит, переходите к базовой среде и командам ниже.
Смотрите не только на скорость установки: в одну строку — поверхность атаки, наблюдаемость, откат. Таблица для ревью; порты и теги образов подставьте свои.
| Измерение | Gateway на публичном интерфейсе | Docker / Compose | systemd + loopback + Tunnel |
|---|---|---|---|
| Экспозиция | Максимум; TLS и FW в приложении | Зависит от publish и сетевого режима; host-сеть опасна | Процесс только 127.0.0.1; снаружи туннель/edge |
| Сертификаты | Свой ACME или ручная ротация | Часто Traefik / Caddy / облачный LB | TLS на edge Cloudflare (или аналог) |
| Рестарт и отладка | Внешние супервизоры или руками | Политики restart и логи проектировать отдельно | systemd + journal читаемы последовательно |
| Кому подходит | Минимальный PoC, не прод | Команды с контейнерной дисциплиной | Один VPS, скриптовая воспроизводимость |
Вопрос не «доступен ли хост», а «кто и по какому пути авторизован». Сужение listen до loopback переносит политику на edge, где TLS и ACL управляются предсказуемее.
На Ubuntu 24.04 LTS ориентируйтесь на текущую LTS-мажорную ветку Node.js (в начале 2026 чаще 22.x; ориентир — nodejs.org). nvm, fnm или NodeSource; в проде фиксируйте minor и фиксируйте окна обновлений. Пакетный node из дистрибутива обычно слишком старый как единственный источник.
Базовый фаервол: SSH только по ключу, ufw default deny incoming, не открывайте публично порт сервиса Gateway — снаружи только туннель. Для отладки — временный allowlist или jump host, срок отзыва в changelog.
Отдельный пользователь и каталоги: например пользователь openclaw, состояние в /var/lib/openclaw, конфиг /etc/openclaw (640/750), не смешивать с root.
Зафиксированный Node и lockfile: храните package-lock.json или pnpm-lock.yaml; в проде npm ci или эквивалент — без случайного major.
glibc и нативные модули: чистая установка и смоук на целевой машине, чтобы исключить ошибки dlopen.
Часовой пояс: timedatectl в UTC или командный стандарт — корреляция с логами туннеля и edge.
ufw: ufw allow OpenSSH, затем ufw enable; сервисные порты закрыты; ss -tlnp — снаружи Gateway не слушает.
Health-endpoint: до включения туннеля зафиксируйте в runbook curl -fsS http://127.0.0.1:PORT/health (путь по конфигу), согласуйте с ExecStartPost или внешним пробником.
Заметка: CLI и имена конфигов OpenClaw — по upstream-документации; пути и порты в unit и YAML — заглушки, подставьте свои перед enable.
Listen: в проде — 127.0.0.1:PORT; при поддержке можно добавить Unix socket. Секреты: через environment file, не в world-readable конфиге; ротация: новый токен, rolling restart, удалить старый. Health: минимум PID + HTTP-ready или доступность control plane модели — иначе туннель лишь скажет «нет ответа», а не «не тот слой стека».
[Unit] Description=OpenClaw Gateway (loopback) After=network-online.target Wants=network-online.target [Service] User=openclaw Group=openclaw WorkingDirectory=/var/lib/openclaw EnvironmentFile=-/etc/openclaw/gateway.env # ExecStart замените на фактическую команду из документации ExecStart=/usr/bin/node /opt/openclaw/gateway.mjs --config /etc/openclaw/gateway.yaml Restart=on-failure RestartSec=5 LimitNOFILE=1048576 # Логи: предпочтительно journal; для файлов — logrotate и права StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
Порядок: systemctl daemon-reload → systemctl enable --now openclaw-gateway → systemctl status до стабильности → локальный curl health → затем cloudflared.
tunnel: <YOUR_TUNNEL_ID>
credentials-file: /etc/cloudflared/<YOUR_TUNNEL_ID>.json
ingress:
- hostname: claw.example.com
service: http://127.0.0.1:8787
- service: http_status:404
Внимание: JSON с учётными данными туннеля — только root или выделенный пользователь; не вшивать в слои образа и публичные логи CI. С Nginx/Caddy вместо Cloudflare сохраняйте ту же схему: TLS на edge, upstream только loopback.
Порядок просмотра логов: ① journalctl -u openclaw-gateway -b --no-pager (циклы рестартов, env); ② каталог логов приложения; ③ journalctl -u cloudflared; ④ curl -v локально и снаружи — процесс vs маршрутизация.
Порты: при EADDRINUSE — ss -tlnp, исключить зомби; сменили порт — обновить ingress и внутренние пробы. Права: EACCES — owner/group конфигов и ключей; User в systemd должен читать. Туннель: 502 снаружи, curl на loopback ок — ingress, связь с Cloudflare, DNS-зона. Модели: таймауты/401 — baseline API вендора с сервера (секреты не в history), блокировка egress-IP или протухший токен.
Типичное разделение: Linux VPS — публичный Gateway, очередь, лёгкая оркестрация планировщика; удалённый Mac на Apple Silicon — сборки Xcode, симуляторы, цепочка инструментов только под macOS (включая вызовы Metal и нативного компилятора без эмуляции слоя Linux). Тяжёлые задачи уходят на Mac — политика «без публичного bind на Gateway» сохраняется, планировщик не тащит на VPS то, что требует фреймворков macOS. Связка через SSH, очередь или приватный туннель. Изолируйте отказ: падение шлюза не должно уничтожать кэш сборок на Mac; окно обслуживания Mac не должно глушить весь API-вход.
127.0.0.1 и один порт — меньше риска случайного bind на все интерфейсы в dual-stack.Restart=on-failure и RestartSec=5 для читаемых логов; при необходимости StartLimitIntervalSec.http://127.0.0.1:PORT, не localhost, чтобы избежать ::1 при IPv4-only bind.Один VPS Linux + туннель хорош для control plane и агрегации API, но iOS CI/CD, симуляторы, Metal и цепочка Xcode упираются в архитектурный потолок: либо компромиссы headless-remote, либо постоянные затраты на образы. Вынести тяжёлую работу на выделенный удалённый Mac с предсказуемыми окнами обслуживания, оставив на шлюзе привычные systemd и туннель, сужает зону поражения. Для долгоживущих агентов и пайплайнов аренда Mac mini в облаке NodeMini чаще оптимальнее: control plane остаётся на вашем VPS, исполнение — на железе и сроках аренды, выровненных под экосистему Apple.
В продакшене настоятельно рекомендуется только loopback; TLS и политику доступа отдаём туннелю или reverse proxy. Публичный порт — allowlist, лимиты и аудит; обычно сложнее туннеля. Другие материалы — в колонке OpenClaw.
На сервере curl к loopback; затем ingress и учётные данные туннеля; потом upstream и DNS. Перед заказом исполнительных узлов см. цены аренды по сроку и региону.
SSH, VNC и типичные сбои — в справочном центре; список постов — на главной блога.