bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Развёртывание OpenClaw на VPS: Docker, Telegram-бот, SSL и безопасные AI-агенты

calendar_month Oct 15, 2026 schedule 21 мин. чтения visibility 86 просмотров
Развёртывание OpenClaw на VPS: Docker, Telegram-бот, SSL и безопасные AI-агенты
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Развёртывание OpenClaw на VPS: Docker, Telegram-бот, SSL и безопасные AI-агенты

1. TL;DR

В этом руководстве мы развернём OpenClaw на VPS в Docker, подключим Telegram-бота, закроем панель управления HTTPS через Caddy и настроим безопасную модель доступа для AI-агентов: отдельный пользователь, SSH-ключи, firewall, allowlist Telegram ID, pairing и резервные копии.

  • OpenClaw запускается в Docker Compose и хранит состояние в отдельном volume.
  • Telegram-бот работает через long polling и не требует публичного webhook URL.
  • Веб-интерфейс и Gateway будут доступны по HTTPS через Caddy.
  • Доступ к агентам ограничивается списком разрешённых пользователей Telegram и парным кодом.
  • Секреты хранятся в файле .env, который не попадает в Git и резервные копии в открытом виде.
  • Для базового сценария достаточно VPS с 2 vCPU, 4 ГБ RAM и 40–60 ГБ NVMe-диска.

3. Что мы настраиваем и зачем

Схема: 3. Что мы настраиваем и зачем
Схема: 3. Что мы настраиваем и зачем

OpenClaw — self-hosted платформа для запуска AI-агентов и подключения их к каналам общения: Telegram, web-интерфейсу, API и другим интеграциям. Агент получает сообщения пользователя, передаёт запрос выбранной языковой модели, использует разрешённые инструменты и возвращает результат в чат.

Практический сценарий выглядит так: вы пишете Telegram-боту «собери краткую сводку по логам за сутки», «подготовь черновик ответа клиенту», «найди ошибку в репозитории» или «создай задачу в трекере». OpenClaw передаёт запрос AI-модели и, если это разрешено политикой, вызывает инструменты: HTTP API, файловую систему, shell-команды, Git, базы данных или внутренние сервисы.

Главное преимущество самостоятельного развёртывания на VPS — контроль над данными и доступами. Вы решаете, где хранится история диалогов, какие модели подключены, какие инструменты доступны агенту и кому разрешено отправлять команды. Это особенно полезно для разработчиков, небольших команд, владельцев SaaS и пользователей, которые не хотят передавать рабочие контексты в публичные SaaS-панели.

Что будет работать после настройки

  • OpenClaw Gateway в отдельном Docker-контейнере.
  • Telegram-бот, который принимает личные сообщения от разрешённых аккаунтов.
  • HTTPS-домен для административного интерфейса или API Gateway.
  • Изолированная Docker-сеть между Caddy и OpenClaw.
  • Постоянное хранилище конфигурации, сессий и рабочих данных.
  • Автоматический перезапуск контейнеров после перезагрузки VPS.
  • Ночной backup конфигурации и Docker volume во внешнее S3-совместимое хранилище.

Self-hosted OpenClaw и облачные AI-агенты

Критерий Cloud-managed сервис OpenClaw на собственном VPS
Контроль данных История и настройки находятся у поставщика сервиса Конфиги, логи и история хранятся на вашем сервере
Подключение моделей Обычно ограничено списком провайдера Можно выбрать API-провайдера или совместимый локальный endpoint
Доступ к инструментам Предопределённые интеграции Гибкие политики, внутренние API и собственные инструменты
Безопасность Зависит от правил SaaS-платформы Вы контролируете firewall, сеть, allowlist и аудит
Поддержка Обслуживание выполняет провайдер Обновления, бэкапы и мониторинг выполняете вы
Стоимость Подписка плюс лимиты на использование VPS, API модели и хранилище резервных копий

Self-hosted не означает, что модель обязательно должна работать на том же сервере. В большинстве случаев VPS запускает OpenClaw и интеграции, а генерация выполняется через API модели. Это экономичнее: для LLM-инференса на CPU понадобится намного больше ресурсов, а иногда и GPU. Если данные нельзя отправлять во внешний API, модель можно подключить к отдельному серверу с Ollama, vLLM или другой OpenAI-совместимой точкой доступа.

Модель угроз для AI-агента

AI-агент опаснее обычного чат-бота, если он имеет доступ к shell, файлам или токенам сторонних сервисов. Не давайте агенту root-доступ, не подключайте без необходимости Docker socket и не публикуйте Gateway напрямую в интернет без HTTPS и аутентификации. Telegram ID пользователя нельзя считать секретом, но он удобен как дополнительный allowlist-барьер.

Безопасный стартовый принцип: агент отвечает только владельцу в личных сообщениях, работает от непривилегированного пользователя, не имеет доступа к Docker socket, а его рабочая директория отделена от конфигурации сервера.

4. Какой VPS-конфиг нужен под эту задачу

Схема: 4. Какой VPS-конфиг нужен под эту задачу
Схема: 4. Какой VPS-конфиг нужен под эту задачу

OpenClaw сам по себе не требует GPU, если вы используете внешние API языковых моделей. Нагрузка зависит от числа одновременных диалогов, объёма истории, количества подключённых инструментов, браузерной автоматизации и локальных сервисов вроде PostgreSQL, Redis или векторной базы.

Сценарий CPU RAM Диск Подходит для
Минимальный 2 vCPU 2 ГБ 30 ГБ NVMe Один Telegram-бот, 1–2 пользователя, внешний API модели
Рекомендуемый 2–4 vCPU 4 ГБ 60 ГБ NVMe Личная автоматизация, несколько инструментов, Caddy и backup-клиент
Команда 4 vCPU 8 ГБ 100 ГБ NVMe Несколько агентов, очередь задач, PostgreSQL, Redis, аудит
Расширенный 8 vCPU 16 ГБ+ 200 ГБ+ Векторный поиск, headless-браузер, локальные сервисы и много интеграций

Для первого production-развёртывания разумно выбрать 4 vCPU, 4 ГБ RAM, 60 ГБ NVMe и канал не менее 100 Мбит/с. Такой запас позволит без проблем запускать Docker, Caddy, OpenClaw, планировщик резервных копий и несколько вспомогательных контейнеров. Например, можно взять VPS с указанными характеристиками, а затем увеличить ресурсы при росте нагрузки.

Почему 2 ГБ RAM могут быть недостаточны

Docker-контейнеры, Node.js-процессы, системный кэш Linux и Caddy потребляют память даже при небольшом трафике. Если добавить Chromium для браузерной автоматизации, PostgreSQL, Redis или embedding-сервис, 2 ГБ быстро перестанут быть комфортным минимумом. При нехватке памяти ядро начнёт завершать процессы через OOM Killer, а бот будет периодически пропадать из сети.

Когда нужен dedicated-сервер

Dedicated-сервер оправдан не для одного Telegram-бота, а при предсказуемо высокой нагрузке или особых требованиях к изоляции. Выбирайте выделенный сервер, если запускаете локальные модели на CPU или GPU, храните большой объём документов для RAG, обслуживаете десятки активных пользователей, обрабатываете внутренние данные компании или хотите изолировать AI-инфраструктуру от других проектов.

Также dedicated удобен, когда нужны 32–128 ГБ RAM, быстрые локальные NVMe-массивы, GPU passthrough или стабильная производительность без влияния соседей по виртуализации. Для обычной работы OpenClaw с облачными LLM API VPS дешевле, проще в обслуживании и обычно полностью достаточен.

Выбор локации

  • Выбирайте регион рядом с вами и вашей командой, если часто открываете web-интерфейс.
  • Учитывайте законодательные требования к хранению персональных и рабочих данных.
  • Проверьте доступность API выбранного AI-провайдера из региона VPS.
  • Для Telegram long polling критична стабильность исходящего соединения, а не минимальная задержка.
  • Для домена и TLS понадобится входящий доступ минимум к портам 80 и 443.

5. Подготовка сервера

Схема: 5. Подготовка сервера
Схема: 5. Подготовка сервера

Ниже используется Ubuntu Server 24.04 LTS. На 2026 год это практичный выбор для Docker-хостов: система получает долгосрочные обновления безопасности, имеет свежие пакеты и хорошо документирована. Команды выполняйте под root только во время начальной настройки; далее работайте от отдельного пользователя.

Обновление системы и базовые утилиты

Подключитесь к серверу по SSH как root, используя пароль, выданный после создания VPS. Сразу обновите систему и установите базовые инструменты.

apt update && apt full-upgrade -y
apt install -y ca-certificates curl gnupg git jq ufw fail2ban unattended-upgrades

Первая команда устанавливает актуальные обновления безопасности. Вторая добавляет утилиты для работы с HTTPS-репозиториями, firewall, Fail2ban, Git и автоматическими обновлениями.

Создание непривилегированного пользователя

Создадим пользователя openclaw. Он будет управлять Docker Compose, но не получит прямой root-доступ без sudo.

adduser openclaw
usermod -aG sudo openclaw
mkdir -p /home/openclaw/.ssh
chmod 700 /home/openclaw/.ssh
chown -R openclaw:openclaw /home/openclaw/.ssh

Сгенерируйте SSH-ключ на локальном компьютере, если его ещё нет. Не создавайте приватный ключ на VPS и не пересылайте его через мессенджеры.

ssh-keygen -t ed25519 -a 100 -C "openclaw-admin"

Добавьте содержимое локального файла ~/.ssh/id_ed25519.pub на сервер в файл /home/openclaw/.ssh/authorized_keys. Удобнее всего сделать это командой с локального компьютера.

ssh-copy-id -i ~/.ssh/id_ed25519.pub openclaw@SERVER_IP

Проверьте вход в отдельном терминале до отключения password-аутентификации:

ssh openclaw@SERVER_IP

Защита SSH

После успешной проверки ключа отключите вход root-пользователя и аутентификацию по паролю. Это уменьшает риск перебора паролей ботами.

sudo nano /etc/ssh/sshd_config.d/99-hardening.conf

Вставьте следующие параметры.

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
X11Forwarding no
MaxAuthTries 3
AllowUsers openclaw

Проверьте синтаксис и перезапустите SSH. Не закрывайте текущую сессию, пока не подтвердите вход во втором окне терминала.

sudo sshd -t && sudo systemctl restart ssh

Firewall и Fail2ban

Откроем только SSH, HTTP и HTTPS. Если вы используете нестандартный SSH-порт, замените 22 до включения UFW.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment "SSH"
sudo ufw allow 80/tcp comment "HTTP for ACME"
sudo ufw allow 443/tcp comment "HTTPS"
sudo ufw enable
sudo ufw status verbose

Настроим Fail2ban для SSH. На Ubuntu базовый jail обычно уже присутствует, но явная конфигурация делает поведение предсказуемым.

sudo tee /etc/fail2ban/jail.d/sshd.local > /dev/null <<'EOF'
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h
EOF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Автоматические обновления безопасности

Автоматически устанавливайте security-обновления ОС, но обновления Docker-образов OpenClaw выполняйте контролируемо после создания backup. Эти процессы не стоит смешивать.

sudo dpkg-reconfigure --priority=low unattended-upgrades
sudo systemctl enable --now unattended-upgrades

6. Установка ПО — пошагово

Схема: 6. Установка ПО — пошагово
Схема: 6. Установка ПО — пошагово

Далее установим Docker Engine из официального репозитория Docker, Docker Compose Plugin и создадим структуру каталогов. На момент подготовки руководства ориентируйтесь на Docker Engine 27 или новее и Docker Compose v2. Актуальный тег OpenClaw всегда сверяйте с официальным реестром образов или страницей релизов перед production-обновлением.

Установка Docker Engine и Compose Plugin

Удалите возможные старые пакеты Docker из системного репозитория Ubuntu, чтобы избежать конфликтов версий.

sudo apt remove -y docker.io docker-compose docker-compose-v2 podman-docker containerd runc || true

Добавьте официальный GPG-ключ Docker и репозиторий для Ubuntu 24.04.

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

Установите Docker Engine, CLI, containerd и Compose Plugin.

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker version
sudo docker compose version

Добавьте пользователя openclaw в группу Docker. Учитывайте, что членство в этой группе фактически предоставляет расширенные права на сервере: пользователь может запускать привилегированные контейнеры. Не добавляйте туда других пользователей без необходимости.

sudo usermod -aG docker openclaw
newgrp docker
docker run --rm hello-world

Создание структуры проекта

Все файлы приложения разместим в /opt/openclaw. Docker volumes будут храниться отдельно от конфигурации Compose, что упрощает backup и миграцию.

sudo mkdir -p /opt/openclaw/{caddy,data,backups}
sudo chown -R openclaw:openclaw /opt/openclaw
cd /opt/openclaw
umask 077

Проверьте, что пользователь способен обращаться к Docker daemon после нового входа в SSH. Если команда выдаёт ошибку permission denied, выйдите из сессии и подключитесь повторно.

docker ps

Получение Telegram Bot Token

В Telegram откройте официальный бот BotFather, выполните команду /newbot, задайте имя и username, заканчивающийся на bot. BotFather выдаст токен вида 123456789:AA.... Сразу сохраните его в менеджер паролей: токен позволяет полностью управлять ботом.

Узнайте свой числовой Telegram ID. Для этого можно временно использовать проверенный сервис-бот, собственный Telegram API-клиент или посмотреть входящее обновление через Bot API. Не используйте username как security allowlist: username может меняться. В конфигурации нужен именно числовой ID, например 123456789.

Подготовка домена

Создайте DNS-запись типа A для поддомена, например claw.example.com, и укажите публичный IPv4 адрес VPS. Если используете IPv6, добавьте запись AAAA только после проверки маршрутизации и firewall.

dig +short A claw.example.com
curl -4 ifconfig.me

IP из первой команды должен совпасть с публичным IPv4 вашего сервера. Не запускайте Caddy до распространения DNS: иначе выпуск сертификата Let's Encrypt может завершиться ошибкой проверки домена.

Выбор образа OpenClaw

В production не используйте тег latest без контроля. Зафиксируйте проверенный релизный тег, например 2026.3.0, после сверки с официальным списком релизов OpenClaw. В примере ниже значение вынесено в .env, поэтому обновление сводится к изменению одной строки и перезапуску Compose.

cd /opt/openclaw
touch .env
chmod 600 .env
nano .env

7. Конфигурация OpenClaw, Telegram и SSL

Схема: 7. Конфигурация OpenClaw, Telegram и SSL
Схема: 7. Конфигурация OpenClaw, Telegram и SSL

В этом разделе мы создадим файл секретов, конфигурацию Docker Compose, Caddyfile и базовую конфигурацию OpenClaw. Архитектура будет простой: Caddy принимает HTTPS-трафик на порту 443 и проксирует его во внутреннюю Docker-сеть на Gateway. Сам OpenClaw не публикует порт напрямую на хост.

Файл секретов .env

Откройте /opt/openclaw/.env и замените все демонстрационные значения. Не отправляйте этот файл в Git, не вставляйте токены в Compose-файл и не публикуйте их в логах или скриншотах.

OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw:2026.3.0
OPENCLAW_DOMAIN=claw.example.com

TELEGRAM_BOT_TOKEN=123456789:REPLACE_WITH_REAL_TOKEN
TELEGRAM_ALLOWED_USER_ID=123456789

OPENAI_API_KEY=sk-replace-with-real-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4.1-mini

OPENCLAW_GATEWAY_TOKEN=replace-with-a-long-random-token

Создайте сильный токен Gateway. Это дополнительный секрет для административных запросов и API-доступа. Используйте не менее 32 случайных байт.

openssl rand -hex 32

Вставьте результат в OPENCLAW_GATEWAY_TOKEN. Если вы подключаете не OpenAI, а другой совместимый endpoint, измените OPENAI_BASE_URL, ключ и идентификатор модели. Не храните API-ключ провайдера в конфигурации агента в открытом виде.

Docker Compose

Создайте файл /opt/openclaw/compose.yml. Образ, формат переменных и доступные команды OpenClaw могут меняться между релизами, поэтому перед первым запуском сравните параметр command с документацией закреплённой версии. Ниже приведён типовой Gateway-стек для контейнерного запуска.

services:
  openclaw:
    image: ${OPENCLAW_IMAGE}
    container_name: openclaw
    restart: unless-stopped
    env_file:
      - .env
    environment:
      HOME: /home/node
      OPENCLAW_CONFIG_PATH: /home/node/.openclaw/openclaw.json
      OPENCLAW_GATEWAY_BIND: 0.0.0.0
      OPENCLAW_GATEWAY_PORT: 18789
    volumes:
      - ./data:/home/node/.openclaw
      - /etc/localtime:/etc/localtime:ro
    expose:
      - "18789"
    networks:
      - internal
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    read_only: false
    tmpfs:
      - /tmp:size=256m,mode=1777
    healthcheck:
      test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:18789/health || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 40s

  caddy:
    image: caddy:2.8-alpine
    container_name: openclaw-caddy
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - internal
    depends_on:
      openclaw:
        condition: service_started
    security_opt:
      - no-new-privileges:true

networks:
  internal:
    driver: bridge

volumes:
  caddy_data:
  caddy_config:

Параметр cap_drop: ALL снимает Linux capabilities, не нужные приложению. Контейнер OpenClaw не получает privileged: true, не монтирует /var/run/docker.sock и не имеет доступа к домашней директории администратора. Это важнее, чем запуск агента в «удобном», но чрезмерно привилегированном контейнере.

Конфигурация OpenClaw

Создайте каталог конфигурации и файл openclaw.json. В некоторых релизах OpenClaw есть интерактивная команда onboarding; её можно использовать для генерации исходного файла. Однако перед запуском вручную проверьте, что Telegram включён, режим личных сообщений ограничен, а список разрешённых пользователей задан явно.

cd /opt/openclaw
mkdir -p data
chmod 700 data
nano data/openclaw.json
{
  "gateway": {
    "host": "0.0.0.0",
    "port": 18789,
    "auth": {
      "mode": "token",
      "token": "${OPENCLAW_GATEWAY_TOKEN}"
    }
  },
  "channels": {
    "telegram": {
      "enabled": true,
      "botToken": "${TELEGRAM_BOT_TOKEN}",
      "dmPolicy": "allowlist",
      "allowFrom": [
        "${TELEGRAM_ALLOWED_USER_ID}"
      ],
      "groupPolicy": "disabled"
    }
  },
  "models": {
    "default": {
      "provider": "openai-compatible",
      "baseUrl": "${OPENAI_BASE_URL}",
      "apiKey": "${OPENAI_API_KEY}",
      "model": "${OPENAI_MODEL}"
    }
  },
  "agents": {
    "default": {
      "workspace": "/home/node/.openclaw/workspace",
      "tools": {
        "shell": false,
        "filesystem": true,
        "http": true
      }
    }
  }
}

Имена параметров могут отличаться в конкретной версии OpenClaw. Если ваш релиз не поддерживает подстановку ${VARIABLE} внутри JSON, не вставляйте секреты в файл: используйте штатный механизм environment variables или выполните официальный onboarding внутри контейнера. После генерации конфигурации убедитесь, что права на файл ограничены.

chmod 600 /opt/openclaw/data/openclaw.json
mkdir -p /opt/openclaw/data/workspace
chmod 700 /opt/openclaw/data/workspace

В стартовой конфигурации shell-инструмент выключен. Включайте его только после отдельного анализа рисков. Агент, который способен выполнять произвольные команды из Telegram, может быть атакован через prompt injection: например, вредоносный текст в письме, документе или веб-странице может попытаться заставить модель выполнить опасное действие.

Настройка HTTPS через Caddy

Создайте Caddyfile. Caddy автоматически запросит и продлит TLS-сертификат Let's Encrypt при корректной DNS-записи и открытых портах 80/443.

nano /opt/openclaw/caddy/Caddyfile
{
    email [email protected]
    auto_https prefer_wildcard
}

{$OPENCLAW_DOMAIN} {
    encode zstd gzip

    @health path /health
    reverse_proxy @health openclaw:18789

    reverse_proxy openclaw:18789

    header {
        -Server
        X-Content-Type-Options "nosniff"
        X-Frame-Options "DENY"
        Referrer-Policy "no-referrer"
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
    }

    log {
        output stdout
        format console
    }
}

Если Gateway не предназначен для постоянного публичного использования, лучше ограничить доступ на уровне Caddy. Например, разрешите только свой статический IP либо закройте административный интерфейс VPN-туннелем WireGuard. Telegram-бот продолжит работать, потому что long polling использует исходящее подключение к Telegram.

Пример IP allowlist для Caddy. Замените IP-адрес на свой внешний адрес и добавьте правило перед reverse_proxy.

@blocked not remote_ip 203.0.113.10
respond @blocked "Forbidden" 403

Первый запуск и проверка

Проверьте синтаксис Compose и скачайте образы. Команда не должна выводить значение секретов.

cd /opt/openclaw
docker compose config -q
docker compose pull
docker compose up -d
docker compose ps

Посмотрите первые логи OpenClaw. При успешном запуске обычно видно инициализацию Gateway и подключение Telegram-канала. Не публикуйте эти логи: в зависимости от версии они могут содержать технические идентификаторы сессий.

docker compose logs --tail=100 openclaw
docker compose logs --tail=100 caddy

Проверьте health endpoint локально через контейнер Caddy и затем с внешней машины через HTTPS.

docker exec openclaw-caddy wget -qO- http://openclaw:18789/health
curl -I https://claw.example.com/health
curl -sS https://claw.example.com/health

Ожидаемый результат зависит от релиза: это может быть JSON с состоянием ok, код 200 или другой документ health endpoint. Если endpoint требует токен, передайте его только из локальной shell-сессии:

curl -sS \
  -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \
  https://claw.example.com/health

Проверка Telegram и pairing

Откройте чат с ботом, нажмите Start и отправьте простое сообщение: «Привет, ответь одним предложением». Если включён режим pairing, OpenClaw выдаст код сопряжения или создаст ожидающий запрос. Подтвердите его из административной консоли согласно механизму вашей версии.

cd /opt/openclaw
docker compose exec openclaw openclaw doctor
docker compose exec openclaw openclaw status

Если команда CLI называется иначе, используйте встроенную справку контейнера:

docker compose exec openclaw openclaw --help
docker compose exec openclaw openclaw gateway --help

Не переводите Telegram в режим «разрешить всем» ради быстрой диагностики. Лучше временно посмотрите логи, убедитесь в правильности числового Telegram ID и повторите попытку с разрешённого аккаунта.

Безопасное включение инструментов

После базового запуска постепенно добавляйте возможности. Сначала разрешите только чтение из рабочей директории и безопасные HTTP-запросы к заранее известным API. Для каждого нового инструмента задайте отдельный scope, токен с минимальными правами и ограничение по сети.

  • Для Git используйте deploy key с доступом только к одному репозиторию.
  • Для GitHub или GitLab создавайте токен без права удаления проектов и изменения пользователей.
  • Для базы данных создайте отдельного read-only пользователя.
  • Для HTTP-интеграций используйте API-ключи с ограничением по IP, если провайдер это поддерживает.
  • Для shell-команд используйте отдельный sandbox-контейнер, allowlist команд и read-only mount.
  • Не разрешайте агенту читать .env, SSH-ключи, /etc и Docker socket.

Если агенту действительно нужны команды shell, запускайте инструмент в отдельном контейнере без root, без исходящих секретов, с лимитами CPU/RAM/PID и коротким таймаутом. Не добавляйте shell-доступ в основной контейнер Gateway.

8. Бэкапы и обслуживание

Схема: 8. Бэкапы и обслуживание
Схема: 8. Бэкапы и обслуживание

Для OpenClaw критичны не Docker-образы, а состояние: конфигурация, разрешённые pairing-сессии, workspace, базы данных, Caddy certificates и секреты. Образ можно скачать заново, но без данных придётся повторно подключать Telegram, восстанавливать настройки агентов и терять историю.

Что нужно резервировать

  • /opt/openclaw/data — конфигурация, workspace, история и внутреннее состояние OpenClaw.
  • /opt/openclaw/compose.yml — описание контейнеров.
  • /opt/openclaw/caddy/Caddyfile — TLS и reverse proxy-конфигурация.
  • /opt/openclaw/.env — секреты, только в зашифрованном backup-репозитории.
  • Docker volume openclaw_caddy_data — сертификаты и состояние Caddy.
  • Отдельные PostgreSQL, Redis или vector DB volumes, если вы добавите их позже.

Не храните единственную копию backup на том же VPS. Ошибка администратора, удаление виртуальной машины, компрометация root-доступа или повреждение диска уничтожат и приложение, и локальный архив одновременно. Используйте S3-совместимое object storage, отдельный backup VPS или удалённое хранилище с versioning.

Установка restic

Restic шифрует резервные копии на стороне клиента до отправки в удалённое хранилище. Ниже показан пример для S3-совместимого bucket. Замените значения endpoint, bucket и ключей на параметры вашего хранилища.

sudo apt install -y restic
sudo mkdir -p /etc/openclaw-backup
sudo chmod 700 /etc/openclaw-backup
sudo nano /etc/openclaw-backup/restic.env
sudo chmod 600 /etc/openclaw-backup/restic.env
RESTIC_REPOSITORY=s3:https://s3.example.net/openclaw-backups
RESTIC_PASSWORD=replace-with-a-long-unique-backup-password
AWS_ACCESS_KEY_ID=replace-with-access-key
AWS_SECRET_ACCESS_KEY=replace-with-secret-key
AWS_DEFAULT_REGION=us-east-1

Инициализируйте репозиторий один раз. Пароль RESTIC_PASSWORD не должен совпадать с паролем VPS или ключом S3. Потеря этого пароля означает потерю доступа к зашифрованным backup.

sudo bash -c 'set -a; source /etc/openclaw-backup/restic.env; set +a; restic init'

Скрипт резервного копирования

Скрипт временно архивирует Caddy volume, затем передаёт конфигурацию и архив в restic. Для консистентности при активном использовании можно на несколько секунд остановить OpenClaw перед backup либо использовать встроенный экспорт базы данных, если конкретный релиз хранит данные в PostgreSQL.

sudo nano /usr/local/sbin/openclaw-backup.sh
sudo chmod 700 /usr/local/sbin/openclaw-backup.sh
#!/usr/bin/env bash
set -euo pipefail

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
set -a
source /etc/openclaw-backup/restic.env
set +a

STAMP=$(date +%F-%H%M%S)
WORKDIR="/opt/openclaw/backups/${STAMP}"
mkdir -p "${WORKDIR}"

cd /opt/openclaw

docker run --rm \
  -v openclaw_caddy_data:/source:ro \
  -v "${WORKDIR}":/backup \
  alpine:3.21 \
  tar czf /backup/caddy-data.tar.gz -C /source .

restic backup \
  /opt/openclaw/data \
  /opt/openclaw/compose.yml \
  /opt/openclaw/.env \
  /opt/openclaw/caddy/Caddyfile \
  "${WORKDIR}/caddy-data.tar.gz" \
  --tag openclaw

restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

rm -rf "${WORKDIR}"

Запустите backup вручную и убедитесь, что снимок появился. Ошибка авторизации S3 должна быть исправлена до настройки cron.

sudo /usr/local/sbin/openclaw-backup.sh
sudo bash -c 'set -a; source /etc/openclaw-backup/restic.env; set +a; restic snapshots'

Расписание cron

Запускайте backup ночью, например в 03:30. Логи будут записываться в /var/log/openclaw-backup.log.

sudo crontab -e
30 3   * /usr/local/sbin/openclaw-backup.sh >> /var/log/openclaw-backup.log 2>&1

Раз в месяц выполняйте тестовое восстановление в отдельную временную директорию. Backup, который никогда не восстанавливался, нельзя считать проверенным.

sudo mkdir -p /tmp/openclaw-restore-test
sudo bash -c 'set -a; source /etc/openclaw-backup/restic.env; set +a; restic restore latest --target /tmp/openclaw-restore-test'
sudo find /tmp/openclaw-restore-test -maxdepth 3 -type f | head

Обновления OpenClaw и Docker-образов

Не обновляйте production-агента автоматически по тегу latest. Новая версия может изменить формат конфигурации, модель авторизации, набор инструментов или миграцию данных. Безопасный процесс: создать backup, прочитать release notes, изменить закреплённый тег, скачать образ, перезапустить и проверить Telegram.

cd /opt/openclaw
sudo /usr/local/sbin/openclaw-backup.sh
nano .env
docker compose pull openclaw
docker compose up -d --no-deps openclaw
docker compose logs --tail=100 openclaw
docker compose ps

Для одного бота обновление обычно требует короткого maintenance window: Telegram-сообщения могут прийти с задержкой в несколько секунд, пока контейнер перезапускается. Rolling update полезен только при нескольких репликах, внешней очереди задач, совместимом состоянии и корректно настроенном балансировщике; для одиночного OpenClaw Gateway он чаще добавляет сложность без заметной пользы.

Минимальный мониторинг

Регулярно проверяйте состояние контейнеров, свободное место, память и последние ошибки. Включите оповещение хотя бы через cron-проверку или внешний uptime-monitor для URL /health.

cd /opt/openclaw
docker compose ps
docker stats --no-stream
df -h
free -h
docker compose logs --since=24h openclaw | grep -iE "error|fatal|panic" || true

9. Troubleshooting + FAQ

Почему Telegram-бот не отвечает, хотя контейнер запущен?

Сначала проверьте логи: docker compose logs --tail=200 openclaw. Наиболее частые причины — неверный TELEGRAM_BOT_TOKEN, бот не был запущен через кнопку Start, неправильный числовой Telegram ID в allowlist или включённый pairing, который ещё не подтверждён. Убедитесь, что VPS имеет исходящий HTTPS-доступ к API Telegram. Не отключайте allowlist для диагностики: лучше временно добавьте второй собственный ID и перезапустите контейнер командой docker compose up -d.

Что означает ошибка 401 или 403 при открытии Gateway через браузер?

Код 401 обычно означает отсутствие или неверное значение токена Gateway. Проверьте, что токен в .env совпадает с настройкой авторизации OpenClaw, затем перезапустите контейнер. Код 403 чаще связан с IP allowlist в Caddy или политикой доступа самого OpenClaw. Проверьте Caddyfile, внешний IP клиента и логи docker compose logs caddy. Не удаляйте аутентификацию навсегда: для проверки лучше выполнить локальный запрос с заголовком Authorization: Bearer.

Почему Caddy не получает SSL-сертификат?

Проверьте DNS: команда dig +short A claw.example.com должна возвращать IP VPS. Убедитесь, что UFW и внешний firewall провайдера разрешают TCP-порты 80 и 443, а другой веб-сервер не занимает эти порты. Посмотрите логи Caddy: docker compose logs --tail=200 caddy. Если домен проксируется через CDN, временно отключите proxy-режим либо используйте корректный DNS challenge. Также проверьте, что домен не содержит локальный адрес или ошибочную AAAA-запись.

Контейнер OpenClaw постоянно перезапускается. Что делать?

Начните с docker compose logs --tail=300 openclaw и docker inspect openclaw --format '{{.State.OOMKilled}}'. Если значение OOMKilled равно true, серверу не хватает памяти: увеличьте RAM до 4 ГБ или отключите тяжёлые инструменты, например браузерную автоматизацию. Другие причины — ошибка JSON-конфигурации, неподдерживаемый параметр после обновления, недоступный образ или неверный command. Проверьте версию образа, документацию закреплённого релиза и выполните docker compose config.

Какой VPS-конфиг минимально подойдёт?

Для одного личного Telegram-бота, который использует внешний API AI-модели, минимально достаточно 2 vCPU, 2 ГБ RAM и 30 ГБ NVMe. Однако для стабильной работы лучше сразу выбрать 2–4 vCPU, 4 ГБ RAM и 60 ГБ NVMe: Docker, TLS, логи, backup-клиент и будущие интеграции потребуют запас ресурсов. Если планируется PostgreSQL, Redis, browser automation или несколько агентов, начинайте с 4 vCPU и 8 ГБ RAM.

Что выбрать — VPS или dedicated для этой задачи?

Для OpenClaw с внешними LLM API почти всегда достаточно VPS: он дешевле, быстрее создаётся и легко масштабируется по CPU, RAM и диску. Dedicated нужен при локальном запуске крупных моделей, GPU-задачах, хранении больших RAG-индексов, строгой изоляции или постоянной нагрузке от многих пользователей. Не выбирайте dedicated только из-за Telegram-бота: сначала измерьте фактические CPU, RAM и I/O через docker stats, затем принимайте решение по метрикам.

Можно ли разрешить агенту выполнять shell-команды на VPS?

Технически можно, но основной контейнер OpenClaw не должен иметь прямой shell-доступ к хосту. AI-модель может ошибиться, неправильно интерпретировать инструкцию или получить вредоносный prompt через внешний документ. Для shell-задач создайте отдельный sandbox-контейнер без root, без Docker socket, с read-only filesystem, сетевыми ограничениями, лимитом времени и allowlist команд. Не передавайте туда секреты из .env, SSH-ключи, токены облака и доступ к домашней директории администратора.

Как безопасно добавить второго пользователя Telegram?

Узнайте его числовой Telegram ID и добавьте значение в массив allowFrom конфигурации OpenClaw. После изменения проверьте JSON и перезапустите только контейнер приложения: docker compose up -d --no-deps openclaw. Для командной работы лучше создать отдельные роли или отдельных ботов для разных функций: например, один read-only агент для справок и второй ограниченный агент для операций. Не используйте групповые чаты, пока не настроите явную политику упоминаний, allowlist групп и защиту от prompt injection.

Как восстановиться после неудачного обновления?

Сначала верните предыдущий тег образа в файле .env, затем выполните docker compose pull и docker compose up -d. Если новая версия изменила данные, остановите контейнер, сохраните текущую директорию /opt/openclaw/data отдельно и восстановите проверенный снимок restic в staging-каталог. Не перезаписывайте production-данные до проверки структуры восстановления. После отката проверьте health endpoint, логи Gateway и ответ Telegram-бота с разрешённого аккаунта.

10. Выводы и следующие шаги

Схема: 10. Выводы и следующие шаги
Схема: 10. Выводы и следующие шаги

Теперь OpenClaw работает на вашем VPS в Docker, принимает сообщения через Telegram, защищён HTTPS и ограничен безопасной политикой доступа. Конфигурация, данные и TLS-состояние регулярно резервируются во внешнее хранилище, а Gateway не опубликован напрямую без reverse proxy.

  1. Добавьте мониторинг health endpoint и уведомления о недоступности контейнера.
  2. Подключайте инструменты по одному: сначала read-only API, затем Git или базы данных с минимальными правами.
  3. При росте нагрузки вынесите PostgreSQL, Redis, очередь задач или локальный LLM endpoint в отдельные контейнеры либо серверы.

Перед включением любых действий, меняющих данные или инфраструктуру, создавайте отдельный sandbox, ограничивайте токены и тестируйте сценарии на непроизводственной среде. Для AI-агентов безопасность доступа важнее количества подключённых инструментов.

Был ли этот гайд полезен?

Ваш отзыв помогает нам улучшать гайды.

Поделиться записью:

Отправьте гайд тому, кому он может пригодиться.

Telegram VKVK WhatsApp Facebook LinkedIn XX

развёртывание openclaw на vps: docker, telegram-бот, ssl и безопасные ai-агенты
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.