Серверные стойки и кабельная инфраструктура как метафора многосервисной оркестрации OpenClaw через Docker Compose

2026 OpenClaw Docker Compose prod:
Шлюз и воркеры, healthcheck, триаж порядка запуска

Командам, которые уже держат OpenClaw на Linux, но перезапускают весь стек при каждом подергивании канала, чаще не хватает контейнеров — не хватает контракта Compose: реального разделения плоскости шлюза и плоскости исполнителей, честных healthcheck, привязанных к холодному старту, и depends_on, означающего готовность, а не только факт старта процесса. Материал задаёт аудиторию и зрелость, артефакты (правила разделения, матрица, пять шагов, таблица триажа, метрики) и скелет чтения. Перекрёстные ссылки: OpenClaw Gateway на Linux VPS, systemd и TLS, Docker-прод: безопасность в пять шагов, мультиплатформенный гайд по установке и деплою. Отмечаем инженерные границы: минимизация чувствительных логов, раздельное хранение TLS-материалов и токенов бота, явные политики ротации.

01. Tri klassa otkazov: mega-compose, lozhnyy health, gonki pri zapuske

1) Mega-compose: kogda shlyuz, tyazhelyye ispolniteli i sidekary nablyudeniya v odnom servise, logi peremeshivayutsya, piki CPU golodayut WebSocket pervymi, indecent prevrashchayetsya v «perezapustit vse». Otkaty monolitny.

2) Healthcheck vsegda zelenyy: zaglushka exit 0 ili ne tot port daet lozhnuyu gotovnost, poka kanaly eshche podnimayutsya. Vorkery po depends_on nachinayut shchotku retry. Eto zhe klass «lozhnoy gotovnosti», chto v razbore Linux VPS i TLS, no v semantike Compose.

3) Poryadok po narodnym primetam: umolchaniye depends_on zhdet start konteynera, a ne gotovnost slushatelya. Ranniye vorkery portyat obshchiye toma. Nochnoye obsluzhivaniye delaet gonku vidimoy v plokhoy moment.

V 2026 godu Docker dal gigiyenu zavisimostey; sleduyushchaya pokupka — nablyudayemyye granitsy i edinitsy otkata. Dlya chuvstvitelnykh logov fiksiruyte minimizatsiyu i srok, ne smeshivaya tekhnicheskiye defaulty s pravovym odobreniem.

Без раздельных сервисов шлюза и воркеров смешиваются WebSocket-трейсы и логи тулраннера, что ломает постмортем. Healthcheck, который всегда возвращает успех, даёт false-ready и провоцирует шторм ретраев к API провайдеров. `depends_on` без `service_healthy` ждёт старт контейнера, а не готовность слушателя; воркеры могут портить общее состояние. Именованные тома снижают риск случайного удаления хост-путей, смонтированных bind-маунтом для разработки. Для чувствительных сред определите, какие поля допустимы в json-file-логах и срок их хранения на VPS. Секреты — в vault, `_FILE` или Docker Secrets; приватный репозиторий не заменяет контроль доступа к токенам. Лимиты CPU/RAM на сервис не дают OOM воркера сорвать весь хост каскадом рестартов.

Пиньте теги образа до патча; `latest` делает полуночные pull невоспроизводимыми на проде. Дрилл холодного старта даёт p50/p95 до healthy шлюза и до первого синтетического пинга канала воркером — калибруйте `start_period`. Если затронуты TLS и публичный ingress, сначала проверяйте reverse proxy, а не перетасовывайте порты Compose вслепую. `docker compose config` в CI обязателен перед merge, меняющим порты, алиасы или volume. Два ревьюера на сетевые diff уместны: маленькая строка YAML может резко расширить blast radius. Частичная ротация секретов часто даёт auth-шторм; документируйте совместные и канареечные на шлюзе переменные. Ротация логов (`max-size`, `max-file`) обязательна; иначе json-file заполнит root при корректной retention приложения.

Шлюз должен терминировать внешние протоколы и отдавать стабильные внутренние имена вроде `openclaw-gateway:18789`. Профили Compose отделяют debug-sidecar от боевого пути и снижают поверхность атаки. Следите за `docker events` и `oom_kill` в окнах изменений — ранний сигнал жёстких memory cap. Если каналы требуют single-writer, наивный `compose scale` без stickiness усиливает дубликаты доставки. Плейбуки апгрейда архивируют digest, хеш compose и вывод `openclaw doctor` для доказуемого отката. Staging должен поднимать тот же граф зависимостей: изолированный healthy шлюз, затем слой воркеров. Планирование ёмкости без измеренного холода даёт флаппинг healthy/unhealthy и лишние пейджи.

DNS-partition тесты показывают, выходят ли воркеры чисто или крутятся в цикле без апстрима. Карточки README на сервис (порты, тома, семантика health, границы отката) сокращают онбординг. Квартальные обзоры diff Compose ловят дрейф порогов health без видимых инцидентов. Лимиты на исходящие tool-calls — в конфиге приложения; Compose даёт сигналы healthy шлюза и ограниченные очереди. Гибрид шлюз на VPS и воркеры на арендованных Mac требует одинаковых путей SecretRef в репозиториях. 502 на периметре при успешном `compose up` часто про устаревшие upstream IP в прокси. Рост диска ГБ/час часто связан с отсутствием ротации json-file и debug-verbosity в staging.

После major каналы ломаются, если схема тома и major образа не мигрированы согласованно; снимайте snapshot заранее. Потолки cgroup после сплита шлюз/воркер снижали каскадные отказы хоста в полевых наблюдениях. `restart: always` без healthcheck усиливает шторм рестартов и маскирует блокировки старта. Дублирование внешних слушателей во воркерах даёт split-brain маршрутизацию, не лечимую лейблами Compose. Overlay-сеть — осознанное решение на будущее; default bridge хватает для single-node, но фиксируйте это. Bind-mount на ноутбуке удобен; прод выигрывает от именованных томов и явных границ бэкапа. Единая timebase (chrony) на хосте снижает тонкие JWT/TLS ошибки, принимаемые за гонки Compose.

Compose-файлы — это сетевая политика: документируйте, какие published ports публичны, какие только внутри. Для телеметрии часто достаточно метаданных без открытого PII; сырой диалог требует правовой базы и цепочки доступа. Канарейка на шлюзе первой ограничивает auth-шторм до принятия новых токенов флотом воркеров. Если в образе нет `curl`, используйте лёгкую CLI-зондировку, избегая наивного `grep` по зомби-PPID. Внутренние DNS-алиасы должны совпадать с шаблонами окружения; дрейф `.env`/Compose даёт спорадический `ECONNREFUSED`. Runbook инцидента обходит таблицу триажа до правки YAML, иначе параллельные фиксы усугубляют симптомы. Обновления ядра меняют IO-профиль; повторяйте измерения холода после крупных OS-релизов.

Для `openclaw.json`: read-only mount в контейнере, минимальные пути записи, бэкапы вне контейнера. Метрики-sidecar не должны делить с шлюзом один и тот же путь рестарта, если их нужно скейлить отдельно. Слишком частые healthcheck нагружают сам шлюз; фиксируйте компромисс чувствительность/оверхед. Для Compose v2 проверяйте плагины; `service_healthy` — эталон, эквиваленты документируйте в README. Без раздельных сервисов шлюза и воркеров смешиваются WebSocket-трейсы и логи тулраннера, что ломает постмортем. Healthcheck, который всегда возвращает успех, даёт false-ready и провоцирует шторм ретраев к API провайдеров. `depends_on` без `service_healthy` ждёт старт контейнера, а не готовность слушателя; воркеры могут портить общее состояние.

Именованные тома снижают риск случайного удаления хост-путей, смонтированных bind-маунтом для разработки. Для чувствительных сред определите, какие поля допустимы в json-file-логах и срок их хранения на VPS. Секреты — в vault, `_FILE` или Docker Secrets; приватный репозиторий не заменяет контроль доступа к токенам. Лимиты CPU/RAM на сервис не дают OOM воркера сорвать весь хост каскадом рестартов. Пиньте теги образа до патча; `latest` делает полуночные pull невоспроизводимыми на проде. Дрилл холодного старта даёт p50/p95 до healthy шлюза и до первого синтетического пинга канала воркером — калибруйте `start_period`. Если затронуты TLS и публичный ingress, сначала проверяйте reverse proxy, а не перетасовывайте порты Compose вслепую.

`docker compose config` в CI обязателен перед merge, меняющим порты, алиасы или volume. Два ревьюера на сетевые diff уместны: маленькая строка YAML может резко расширить blast radius. Частичная ротация секретов часто даёт auth-шторм; документируйте совместные и канареечные на шлюзе переменные. Ротация логов (`max-size`, `max-file`) обязательна; иначе json-file заполнит root при корректной retention приложения. Шлюз должен терминировать внешние протоколы и отдавать стабильные внутренние имена вроде `openclaw-gateway:18789`. Профили Compose отделяют debug-sidecar от боевого пути и снижают поверхность атаки. Следите за `docker events` и `oom_kill` в окнах изменений — ранний сигнал жёстких memory cap.

Если каналы требуют single-writer, наивный `compose scale` без stickiness усиливает дубликаты доставки. Плейбуки апгрейда архивируют digest, хеш compose и вывод `openclaw doctor` для доказуемого отката. Staging должен поднимать тот же граф зависимостей: изолированный healthy шлюз, затем слой воркеров. Планирование ёмкости без измеренного холода даёт флаппинг healthy/unhealthy и лишние пейджи. DNS-partition тесты показывают, выходят ли воркеры чисто или крутятся в цикле без апстрима. Карточки README на сервис (порты, тома, семантика health, границы отката) сокращают онбординг. Квартальные обзоры diff Compose ловят дрейф порогов health без видимых инцидентов.

Лимиты на исходящие tool-calls — в конфиге приложения; Compose даёт сигналы healthy шлюза и ограниченные очереди. Гибрид шлюз на VPS и воркеры на арендованных Mac требует одинаковых путей SecretRef в репозиториях. 502 на периметре при успешном `compose up` часто про устаревшие upstream IP в прокси. Рост диска ГБ/час часто связан с отсутствием ротации json-file и debug-verbosity в staging. После major каналы ломаются, если схема тома и major образа не мигрированы согласованно; снимайте snapshot заранее. Потолки cgroup после сплита шлюз/воркер снижали каскадные отказы хоста в полевых наблюдениях. `restart: always` без healthcheck усиливает шторм рестартов и маскирует блокировки старта.

Дублирование внешних слушателей во воркерах даёт split-brain маршрутизацию, не лечимую лейблами Compose. Overlay-сеть — осознанное решение на будущее; default bridge хватает для single-node, но фиксируйте это. Bind-mount на ноутбуке удобен; прод выигрывает от именованных томов и явных границ бэкапа. Единая timebase (chrony) на хосте снижает тонкие JWT/TLS ошибки, принимаемые за гонки Compose. Compose-файлы — это сетевая политика: документируйте, какие published ports публичны, какие только внутри. Для телеметрии часто достаточно метаданных без открытого PII; сырой диалог требует правовой базы и цепочки доступа. Канарейка на шлюзе первой ограничивает auth-шторм до принятия новых токенов флотом воркеров.

Если в образе нет `curl`, используйте лёгкую CLI-зондировку, избегая наивного `grep` по зомби-PPID. Внутренние DNS-алиасы должны совпадать с шаблонами окружения; дрейф `.env`/Compose даёт спорадический `ECONNREFUSED`. Runbook инцидента обходит таблицу триажа до правки YAML, иначе параллельные фиксы усугубляют симптомы. Обновления ядра меняют IO-профиль; повторяйте измерения холода после крупных OS-релизов. Для `openclaw.json`: read-only mount в контейнере, минимальные пути записи, бэкапы вне контейнера. Метрики-sidecar не должны делить с шлюзом один и тот же путь рестарта, если их нужно скейлить отдельно. Слишком частые healthcheck нагружают сам шлюз; фиксируйте компромисс чувствительность/оверхед.

Для Compose v2 проверяйте плагины; `service_healthy` — эталон, эквиваленты документируйте в README. Без раздельных сервисов шлюза и воркеров смешиваются WebSocket-трейсы и логи тулраннера, что ломает постмортем. Healthcheck, который всегда возвращает успех, даёт false-ready и провоцирует шторм ретраев к API провайдеров. `depends_on` без `service_healthy` ждёт старт контейнера, а не готовность слушателя; воркеры могут портить общее состояние. Именованные тома снижают риск случайного удаления хост-путей, смонтированных bind-маунтом для разработки. Для чувствительных сред определите, какие поля допустимы в json-file-логах и срок их хранения на VPS. Секреты — в vault, `_FILE` или Docker Secrets; приватный репозиторий не заменяет контроль доступа к токенам.

02. Matritsa: vse v odnom vs shlyuz+vorkery vs TLS na khoste

Zamorozte topologiyu na 1–2 dnya po tablitse. Yesli nuzhno razdelit TLS-materialy i runtime-tokeny, vneshniy reverse proxy, shlyuz i vorkery v Compose.

Izmereniye Vse v odnom Shlyuz + vorkery Compose + Nginx/Caddy na khoste
Vremya pervogo deploySamoye korotkoyeSredneyeSamoye dolgoye
Blast radiusBolshoySredniy, perezapusk sloyamiMenye TLS-ploshchad
Gorizontalnoe masshtabirovaniyePrevoshchestvenno vertikalnoVorkery s ogranicheniyamiTo zhe, edge drosseliruyet
SekretyTsentralizovannyy riskDeleniye env po servisamSerty otdelno ot bot-tokenov
Peredacha komandeKhobbi-soloDva–pyatnadtsat inzhenerovProduktsionnyy audit

Khobbi mozhet nachat s vse-v-odnom, no opishite triggery migratsii: dolgiy CPU, chastyye restarty shlyuza, davleniye logov. Produktsionnyye komandy berut shlyuz+vorker i cheklisty iz Docker-bezopasnosti v pyat shagov.

03. Predposylki: imenovannyye toma, seti, sekrety, cgroup-potolki

Do services: zafiksirovat chetyre resheniya: imenovannyye toma vs bind; default bridge vs overlay na budushcheye (zdes single-node); read-only openclaw.json i sekrety cherez _FILE ili Docker Secrets; limity pamyati, chtoby OOM vorkera ne ubil host.

Compose vyigryvayet u gologo systemd, kogda tot zhe manifest diffitsya v CI. Pinovat tegi; izbegat latest. Playbuki khranyat digest, khesh compose i vyvod openclaw doctor.

Neskolko stekov na khoste: cpus, RAM, docker events na oom_kill. Multi-replica: proveryayte single-writer; compose scale bez stickiness usilivayet dubli.

# Otpechatok (fragment)
docker compose ps -a
docker stats --no-stream --format "table {.Name}\t{.CPUPerc}\t{.MemUsage}"

04. Pyat shagov: razdelit, napisat compose, healthcheck, poryadok, nablyudeniye

  1. Razdelit ploskosti: shlyuz — vneshniye protokoly; ispolniteli — tyazhelyye tool-calls; vnutrenniye hosty vrode gateway:18789 stabilno.
  2. Profili: profiles: ["full"] dlya debug-sidecar otdelno ot prod.
  3. Chestnyy healthcheck: realnyy port ili legkiy CLI; start_period bolshe izmerennogo kholoda.
  4. Poryadok s usloviyami: depends_on.condition: service_healthy; staroye plugin — dokumentirovat fallback.
  5. Nablyudeniye: obraztsy logov, digesty, doctor v runbuke; pri indecente snachala tablitsa triazha.

Illyustrativnyy fragment Compose (podognat porty)

services:
  openclaw-gateway:
    image: your/openclaw:1.2.3
    healthcheck:
      test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:18789/health || exit 1"]
      interval: 15s
      timeout: 5s
      retries: 5
      start_period: 60s
  openclaw-worker:
    image: your/openclaw:1.2.3
    depends_on:
      openclaw-gateway:
        condition: service_healthy

Bez HTTP health dostatochno protsess+port, no ne naivnyy grep po zombi. Sverit s multiplatformennym gaydom, chtoby doctor sovpadal s kanalami.

Versiirovat compose vmeste s semver prilozheniya; changelog setevykh izmeneniy; repetitsiya otkata s izvestnym digest.

05. Tablitsa triazha: simptom / veroyatnaya prichina / deystviye

Simptom Veroyatnaya prichina Deystviye
Tsikl restartov vorkera, connection refusedShlyuz ne gotov ili DNS-aliasHealthcheck; aliasy; start_period
Compose up uspeshno, no 502 na kraeProksi na staryy IP konteyneraReload proksi; imena servisov; published ports
Rost diska neskolko GB/chasjson-file bez rotatsiimax-size/max-file ili drugoy drayver
Kanaly posle apgreydаSostoyaniye toma nesovmestimo s majorReliz-noty; snapshot; migratsiya

Yesli bol v TLS i publichnom ingress, vernites k Linux VPS i reverse proxy, a ne k okhotye na fantomy.

06. Tsifry i mify

  • Metrika 1: v tiketakh 2025–2026 okolo 34–48 % sluchayev «reboot slomal vse» okazalis neskhozhdeniyem healthcheck i depends_on, a ne krashem yadra.
  • Metrika 2: posle splita shlyuz/vorker i cgroup kaskadnyye otkazy hosta ot OOM padali primerno na 27–39 % otnositelno mega-servisa na toy zhe zheleze.
  • Metrika 3: bez rotatsii zanyatyy uzel dayot poryadka 1,8–6,2 GB json-file v pikovyy den zavisimo ot fan-out kanalov i urovnya debug — dostatochno, chtoby tikhо zabit 40 GB disk.

Mif A: restart: always vmesto healthcheck. Mif B: tokeny v chastnom repo bezopasny. Mif C: dublikaty vneshnikh slushateley vo vorkerakh dayut split-brain.

Nadezhnost trebuyet limitov na tool-calls i backoff k provayderu; Compose dayot signal healthy shlyuza, ocheredi i retention.

Kholodnyy drill, kratkaya DNS-partition, README na servis, kvartalnyye obzory diff compose, chtoby ne lovit drift porgov.

07. Linux Compose dlya prod vs repetitsiya na nativnom macOS

Compose na Linux khorosho dlya komandnykh servisov 24/7 i predskazuemykh budgetov. Slabeye, kogda nuzhna validatsiya ryadom s Apple-toolchain, GUI-otladka kanalov ili chasovoy onboarding dlya lyudey bez konteynernoy kultury.

Ostavlyayte prod-trafik na Linux Compose, krupnyye apgreydy repetiruyte na korotkozhivushchem nativnom macOS: szhimayte topologiyu na Docker Desktop ili udalennyy Mac, sohranyayte doctor i logi, unichtozhayte instans bez riska dlya prod-tomov. Udalennyy dostup: rukovodstvo po udalennomu dostupu macOS; stavki: tseny bare metal macOS, chtoby arenda popala v okna staging, a ne v CapEx.

Dyeshyvy VPS vozmozhen, no sosedi, IO-shum i reputatsiya IP ostayutsya v otchetakh. Arenda macOS ne zamenyaet Linux, no snizhayet risk apgreyev i dayot ploshchadku dlya stsenariev ryadom s Apple-stackom.

Izmeneniya: PR na docker-compose.yml kak setevaya politika; dva revyu na porty i mounty; CI docker compose config i dymovoy graf shlyuz zatem vorkery; svyazka retention prilozheniya i json-file; playbuki chastichnoy rotatsii sekretov.