February 4

Работающий способ запустить OpenClaw в VPS в Docker

На момент написания поста официальный способ запуска OpenClaw в докере у меня не заработал. Было несколько проблем. В том числе — CLI-контейнер не мог подключиться к гейтвею. Получал ошибку [openclaw] CLI failed: Error: gateway closed (1006 abnormal closure (no close frame)): no close reason.

Вот как я запустил OpenClaw на VPS в docker compose.

Подключился к VPS по SSH.

ssh root@<host>

Cклонировал репозиторий.

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.

Настройка телеграм-бота

В телеграм-боте пишем /start.

В ответ получим такое сообщение:

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`

Теперь можно что-нибудь написать телеграм-боту, и агент ответит.