Перейти к основному содержанию

OpenClaw на Hetzner (Docker, руководство для production VPS)

Цель

Запустить постоянный OpenClaw Gateway на VPS Hetzner с использованием Docker, с устойчивым состоянием, встроенными бинарниками и безопасным поведением при перезапуске. Если вам нужен «OpenClaw 24/7 примерно за ~$5», это самая простая надёжная настройка. Цены Hetzner меняются; выберите самый маленький VPS с Debian/Ubuntu и масштабируйтесь, если столкнётесь с OOM.

Что мы делаем (простыми словами)?

  • Арендуем небольшой Linux-сервер (VPS Hetzner)
  • Устанавливаем Docker (изолированная среда выполнения приложений)
  • Запускаем OpenClaw Gateway в Docker
  • Сохраняем ~/.openclaw + ~/.openclaw/workspace на хосте (переживает перезапуски/пересборки)
  • Получаем доступ к Control UI с ноутбука через SSH-туннель
Доступ к Gateway возможен через:
  • Проброс портов SSH с вашего ноутбука
  • Прямое открытие порта, если вы самостоятельно управляете файрволом и токенами
Это руководство предполагает Ubuntu или Debian на Hetzner.
Если у вас другой Linux VPS, сопоставьте пакеты соответствующим образом. Для общего Docker-потока см. Docker.

Быстрый путь (для опытных операторов)

  1. Подготовить VPS Hetzner
  2. Установить Docker
  3. Клонировать репозиторий OpenClaw
  4. Создать постоянные каталоги на хосте
  5. Настроить .env и docker-compose.yml
  6. Встроить необходимые бинарники в образ
  7. docker compose up -d
  8. Проверить сохранность данных и доступ к Gateway

Что вам понадобится

  • VPS Hetzner с root-доступом
  • SSH-доступ с вашего ноутбука
  • Базовое владение SSH + копированием/вставкой
  • ~20 минут
  • Docker и Docker Compose
  • Учётные данные аутентификации модели
  • Необязательные учетные данные поставщика
    • QR для WhatsApp
    • Токен бота Telegram
    • OAuth Gmail

1. Подготовка VPS

Создайте VPS с Ubuntu или Debian в Hetzner. Подключитесь как root:
ssh root@YOUR_VPS_IP
Это руководство предполагает, что VPS является состоянием. Не рассматривайте его как одноразовую инфраструктуру.

2. Установка Docker (на VPS)

apt-get update
apt-get install -y git curl ca-certificates
curl -fsSL https://get.docker.com | sh
Проверьте:
docker --version
docker compose version

3. Клонирование репозитория OpenClaw

git clone https://github.com/openclaw/openclaw.git
cd openclaw
Это руководство предполагает, что вы будете собирать кастомный образ для гарантии сохранности бинарников.

4. Создание постоянных каталогов на хосте

Docker-контейнеры эфемерны. Все долгоживущее состояние должно храниться на хосте.
mkdir -p /root/.openclaw/workspace

# Set ownership to the container user (uid 1000):
chown -R 1000:1000 /root/.openclaw

5. Настройка переменных окружения

Создайте .env в корне репозитория.
OPENCLAW_IMAGE=openclaw:latest
OPENCLAW_GATEWAY_TOKEN=change-me-now
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=18789

OPENCLAW_CONFIG_DIR=/root/.openclaw
OPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspace

GOG_KEYRING_PASSWORD=change-me-now
XDG_CONFIG_HOME=/home/node/.openclaw
Сгенерируйте надёжные секреты:
openssl rand -hex 32
Не коммитьте этот файл.

6. Конфигурация Docker Compose

Создайте или обновите docker-compose.yml.
services:
  openclaw-gateway:
    image: ${OPENCLAW_IMAGE}
    build: .
    restart: unless-stopped
    env_file:
      - .env
    environment:
      - HOME=/home/node
      - NODE_ENV=production
      - TERM=xterm-256color
      - OPENCLAW_GATEWAY_BIND=${OPENCLAW_GATEWAY_BIND}
      - OPENCLAW_GATEWAY_PORT=${OPENCLAW_GATEWAY_PORT}
      - OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}
      - GOG_KEYRING_PASSWORD=${GOG_KEYRING_PASSWORD}
      - XDG_CONFIG_HOME=${XDG_CONFIG_HOME}
      - PATH=/home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    volumes:
      - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
      - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
    ports:
      # Recommended: keep the Gateway loopback-only on the VPS; access via SSH tunnel.
      # To expose it publicly, remove the `127.0.0.1:` prefix and firewall accordingly.
      - "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789"

      # Optional: only if you run iOS/Android nodes against this VPS and need Canvas host.
      # If you expose this publicly, read /gateway/security and firewall accordingly.
      # - "18793:18793"
    command:
      [
        "node",
        "dist/index.js",
        "gateway",
        "--bind",
        "${OPENCLAW_GATEWAY_BIND}",
        "--port",
        "${OPENCLAW_GATEWAY_PORT}",
        "--allow-unconfigured",
      ]
--allow-unconfigured предназначен только для удобства начальной настройки и не является заменой корректной конфигурации шлюза. Обязательно настройте аутентификацию (gateway.auth.token или пароль) и используйте безопасные параметры привязки для вашего развертывания.

7. Встраивание необходимых бинарников в образ (критично)

Установка бинарников внутри запущенного контейнера — ловушка. Всё, что установлено во время выполнения, будет потеряно при перезапуске. Все внешние бинарники, необходимые Skills, должны устанавливаться на этапе сборки образа. Примеры ниже показывают только три распространённых бинарника:
  • gog для доступа к Gmail
  • goplaces для Google Places
  • wacli для WhatsApp
Это примеры, а не полный список. Вы можете устанавливать столько бинарников, сколько нужно, используя тот же шаблон. Если позже вы добавите новые Skills, зависящие от дополнительных бинарников, необходимо:
  1. Обновить Dockerfile
  2. Пересобрать образ
  3. Перезапустить контейнеры
Пример Dockerfile
FROM node:22-bookworm

RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*

# Example binary 1: Gmail CLI
RUN curl -L https://github.com/steipete/gog/releases/latest/download/gog_Linux_x86_64.tar.gz \
  | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/gog

# Example binary 2: Google Places CLI
RUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_Linux_x86_64.tar.gz \
  | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/goplaces

# Example binary 3: WhatsApp CLI
RUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli_Linux_x86_64.tar.gz \
  | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/wacli

# Add more binaries below using the same pattern

WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY ui/package.json ./ui/package.json
COPY scripts ./scripts

RUN corepack enable
RUN pnpm install --frozen-lockfile

COPY . .
RUN pnpm build
RUN pnpm ui:install
RUN pnpm ui:build

ENV NODE_ENV=production

CMD ["node","dist/index.js"]

8. Сборка и запуск

docker compose build
docker compose up -d openclaw-gateway
Проверьте бинарники:
docker compose exec openclaw-gateway which gog
docker compose exec openclaw-gateway which goplaces
docker compose exec openclaw-gateway which wacli
Ожидаемый вывод:
/usr/local/bin/gog
/usr/local/bin/goplaces
/usr/local/bin/wacli

9. Проверка Gateway

docker compose logs -f openclaw-gateway
Успех:
[gateway] listening on ws://0.0.0.0:18789
С вашего ноутбука:
ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IP
Откройте: http://127.0.0.1:18789/ Вставьте токен вашего Gateway.

Что и где сохраняется (источник истины)

OpenClaw работает в Docker, но Docker не является источником истины. Всё долгоживущее состояние должно переживать перезапуски, пересборки и перезагрузки.
КомпонентРасположениеМеханизм сохранностиПримечания
Конфигурация Gateway/home/node/.openclaw/Монтирование тома хостаВключает openclaw.json, токены
Профили аутентификации моделей/home/node/.openclaw/Монтирование тома хостаOAuth-токены, ключи API
Конфиги Skills/home/node/.openclaw/skills/Монтирование тома хостаСостояние на уровне Skills
Рабочее пространство агента/home/node/.openclaw/workspace/Монтирование тома хостаКод и артефакты агента
Сеанс WhatsApp/home/node/.openclaw/Монтирование тома хостаСохраняет вход по QR
Хранилище ключей Gmail/home/node/.openclaw/Том хоста + парольТребуется GOG_KEYRING_PASSWORD
Внешние бинарники/usr/local/bin/Docker-образДолжен быть испечен во время сборки
Среда выполнения NodeФайловая система контейнераDocker-образВосстановить все изображения
Пакеты ОСФайловая система контейнераDocker-образНе устанавливать во время выполнения
Docker-контейнерЭфемерныйПерезапускаемыйБезопасно удалять

Инфраструктура как код (Terraform)

Для команд, предпочитающих процессы инфраструктуры как кода, поддерживаемая сообществом конфигурация Terraform предоставляет:
  • Модульную конфигурацию Terraform с удалённым управлением состоянием
  • Автоматическое развертывание через cloud-init
  • Скрипты развертывания (bootstrap, deploy, backup/restore)
  • Усиленную безопасность (firewall, UFW, доступ только по SSH)
  • Настройку SSH-туннеля для доступа к gateway
Репозитории: Этот подход дополняет описанную выше настройку Docker воспроизводимыми развертываниями, инфраструктурой с контролем версий и автоматическим восстановлением после сбоев.
Примечание: Поддерживается сообществом. По вопросам и предложениям см. ссылки на репозитории выше.