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

Отримати VPS arrow_forward
eco Початковий Туторіал

Розгортання OpenClaw на VPS: Docker, Telegram-бот, SSL і безпечні AI-агенти

calendar_month Oct 15, 2026 schedule 21 хв. читання visibility 88 переглядів
Развёртывание 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, вебінтерфейсу, 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 дешевший, простіший в обслуговуванні та зазвичай цілком достатній.

Вибір локації

  • Обирайте регіон поруч із вами та вашою командою, якщо часто відкриваєте вебінтерфейс.
  • Враховуйте законодавчі вимоги до зберігання персональних і робочих даних.
  • Перевірте доступність 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. Усунення неполадок + 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-агентів безпека доступу важливіша за кількість підключених інструментів.

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

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.