Чтобы установить OpenClaw на VPS, нужен чистый сервер с Ubuntu 24.04, обычный пользователь (не root) и Node 24.16+ или 26.1+, затем одна команда: curl -fsSL https://openclaw.ai/install.sh | bash, а после неё openclaw onboard --install-daemon, которая сохраняет ключ модели, записывает конфигурацию шлюза и регистрирует сервис systemd. Оставьте шлюз на привязке к loopback по умолчанию (порт 18789), заходите в Control UI через SSH-туннель, подключите Telegram-бота и подтвердите себя как единственного разрешённого отправителя. Весь процесс занимает около 15 минут; Docker остаётся альтернативным путём, если вы предпочитаете контейнеры.
Переписано в сентябре 2026 года по официальной документации и текущему стабильному выпуску v2026.9.4 (11 сентября 2026): основные команды из нашей версии за февраль 2026 не изменились, но требование к Node, процесс обновления, формат списков разрешённых отправителей в Telegram и настройки безопасности по умолчанию ушли вперёд.
Перед началом: ОС, размер сервера, пользователь
OpenClaw работает на macOS, Linux и Windows; на сервере это означает Linux. Мы используем Ubuntu 24.04 LTS, потому что шлюз опирается на пользовательские сервисы systemd, а этот выпуск годами получает обновления безопасности; избегайте минимальных образов без systemd.
Шлюз является лёгким Node-приложением. В наших развёртываниях 2 vCPU и 4 ГБ RAM хватает с запасом одному владельцу, который использует облачную модель (OpenAI, Anthropic или OpenAI-совместимый шлюз вроде avots.ai). Если планируете запускать локальную модель через Ollama на той же машине, размер задаёт модель; смотрите какой сервер нужен для локальной AI-модели. Подойдёт любой план из нашего каталога VPS с Ubuntu 24.04. Подготовьте: доступ по SSH, один API-ключ провайдера и аккаунт Telegram.
Шаг 1: подготовьте Ubuntu 24.04
Один раз войдите как root, обновите систему и создайте пользователя, которому будет принадлежать шлюз. Runbook шлюза говорит прямо: не запускайте шлюз от root.
apt update && apt upgrade -y
adduser openclaw
usermod -aG sudo openclaw
ufw allow OpenSSH
ufw enable
В этом руководстве порт шлюза никогда не открывается в интернет, поэтому SSH остаётся единственным правилом файрвола. Дальше входите как новый пользователь (ssh openclaw@your-server) и оставайтесь под ним.
Node.js
OpenClaw требует Node 24.16+ или 26.1+, а документация рекомендует Node 26. Официальный установщик на Linux сам ставит поддерживаемую линию Node 24 LTS, если Node отсутствует, так что на пути A этот шаг можно пропустить. Если хотите управлять Node самостоятельно, документация для Ubuntu приводит NodeSource:
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
Менеджеры версий (fnm, nvm, mise, asdf) тоже работают, но инициализируйте их в стартовом файле оболочки, иначе в новых сессиях openclaw может не находиться, потому что в PATH нет каталога bin от Node.
Шаг 2: выберите путь установки
Путь A (установщик или npm) кладёт CLI в глобальный префикс npm и запускает шлюз как пользовательский сервис systemd; на одном VPS такой вариант проще всего. Путь B (Docker) запускает ghcr.io/openclaw/openclaw под Docker Compose с состоянием в томе; выбирайте его, если хост уже всё запускает в контейнерах.
Путь A: скрипт установщика или npm
curl -fsSL https://openclaw.ai/install.sh | bash
Скрипт устанавливает CLI глобально и сразу запускает онбординг. Чтобы установить сейчас, а настроить позже, документированная форма выглядит так: curl -fsSL https://openclaw.ai/install.sh | bash -s -- --no-onboard. Эквивалент через npm (npm 12 или 11.16+):
npm install -g openclaw@latest --allow-scripts=openclaw
openclaw onboard --install-daemon
Флаг --allow-scripts=openclaw важен: npm 12 по умолчанию блокирует неодобренные скрипты жизненного цикла пакетов, а флаг разрешает шаги preinstall и postinstall у OpenClaw (на npm 11.15 и старше его опустите). Варианты для pnpm и Bun есть в документации по установке. Прежде чем идти дальше, проверьте openclaw --version и openclaw doctor.
Путь B: Docker
Официальное руководство по Docker начинается "из корня репозитория", не поясняя, как туда попасть, поэтому сначала клонируйте репозиторий:
git clone https://github.com/openclaw/openclaw.git
cd openclaw
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
./scripts/docker/setup.sh
Нужны Docker Engine и Docker Compose v2. Состояние живёт в томе /home/node/.openclaw, а Control UI отвечает на http://127.0.0.1:18789/ с токеном из сгенерированного .env. Тег :latest-browser добавляет Chromium и Playwright. Каналы и диагностика идут через контейнер CLI:
docker compose run --rm openclaw-cli channels add --channel telegram --token "<token>"
docker compose run --rm openclaw-cli doctor --json
Одна оговорка из наших собственных развёртываний: бэкендом песочницы служит Docker, поэтому режиму песочницы "all" внутри контейнеризованного шлюза нужна команда docker внутри этого контейнера. Песочница по умолчанию выключена и не требует, чтобы сам шлюз работал в контейнере, так что для инструментов в песочнице путь A с Docker на хосте проще. Полный справочник: официальное руководство по Docker.
Шаг 3: онбординг и первый ключ провайдера
openclaw onboard --install-daemon объединяет интерактивный мастер и регистрацию сервиса. В локальном режиме он проводит через рабочее пространство, провайдера модели и аутентификацию (API-ключ или OAuth), настройки шлюза (порт, привязка, хранение секретов, необязательный доступ через Tailscale), каналы, необязательный веб-поиск и навыки (skills), демон и проверку здоровья. Конфигурация ложится в ~/.openclaw/openclaw.json; мастер хранит учётные данные провайдера как именованные профили аутентификации, а в наших развёртываниях сами секреты лежат в ~/.openclaw/.env. Документация описывает формат как JSON5 (разрешены комментарии и висячие запятые); мы держим чистый JSON, который принимает любой парсер JSON5. OPENCLAW_STATE_DIR и OPENCLAW_CONFIG_PATH переносят каталог состояния и конфигурацию.
Модель по умолчанию записывается как provider/model в agents.defaults.model.primary; документация провайдеров использует такой пример:
{
"agents": { "defaults": { "model": { "primary": "anthropic/claude-opus-4-6" } } }
}
У OpenAI, Anthropic и Ollama есть по странице в разделе providers. OpenAI-совместимый шлюз (в наших развёртываниях avots.ai) идёт в models.providers, карту пользовательских провайдеров, которая в справочнике по конфигурации индексируется по id провайдера; копируйте имена полей оттуда, а не из старого туториала. Дальнейшие правки идут через openclaw configure, openclaw config set <key> <value> или Control UI.
Шаг 4: запустите шлюз как сервис
На Linux openclaw gateway install (его уже выполнил onboard --install-daemon) создаёт пользовательский сервис systemd. На VPS без графической сессии важны два дополнительных шага из runbook: без lingering ваша пользовательская сессия завершается при выходе, и шлюз останавливается вместе с ней, а без XDG_RUNTIME_DIR пользовательская шина недоступна из обычной SSH-оболочки.
sudo loginctl enable-linger $(whoami)
export XDG_RUNTIME_DIR=/run/user/$(id -u)
systemctl --user enable --now openclaw-gateway.service
openclaw gateway status
Повседневно: openclaw gateway status --deep, openclaw gateway restart, openclaw gateway stop, openclaw logs --follow, openclaw doctor --fix. Задокументирован и общесистемный юнит /etc/systemd/system/openclaw-gateway.service с User=<username> в секции [Service]. Невалидная конфигурация завершается с кодом 78, и юнит после него не перезапускается; запускайте openclaw doctor, а не перезапуск.
Шаг 5: только loopback, SSH-туннель для UI
Шлюз слушает порт 18789 и по умолчанию привязывается к loopback (gateway.bind вне контейнеров разрешается в loopback). Так и оставьте. OpenClaw по своей природе является удалённым выполнением кода, у него уже был RCE в один клик через кражу токена (CVE-2026-25253) плюс ошибки проверки origin, и шлюз не зря отказывается от привязки вне loopback без аутентификации. Не ставьте порт и за обычный обратный прокси; единственная задокументированная схема с обратным прокси использует режим аутентификации trusted-proxy. Документация предпочитает удалённый доступ через Tailscale; запасным вариантом служит SSH-туннель с вашего ноутбука:
ssh -N -L 18789:127.0.0.1:18789 openclaw@your-server
Затем откройте локально http://127.0.0.1:18789. Аутентификация через туннель всё равно нужна; токен был задан при онбординге (gateway.auth.token или переменная окружения OPENCLAW_GATEWAY_TOKEN). Минимальный блок шлюза выглядит так:
{
"gateway": {
"bind": "loopback",
"port": 18789
}
}
После каждого изменения конфигурации запускайте openclaw security audit; он отмечает пробелы в аутентификации, открытые групповые политики, рискованные сочетания инструментов и песочницы и дрейф конфигурации; --fix применяет безопасные исправления. На странице безопасности лежит runbook по открытию доступа с предполётными чек-листами и чек-листами отката для редкого случая, когда loopback недостаточно.
Шаг 6: подключите первый канал (Telegram)
- В Telegram откройте BotFather, отправьте
/newbot, следуйте подсказкам и сохраните токен. - Передайте его OpenClaw:
openclaw channels add --channel telegram --token <bot-token>. Альтернативы:channels.telegram.botTokenв конфигурации или переменная окруженияTELEGRAM_BOT_TOKEN(только для аккаунта по умолчанию). - Отправьте боту любое сообщение. По умолчанию для Telegram действует политика DM pairing, поэтому сообщение не обрабатывается; вместо этого вы получаете короткий код сопряжения.
- Подтвердите себя на сервере:
openclaw pairing list telegram, затемopenclaw pairing approve telegram <CODE>. Коды истекают через час. - Проверьте готовность:
openclaw channels status --probe.
Команды BotFather /setprivacy и /setjoingroups определяют, что бот видит в группах; оставьте режим приватности включённым, если вам не нужны ответы в группах.
Шаг 7: привяжите агента только к себе
Модель безопасности предполагает одну границу доверия на шлюз: один оператор или взаимно доверяющая команда, но никогда не посторонние. В Telegram dmPolicy принимает pairing (по умолчанию), allowlist, open или disabled, а allowFrom перечисляет числовые id пользователей Telegram (префиксы telegram: и tg: нормализуются). Страница контроля доступа показывает схему только для владельца:
{
"channels": {
"telegram": {
"enabled": true,
"dmPolicy": "pairing",
"allowFrom": ["<YOUR_TELEGRAM_USER_ID>"],
"groupPolicy": "allowlist"
}
}
}
Старые конфигурации с записями @username переводит на числовые id команда openclaw doctor --fix. Права на инструменты можно ограничить по отправителю через toolsBySender, а выполнение инструментов перенести в контейнер, установив agents.defaults.sandbox.mode в non-main или all (off запускает инструменты прямо на хосте). Документация честно признаёт, что такая изоляция не является идеальной границей безопасности, но она существенно ограничивает доступ к файловой системе и процессам, когда модель делает что-то глупое. Считайте каждое входящее сообщение недоверенным вводом.
Обновление OpenClaw
Задокументированный путь идёт через встроенный апдейтер, который определяет тип вашей установки (npm, pnpm, Bun или git), проверяет кандидата, пока старый шлюз продолжает обслуживать запросы, а затем активирует и верифицирует его:
openclaw update
openclaw doctor
openclaw gateway restart
openclaw health
openclaw update --dry-run показывает предпросмотр; --channel beta, --channel extended-stable и --channel dev переключают каналы. Extended-stable подходит серверу, который вы не хотите трогать каждый месяц; v2026.6.35 (10 сентября 2026) описан как финальный выпуск июньской линии 2026 года, поэтому сверьтесь с документацией, какую линию канал отслеживает сейчас. Ручной запасной вариант: npm install -g openclaw@latest --allow-scripts=openclaw плюс те же три проверки. Сначала сделайте резервную копию ~/.openclaw; документация предупреждает, что автоматические копии конфигурации не являются полной резервной копией состояния. В Docker: docker compose pull openclaw-gateway openclaw-cli, затем docker compose up -d openclaw-gateway; шлюз выполняет на томе свои безопасные при старте миграции.
Удаление
Порядок такой: сервис, состояние, пакет. Пока CLI ещё на месте, openclaw uninstall --all --yes --non-interactive делает всё сразу; ручные шаги:
openclaw gateway stop
openclaw gateway uninstall
rm -rf "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}"
npm rm -g openclaw
Если юнит systemd уцелел: systemctl --user disable --now openclaw-gateway.service, затем удалите ~/.config/systemd/user/openclaw-gateway.service и выполните systemctl --user daemon-reload. Отзовите токен Telegram в BotFather и ключ провайдера в его панели; удаление сервера не отзывает ни то, ни другое.
Что изменилось с начала 2026 года
- Версии и каналы. Выпуски датированы (год.месяц.n). v2026.8.1 получил название "OpenClaw 2.0" с перестроенным веб-интерфейсом и более простым онбордингом; апдейтер предлагает каналы stable, beta, extended-stable и dev.
- Поднят минимум Node. Требуется Node 24.16+ или 26.1+, рекомендуется Node 26; используйте установщик или NodeSource, а не пакет дистрибутива.
- Апдейтер.
openclaw updateявляется задокументированным путём; v2026.9.2 добавил отчёты об обновлении и восстановление, v2026.9.3 проверку в изолированном состоянии кандидата. - Списки разрешённых в Telegram. Только числовые id пользователей; записи
@usernameустарели, их переносит doctor. - Более безопасные административные настройки по умолчанию вышли в v2026.6.11;
openclaw security auditпроверяет ваш экземпляр на соответствие им.
Если вы предпочли бы пропустить шаги с 1 по 5, наш готовый сервер OpenClaw от 9.35 EUR в месяц поставляется с Ubuntu 24.04 и шлюзом, уже установленным на loopback; вы добавляете ключ модели и Telegram-бота. О выборе между облачной моделью и собственной читайте AI-агент или собственная AI-модель, а о вариантах с GPU на странице AI-серверы.
Вопросы
Можно ли установить OpenClaw от root, чтобы сэкономить время?
Runbook говорит, что нельзя, и здесь это важно: инструмент exec выполняет команды оболочки с правами пользователя шлюза, поэтому шлюз под root отдаёт модели root. Создайте пользователя и запускайте шлюз под ним.
Нужен ли Docker, если я иду по пути npm?
Нет. Песочница по умолчанию выключена, и шлюз работает без Docker. Устанавливайте Docker Engine только если включаете песочницу, потому что Docker служит её бэкендом.
Шлюз работает из SSH, но останавливается после выхода
Это та самая проблема lingering. Выполните sudo loginctl enable-linger $(whoami), чтобы пользовательская сессия systemd переживала выход, затем проверьте openclaw gateway status в свежей оболочке с экспортированным XDG_RUNTIME_DIR.
Можно ли открыть порт 18789 с токеном вместо туннеля?
Шлюз привязывается вне loopback только при настроенной аутентификации, но документация всё равно направляет к Tailscale или SSH-туннелю и держит runbook по открытию доступа для всего остального. С учётом истории RCE считайте публичное открытие крайней мерой за файрволом, а не удобством.