OpenClaw в Docker и на VPS: контейнерный Gateway, Compose и безопасность

OpenClaw в Docker нужен, когда Gateway должен работать постоянно: на VPS, домашнем сервере, отдельной машине или headless-хосте. Контейнерный запуск не отменяет настройку OpenClaw: нужно пройти onboarding, сохранить token, открыть Control UI, проверить Gateway и закрыть доступ снаружи.

Когда Docker лучше обычной установки

Обычная установка через `openclaw onboard —install-daemon` хороша для личного компьютера. Docker удобнее, когда нужен повторяемый запуск, отдельная среда, перенос на VPS и понятное управление процессом через Docker Compose. Мы получаем один набор файлов, `.env`, volumes, логи контейнеров и предсказуемый рестарт.

  • VPS: Gateway работает без открытого терминала на вашем компьютере.
  • Домашний сервер: OpenClaw живет на отдельной машине, а вы подключаетесь через каналы.
  • Тестовая среда: можно поднять отдельный контейнер и не смешивать его с локальной установкой.
  • Командная эксплуатация: проще описать окружение, секреты и обновления.

Если вы только знакомитесь с OpenClaw, начните с локальной установки и WebChat. Docker добавляйте после того, как уже понимаете Gateway, dashboard, model provider, pairing и basic security.

Требования для Docker-запуска

Официальная Docker-инструкция требует Docker Desktop или Docker Engine, Docker Compose v2, место под images и logs, а также хотя бы 2 GB RAM для сборки. На VPS с 1 GB RAM сборка может упасть с exit 137 из-за нехватки памяти во время `pnpm install`.

ТребованиеПроверкаЧто значит ошибка
Docker`docker version`Engine не установлен или daemon не запущен
Compose v2`docker compose version`Старая установка или нет plugin
RAM`free -h` на Linux1 GB может не хватить для сборки
Disk`df -h`Не хватает места под images, volumes и logs
СетьДоступ к GitHub, npm, API моделиСборка или ответы агента будут падать
docker version
docker compose version
df -h

Базовый запуск из репозитория

Официальный Docker-маршрут начинается из корня репозитория OpenClaw. Скрипт `./scripts/docker/setup.sh` собирает gateway image локально, запускает onboarding, записывает gateway token в `.env` и стартует Gateway через Docker Compose.

git clone https://github.com/openclaw/openclaw.git
cd openclaw
./scripts/docker/setup.sh

Во время onboarding подготовьте ключ провайдера модели. Не вставляйте токены в чужие инструкции и не коммитьте `.env`. В Docker-сценарии `.env` становится критичным файлом: там может лежать shared secret и настройки Gateway.

Prebuilt image из GitHub Container Registry

Если не хотите собирать образ на слабом VPS, можно использовать prebuilt image из GitHub Container Registry. Официальные docs показывают переменную `OPENCLAW_IMAGE`, после чего тот же setup script поднимает окружение с выбранным образом.

export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
./scripts/docker/setup.sh

Для стабильного сервера я бы фиксировал tag, когда это возможно, а не жил вечно на `latest`. Так проще понимать, какая версия работала вчера и что изменилось после обновления.

Открытие Control UI в Docker

После запуска откройте Control UI по локальному адресу. Docker setup пишет token в `.env`, а если конфигурация переведена на password auth, используйте соответствующий пароль. Для повторного вывода ссылки официальная инструкция использует CLI-контейнер.

docker compose run --rm openclaw-cli dashboard --no-open

На локальной машине адрес обычно выглядит как `http://127.0.0.1:18789/`. На VPS нельзя просто открыть порт в интернет и забыть. Dashboard — точка управления ассистентом, поэтому наружу его выпускают только через защищенный канал: SSH tunnel, VPN/tailnet, reverse proxy с TLS и авторизацией или другой контролируемый слой.

Проверка контейнерного Gateway

Проверяйте три уровня: контейнеры запущены, Gateway отвечает, WebChat дает ответ. Если контейнер жив, но agent молчит, смотрите model provider, `.env`, логи и сетевой доступ до API.

docker compose ps
docker compose logs --tail=100 openclaw-gateway
docker compose run --rm openclaw-cli doctor
docker compose run --rm openclaw-cli gateway status

Название service может отличаться в зависимости от compose-файла, поэтому если команда логов не сработала, сначала посмотрите `docker compose ps`. Не меняйте сразу конфиг, пока не ясно, какой контейнер упал и почему.

Подключение каналов в Docker

Каналы в Docker настраиваются через тот же Gateway, но команды запускаются через CLI-контейнер. Для WhatsApp официальный пример использует QR-login, для Telegram — добавление token через channel command в Docker-инструкции или ручную настройку config/env в зависимости от выбранного потока.

# WhatsApp через QR
docker compose run --rm openclaw-cli channels login

# Telegram
docker compose run --rm openclaw-cli channels add --channel telegram --token "<token>"

# Discord
docker compose run --rm openclaw-cli channels add --channel discord --token "<token>"

После подключения канала не открывайте доступ всем. Для Telegram и WhatsApp проверьте `dmPolicy`, `allowFrom`, pairing и group policy. На сервере ошибка в access policy опаснее, чем на локальном ноутбуке: бот доступен постоянно.

VPS: сетевой минимум

VPS добавляет риск открытой сети. Даже если OpenClaw работает идеально локально, неправильный firewall превращает Control UI в публичную панель. Минимальная схема: SSH-доступ по ключу, закрытый порт dashboard, outbound-доступ к API модели, TLS для публичных endpoints, регулярные обновления и отдельный пользователь для сервиса.

  • Не публикуйте `18789` наружу без защитного слоя.
  • Оставьте dashboard на loopback или доступным через SSH tunnel.
  • Храните `.env` с правами только для владельца.
  • Разделяйте production workspace и тестовый workspace.
  • Проверяйте логи перед обновлением и после него.
  • Ограничивайте входящие соединения через firewall или provider security group.
# пример идеи: dashboard доступен только через SSH tunnel
ssh -L 18789:127.0.0.1:18789 user@your-vps

Volumes, .env и резервные копии

Контейнер сам по себе временный. Состояние OpenClaw, credentials, workspace и конфигурацию нужно хранить в volume или bind mount, иначе после пересоздания контейнера вы потеряете настройки. `.env` и credentials нельзя хранить в публичном репозитории.

Практический минимум для backup: compose-файл, `.env` в защищенном хранилище, workspace, credentials и список установленных skills/plugins. Перед восстановлением на другом сервере сначала поднимите Gateway без внешних каналов, проверьте WebChat, затем включайте Telegram или WhatsApp.

Обновление Docker-установки

Обновление зависит от того, собираете ли вы локальный image или используете prebuilt image. Безопасный порядок одинаковый: backup, чтение release notes, остановка, обновление image, старт, `doctor`, проверка Gateway, тест WebChat, тест одного внешнего канала.

  1. Сохранить `.env`, workspace и credentials.
  2. Зафиксировать текущий image tag или commit.
  3. Обновить image или репозиторий.
  4. Перезапустить Compose.
  5. Проверить `doctor`, `gateway status` и dashboard.
  6. Проверить pairing и allowlist для каналов.
docker compose pull
docker compose up -d
docker compose run --rm openclaw-cli doctor

Если вы собираете образ локально, вместо `pull` понадобится rebuild по инструкции проекта. На слабом VPS лучше использовать prebuilt image или временно добавить swap, иначе сборка может упереться в память.

Ошибки Docker-запуска

СимптомПричинаПроверка
Exit 137 при сборкеНе хватает RAM2 GB RAM или prebuilt image
Dashboard не открываетсяПорт не проброшен, Gateway не слушает, token неверный`docker compose ps`, logs, `.env`
Agent не отвечаетНет model API key или сеть заблокирована`doctor`, outbound HTTPS
WhatsApp QR не работаетНет plugin, сессия не сохранилась, контейнер пересоздан без volumePlugin, volume, logs
Telegram отвечает всемСлишком широкая policy`allowFrom`, `groupPolicy`, pairing

Минимальная серверная схема

Для небольшого личного запуска достаточно одного VPS, Docker Compose, закрытого dashboard и одного внешнего канала. Я бы не начинал с Kubernetes, managed database и сложного reverse proxy. Сначала нужен устойчивый Gateway, понятная директория состояния и простая процедура восстановления.

  • Один service user без лишних sudo-прав.
  • Один каталог проекта, где лежат compose-файл, `.env` и backup-инструкция.
  • Один persistent volume для состояния Gateway и channel sessions.
  • Один способ доступа к Control UI: SSH tunnel или tailnet.
  • Один внешний channel для старта, например Telegram.
  • Один тест после перезапуска: dashboard, WebChat, внешний DM.

После недели стабильной работы можно добавлять второй channel, backup automation и отдельный staging workspace. До этого сложность только мешает: когда падает Gateway, нужно быстро понять, это Docker, token, сеть, модель или channel session.

Еще один хороший прием — держать короткий runbook рядом с compose-файлом. В нем достаточно 6 строк: как посмотреть status, как открыть dashboard через tunnel, как прочитать последние logs, где лежит backup, как перевыпустить token и как временно отключить внешний channel. Когда сервер падает ночью, такой runbook экономит больше времени, чем сложная диаграмма.

Runbook стоит проверить руками: остановить контейнер, поднять его заново, открыть dashboard через тот же tunnel и отправить тест в WebChat. Если владелец сервера не может выполнить эти действия без поиска по истории команд, серверный запуск еще не готов к публикации или постоянному использованию.

Источники для сверки

Ответы на эти вопросы могут быть для вас полезными

Можно ли запускать OpenClaw на VPS без Docker?

Можно. Обычная установка через daemon тоже подходит. Docker выбирают ради изоляции, повторяемости и удобного переноса, а не потому что без него OpenClaw не работает.

Нужно ли открывать порт 18789 наружу?

Нет. Для Control UI безопаснее использовать loopback, SSH tunnel, VPN/tailnet или reverse proxy с TLS и авторизацией. Открытый dashboard на VPS — плохая идея.

Что важнее: Docker или настройка доступа?

Настройка доступа. Docker упрощает запуск, но не защищает бота от слишком широкой policy, утекшего token или открытого Control UI.

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x