Работающий способ запустить OpenClaw в VPS в Docker
На момент написания поста официальный способ запуска OpenClaw в докере у меня не заработал. Было несколько проблем. В том числе — CLI-контейнер не мог подключиться к гейтвею. Получал ошибку [openclaw] CLI failed: Error: gateway closed (1006 abnormal closure (no close frame)): no close reason.
Вот как я запустил OpenClaw на VPS в docker compose.
ssh root@<host>
git clone https://github.com/openclaw/openclaw.git cd openclaw
Создал директории для конфига и воркспейса, а затем задал владельцем этих директорий пользователя из контейнера.
mkdir -p /root/.openclaw mkdir -p /root/.openclaw/workspace chown -R 1000:1000 /root/.openclaw chown -R 1000:1000 /root/.openclaw/workspace
Создал файл .env в корне репозитория. Содержимое файла:
OPENCLAW_CONFIG_DIR=/root/.openclaw OPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspace OPENCLAW_GATEWAY_PORT=18789 OPENCLAW_BRIDGE_PORT=18790 OPENCLAW_GATEWAY_BIND=lan OPENCLAW_IMAGE=openclaw:local OPENCLAW_EXTRA_MOUNTS= OPENCLAW_HOME_VOLUME= OPENCLAW_DOCKER_APT_PACKAGES=
docker build -t openclaw:local -f Dockerfile .
docker compose run --rm openclaw-cli onboard
Выбрал способ QuickStart. В качестве поставщика LLM я использую OpenRouter. Выбрал модель openrouter/anthropic/claude-opus-4.5.
Также выбрал Telegram-бот в качестве канала. Ввел API-ключ бота от botfather.
В терминале выведется такой блок:
◇ Dashboard ready │ │ Dashboard link (with token): │ http://127.0.0.1:18789/?token=77c80b65ea4813028b3b96cff1216869de20d49865f2afbe │ Copy/paste this URL in a browser on this machine to control OpenClaw. │ No GUI detected. Open from your computer: │ ssh -N -L 18789:127.0.0.1:18789 user@<host> │ Then open: │ http://localhost:18789/ │ http://localhost:18789/?token=77c80b65ea4813028b3b96cff1216869de20d49865f2afbe │ Docs: │ https://docs.openclaw.ai/gateway/remote │ https://docs.openclaw.ai/web/control-ui
В конце выведется следующая строка, и процесс зависнет на этом.
└ Onboarding complete. Use the tokenized dashboard link above to control OpenClaw.
Завершил процесс нажатием control+C.
docker compose up -d openclaw-gateway
В логах будет написано, что гейтвей слушает порт 18789.
docker compose logs openclaw-gateway
[gateway] listening on ws://0.0.0.0:18789
Я пробросил порт через VS Code, но можно и через ssh.
ssh -N -L 18789:127.0.0.1:18789 user@<host>
Перешел по ссылке из Dashboard link выше.
disconnected (1008): pairing required
Надо апрувнуть свой браузер, чтобы исправить ошибку:
docker compose exec openclaw-gateway node dist/index.js devices list docker compose exec openclaw-gateway node dist/index.js devices approve <requestId>
На странице http://localhost:18789/ в правом верхнем углу будет отображаться Health OK.
Настройка телеграм-бота
В ответ получим такое сообщение:
OpenClaw: access not configured. Your Telegram user id: 223423429 Pairing code: 6Z7P3EM7 Ask the bot owner to approve with: openclaw pairing approve telegram <code>
Надо апрувнуть свой телеграм-бот.
docker compose exec openclaw-gateway node dist/index.js pairing approve telegram 6Z7P3EM7`
Теперь можно что-нибудь написать телеграм-боту, и агент ответит.