2026 OpenClaw Docker Compose: производственная база mem_limit, healthcheck, политика restart и ротация json-file (VPS 24/7)

mem_limit · healthcheck и start_period · backoff restart · ротация json-file и проверка диска

2026 OpenClaw Docker Compose производственная база

Команды, которые держат OpenClaw на VPS 24/7, часто упираются в три класса сбоев: слишком короткий healthcheck убивает холодный старт Gateway, mem_limit ниже пиков WASM даёт exit 137, а стандартные логи json-file заполняют корень. Здесь — минимальный набор отличий между dev и prod compose, шестишаговая воспроизводимая база и условия, когда дрожь перезапусков требует ручной остановки, со ссылками на статью про Exit 137 и allowedOrigins и материал про фиксацию образа и откат.

01

Почему compose, который работал на ноутбуке, к третьей неделе начинает вредить сам себе

В разработке часто снимают лимиты памяти, укорачивают окно health и пишут лог в консоль. В безлюдной эксплуатации это складывается в бурю перезапусков: unhealthy до того, как Gateway слушает порт, restart: always каждые секунды, а файлы логов съедают inode или квоту быстрее, чем помогает backoff.

У OpenClaw первая сборка и загрузка модели поднимают RSS. Если mem_limit держать по среднему стабильной фазы, ночью сработает OOM killer. Каждый параметр должен маппиться на поле docker inspect или метрику хоста в тикете.

  1. 01

    Слишком короткий start_period: пробы падают до 18789, панель показывает бесконечные рестарты.

  2. 02

    mem_limit и пики: первый WASM или установка зависимостей выходит за cgroup, код 137 и мало прикладных логов.

  3. 03

    Безлимитный json-file: колбэки и отладка забивают корень в горячие дни проверки PR.

  4. 04

    Restart без backoff: ошибка конфигурации и ложный unhealthy вместе голодают CPU и IO.

  5. 05

    Dev bind mounts в prod: горячая перезагрузка и слабые права расширяют поверхность секретов.

02

Dev compose и prod compose: минимальная таблица различий по ресурсам и логам

База — два override в одном репозитории: docker-compose.yml с общими сервисами и docker-compose.prod.yml только с прод-отличиями, чтобы не разъезжал копипаст.

ИзмерениеДев по умолчаниюПрод база
ПамятьБез лимита или только хостЯвный mem_limit с запасом на холод; сверка со статьёй Exit 137
HealthcheckКороткий interval, нет start_periodstart_period закрывает холод; retries и timeout под язык SLA
Restartunless-stopped или нетon-failure или ограниченный always плюс алерты на хосте
Драйвер логовДефолт json-filemax-size + max-file; без ручного truncate
Тома и секретыБинд исходниковКонфиг только для чтения; секреты из env_file или Docker secret, не в слоях образа

Каждая прод-строка должна иметь панель в Grafana или поле в тикете, иначе это список желаний.

03

Шестишаговая база: от калибровки mem_limit до проб, совпадающих с готовностью Gateway

Шаги предполагают образы по гайду фиксации; при :latest сначала полный холод на staging, потом прод override.

  1. 01

    Снять пики: на staging docker stats --no-stream и ps в контейнере, RSS десять минут вокруг первого Ready.

  2. 02

    Записать mem_limit: пик умножить на согласованный коэффициент; политику swap на хосте задокументировать.

  3. 03

    Определить readiness: HTTP или CMD на той же loopback, что и Gateway.

  4. 04

    Поставить start_period: покрыть первую установку зависимостей и компиляцию WASM; ориентир — p95 холода, не среднее.

  5. 05

    Сжать json-file: блок logging на сервис с max-size и max-file; алерт на скорость роста каталога логов.

  6. 06

    Прогнать рестарты: один провальный проб, проверить интервалы, backoff и пейджинг по runbook.

yaml
services:
  openclaw:
    mem_limit: "2g"
    logging:
      driver: json-file
      options:
        max-size: "20m"
        max-file: "5"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:18789/health"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 180s
    restart: on-failure:5

Заметка: пути health должны совпадать с образом; если только TCP, CMD-SHELL с nc, но зафиксировать больший риск ложных срабатываний, чем у HTTP.

04

Дрожь restart и json-file: когда нужно глушить автоматику

Если docker events за пять минут перескакивает порог runbook, сначала подозревать ошибку конфигурации и ложный unhealthy, а не только нехватку RAM. Слепые рестарты усиливают запись логов.

Если корень только для чтения, снять трафик или остановить reverse proxy, затем освобождать место по порядку из статьи Exit 137; без проверки диска не форсить compose up -d поверх данных.

Внимание: меньший max-file быстрее убирает горячие логи; длинная ретенция — в объектное хранилище или лог-хост, а не бесконечное раздувание одного файла.

  1. A

    Заморозить релизы: закрыть вход пайплайна при шторме выше порога.

  2. B

    Снять срез: фрагменты Health и OOM из inspect плюс последние двести строк логов.

  3. C

    Откатить compose: вернуть предыдущий override и сохранить пакет воспроизведения для разбора.

05

Опорные параметры и стартовые точки обзора ёмкости

Ниже — старт для устава и дежурств; замените реальными гистограммами холода и кривой роста диска. Не продавайте это как SLA клиенту без измерений.

Если на том же VPS есть reverse proxy или небольшая БД, mem_limit и IO логов конкурируют с соседями; ревью должно требовать RSS контейнера, свободную память хоста и задержку записи на одном дашборде.

  • Нижняя граница start_period: минимум p95 полного холода; сужать после двух стабильных недель с окном отката.
  • Скорость роста json-file: если сервис в день превышает долю дискового бюджета — делить уровни логов или централизовать.
  • Порог частоты рестартов: записать «больше N за пятнадцать минут» в алерты и условия эскалации человеком.
Форма хостаСтарт логированияСвязь с пинами образа
2 vCPU / 4 ГБМеньше max-size, короче хранение, агрессивнее выгрузкаDigest-pin против сюрпризного роста холода
4 vCPU / 8 ГБmax-file можно чуть ослабить, ротация обязательнаstaging и prod с разными тегами, один digest на проверку
Смешанная нагрузкаОтдельный диск данных или том логов вне партиции БДОкна обновления как в статье про пин

OpenClaw на маленьком одноразовом VPS одновременно недофинансирует память, диск и ротацию секретов; свой bare metal меняет это на риск питания и линии.

Командам, которым нужны контрактная вычислительная мощность, выбор региона и проверяемая полоса, при этом Gateway и каналы должны оставаться наблюдаемыми 24/7, часто лучше подходят арендованные облачные Mac mini; облачная аренда Mac mini VpsMesh позволяет принять baseline Compose, обратный прокси и резервные копии в одной истории ёмкости.

FAQ

Частые вопросы

Проверьте пользователя и PATH пробы и start_period на холод; сверьте loopback с статьёй про allowedOrigins и reverse proxy.

Сначала dmesg хоста и код выхода, затем повторная выборка пиков и лимит; подробности в статье Exit 137. Тарифы на странице цен.

Горячее локальное окно короче; длинная ретенция — в центральное хранилище. Политики в справочном центре.