OpenClaw на Hetzner (Docker, руководство по Production VPS)
Цель
Запустить постоянно работающий OpenClaw Gateway на Hetzner VPS, используя Docker, с долговременным состоянием, встроенными бинарниками и безопасным поведением при перезапуске.
Если вы хотите "OpenClaw 24/7 за ~$5", это простейшая надежная настройка. Цены Hetzner меняются; выберите наименьший Debian/Ubuntu VPS и масштабируйте при необходимости.
Что мы делаем (простыми словами)?
- Арендуем небольшой Linux-сервер (Hetzner VPS)
- Устанавливаем Docker (изолированная среда выполнения приложения)
- Запускаем OpenClaw Gateway в Docker
- Сохраняем ~/.openclaw + ~/.openclaw/workspace на хосте (переживает перезапуски/пересборки)
- Получаем доступ к Control UI с вашего ноутбука через SSH-туннель
К Gateway можно получить доступ через:
- SSH-проброс портов с вашего ноутбука
- Прямой доступ к порту, если вы сами управляете firewall и токенами
Это руководство предполагает Ubuntu или Debian на Hetzner.
Если вы используете другой Linux VPS, сопоставьте пакеты соответственно.
Для общего Docker-процесса см. Docker.
Быстрый путь (для опытных операторов)
- Провизионировать Hetzner VPS
- Установить Docker
- Клонировать репозиторий OpenClaw
- Создать постоянные директории хоста
- Настроить .env и docker-compose.yml
- Встроить необходимые бинарники в образ
- docker compose up -d
- Проверить постоянство и доступ к Gateway
Что вам понадобится
- Hetzner VPS с root-доступом
- SSH-доступ с вашего ноутбука
- Базовая работа с SSH + копирование/вставка
- ~20 минут
- Docker и Docker Compose
- Учетные данные аутентификации модели
- Опциональные учетные данные провайдера
- WhatsApp QR
- Токен Telegram-бота
- Gmail OAuth
1) Провизионировать VPS
Создайте Ubuntu или Debian VPS в Hetzner.
Подключитесь как root:
ssh root@YOUR_VPS_IP
Это руководство предполагает, что VPS является stateful. Не относитесь к нему как к одноразовой инфраструктуре.
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
mkdir -p /root/.openclaw/workspace
# Установить владельца для пользователя контейнера (uid 1000):
chown -R 1000:1000 /root/.openclaw
chown -R 1000:1000 /root/.openclaw/workspace
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:
# Рекомендуется: оставить Gateway только для loopback на VPS; доступ через SSH-туннель.
# Чтобы открыть публично, удалите префикс `127.0.0.1:` и настройте firewall соответственно.
- "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789"
# Опционально: только если вы запускаете iOS/Android ноды против этого VPS и нужен Canvas host.
# Если вы открываете это публично, прочитайте /gateway/security и настройте firewall соответственно.
# - "18793:18793"
command:
[
"node",
"dist/index.js",
"gateway",
"--bind",
"${OPENCLAW_GATEWAY_BIND}",
"--port",
"${OPENCLAW_GATEWAY_PORT}"
]
7) Встроить необходимые бинарники в образ (критично)
Установка бинарников внутри работающего контейнера — это ловушка. Все установленное во время выполнения будет потеряно при перезапуске.
Все внешние бинарники, необходимые для skills, должны быть установлены во время сборки образа.
Приведенные ниже примеры показывают только три распространенных бинарника:
- gog для доступа к Gmail
- goplaces для Google Places
- wacli для WhatsApp
Это примеры, а не полный список. Вы можете установить столько бинарников, сколько нужно, используя тот же шаблон.
Если позже вы добавите новые skills, зависящие от дополнительных бинарников, вы должны:
- Обновить Dockerfile
- Пересобрать образ
- Перезапустить контейнеры
Пример Dockerfile
FROM node:22-bookworm
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# Пример бинарника 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
# Пример бинарника 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
# Пример бинарника 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
# Добавьте больше бинарников ниже, используя тот же шаблон
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-ключи |
| Конфигурации Skill | /home/node/.openclaw/skills/ | Монтирование тома хоста | Состояние уровня skill |
| Рабочее пространство агента | /home/node/.openclaw/workspace/ | Монтирование тома хоста | Код и артефакты агента |
| Сессия WhatsApp | /home/node/.openclaw/ | Монтирование тома хоста | Сохраняет QR-логин |
| Связка ключей Gmail | /home/node/.openclaw/ | Том хоста + пароль | Требуется GOG_KEYRING_PASSWORD |
| Внешние бинарники | /usr/local/bin/ | Docker-образ | Должны быть встроены во время сборки |
| Среда выполнения Node | Файловая система контейнера | Docker-образ | Пересобирается при каждой сборке образа |
| OS-пакеты | Файловая система контейнера | Docker-образ | Не устанавливайте во время выполнения |
| Docker-контейнер | Эфемерный | Перезапускаемый | Безопасно уничтожать |