Пошаговый гайд: AI-агент, который чинит твой VPS из Telegram
Основная идея - ставим на VPS AI-агента, подключаем его к Telegram-боту и к LLM - и дальше можно мониторить и управлять сервером прямо из мессенджера. Написал «сайт лежит, разберись» - агент сам посмотрел логи, нашёл проблему, починил, отчитался. Без SSH, без ноутбука в три часа ночи.
Не магия - просто OpenClaw. Open-source фреймворк для персональных AI-агентов с 247 000+ звёзд на GitHub. Работает на твоём железе, подключается к любому мессенджеру, умеет выполнять shell-команды.
В этом гайде мы по шагам соберём такой стек:
- VPS Ubuntu 24.04 - хост
- Nginx - статический сайт (то, что будем «ломать» и «чинить»)
- Ollama - прокси к облачной LLM (MiniMax M2.5, бесплатная, без GPU)
- OpenClaw - сам AI-агент
- Telegram-бот - интерфейс управления
Время на всё: ~30 минут. Поехали.
UPD: По мотивам статьи написал ansible-плейбук, который разворачивает весь стек одной командой.
https://github.com/MindPhaser34/openclaw_ollama_nginx
Содержание:
Что понадобится
- VPS: Ubuntu 24.04 LTS, 4GB RAM, 2 vCPU, 50GB+ диск
- SSH-доступ с root или sudo
- Telegram на телефоне
- Стабильный интернет (облачная LLM + Telegram API)
Почему именно облачная модель, а не локальная? На 4GB RAM локальная LLM сожрёт всё и не оставит ресурсов ни Nginx, ни OpenClaw. Я буду использовать модель minimax-m2.5:cloud. Она работает на серверах MiniMax - на нашей VPS она будет потреблять около нуля. Бесплатная, поддерживает function calling (это критично для OpenClaw), контекстное окно ~200k+ токенов.
Как альтернативу, можно использовать deepseek-v4-pro:cloud - она значительно мощнее в агентных задачах (лидирует в Terminal-Bench, SWE-bench, MCPAtlas), поддерживает контекст 1M токенов и три режима reasoning. Подойдёт для сложных сценариев с множеством сервисов. Из минусов - склонна к многословности и быстрее расходует бесплатный лимит Ollama (49B active параметров против 10B у M2.5).
Также можно попробовать qwen3.5:cloud (256K контекст, мультимодальность) - золотая середина по интеллекту, но самая дорогая по output и не сильнее M2.5 в агентных задачах. К сожалению на момент написания статьи нет cloud варианта новой версии qwen3.6.
Если облако не вариант - можно поставить llama3.2:3b (~2.5GB RAM), либо qwen3.5:2b локально (~2.7GB RAM), но на бюджетной VPS будет тесно, лучше памяти взять побольше (6-8GB).
Часть 1. Готовим сервер
Шаг 1. Подключаемся к VPS
Шаг 2. Обновляем систему
Шаг 3. Ставим базовые пакеты
Шаг 4. Создаём отдельного пользователя
Гонять всё от root - плохая идея. Делаем пользователя специально под OpenClaw:
Задаём пароль, остальные поля можно пропустить.
Шаг 5. Настраиваем firewall
На вопрос отвечаем y. Проверяем:
Шаг 6. Переключаемся на нового пользователя
Дальше все команды выполняем от этого пользователя.
Часть 2. Nginx - наш подопытный сервис
Шаг 7. Устанавливаем Nginx
Шаг 8. Включаем автозапуск
Шаг 9. Кладём простую HTML-страницу
Заменяем дефолтную страницу Nginx на что-то своё. Это будет наш «сайт», который мы потом будем ломать и чинить:
Шаг 10. Проверяем
Должно быть HTTP Status: 200. Можно ещё открыть http://YOUR_VPS_IP в браузере - увидишь страницу с зелёным бейджем «Nginx is Running».
Часть 3. Ollama - мост к LLM
Шаг 11. Устанавливаем Ollama
Шаг 12. Проверяем
Шаг 13. Убеждаемся, что сервис работает
Ollama автоматически ставится как systemd-сервис:
В выводе должно быть active (running).
Шаг 14. Логинимся в Ollama
Облачные модели (типа minimax-m2.5:cloud) требуют аутентификации. Нужен аккаунт на ollama.com - регистрация бесплатная.
Следуем инструкциям. Если планируешь использовать только локальную модель - этот шаг можно пропустить. После того как авторизуете устройство в браузере появится такая вот довольная лама на авто =)
Шаг 15. Тестируем модель
Если получил внятный ответ - всё работает: Ollama на месте, аутентификация прошла, модель отвечает.
Если Error: 401 Unauthorized - повтори ollama login.
**Важно:** модель minimax-m2.5:cloud работает на серверах MiniMax. На твою VPS ничего большого не скачивается. Промпты уходят по сети, ответы приходят обратно.
Запасной план - если облачная модель не заводится, то запускаем модель локально:
Эта модель весит ~2.5GB и работает локально. Логин не нужен. Но на 4GB VPS будет тесновато.
Часть 4. OpenClaw + Telegram
Шаг 16. Создаём Telegram-бота
Прежде чем ставить OpenClaw, нужен Telegram-бот:
- Открываем Telegram, ищем @BotFather
- Пишем /newbot
- Вводим имя бота (например, My VPS Manager)
- Вводим username (должен заканчиваться на bot, например myvps_manager_bot)
- BotFather выдаёт токен вида 7123456789:AABb1-Dd2CcE3tToP_example_token
- Сохраняем токен - он понадобится на следующем шаге
Шаг 17. Устанавливаем OpenClaw
Запустится мастер настройки (onboarding wizard). Тут есть нюансы - реальный процесс отличается от того, что можно ожидать. Вот что выбирать на каждом шаге:
- Onboarding mode: QuickStart
- Model/Auth Provider: Ollama
- Ollama mode: Cloud Only
- Ollama API key: (генерируем здесь и вставляем в терминале)
- Default model: Enter model manually → ollama/minimax-m2.5:cloud (он удивится что её нет в каталоге, но при этом название модели оставит)
- Select channel: Telegram (Bot API)
- Bot Token: вставляем токен из шага 16
- Search provider: Ollama Web Search (либо Skip for now)
- Skills to install: Skip for now
Формат модели обязательно provider/model - то есть ollama/minimax-m2.5:cloud, а не просто minimax-m2.5:cloud.
После завершения перезагружаем shell:
Шаг 18. Настраиваем переменные окружения
Вот этот момент легко пропустить, а без него ничего не заработает(суть проблемы):
**Зачем это:**
- XDG_RUNTIME_DIR - нужна для systemd user services на headless VPS. Без неё получишь ошибку "Failed to connect to bus: No medium found".
Шаг 19. Запускаем Gateway
Проверяем:
Должен показать "Gateway: ... reachable", "Gateway service: ... running" и Telegram channel Enabled/State: ON.
На ошибки не обращаем внимание, дальше их разберем.
Шаг 20. Диагностика
Проверит версию Node.js, подключение к Ollama, доступность модели, конфигурацию gateway.
Шаг 21. Одобряем Telegram-pairing
Ещё один момент, на котором многие застревают. OpenClaw не будет отвечать на сообщения, пока ты явно не авторизуешь свой Telegram-аккаунт.
- Пишем /start своему боту в Telegram
- Бот ответит с user ID и pairing code (пример):
Your Telegram user id: 1234567890
Pairing code: ZD34WE69
Ask the bot owner to approve with:
openclaw pairing approve telegram ZD34WE69 - На VPS выполняем:
openclaw pairing approve telegram ZD34WE69 - Пишем боту ещё раз - теперь он должен ответить.
Шаг 22. Дашборд (опционально)
У OpenClaw есть веб-дашборд. Чтобы открыть его безопасно через SSH-туннель:
Затем в браузере:
Токен можно найти так:
Дашборд работает только через localhost - не через публичный IP.
Через дашборд можно уcтановить дополнительные навыки (skills).
Часть 5. Выдаём права
По умолчанию OpenClaw работает от пользователя openclaw и не может управлять системными сервисами. Нужно дать sudo-доступ, но по принципу минимальных привилегий.
Шаг 23. Sudoers
Для лабораторной среды (быстро, но небезопасно):
Для продакшена (только Nginx-команды):
Шаг 24. Проверяем
Должен показать список разрешённых команд. Теперь можно написать боту в Telegram «can you stop nginx?» - и он выполнит.
Часть 6. Конфигурируем OpenClaw
В ранней версии OpenClaw использовался единый "системный промпт" в качестве инструкций для агента - как себя вести, какие команды использовать, чего не делать. Сейчас OpenClaw использует систему из набора нескольких markdown-файлов, находящихся в ls -la ~/.openclaw/workspace/
- IDENTITY.md - Визитка - Имя агента, «существо» (AI/робот/призрак), эмодзи, аватар. Чисто косметика - влияет на то, как агент представляется
- SOUL.md - Системный промпт - Главный файл. Характер, принципы поведения, стиль общения, границы дозволенного. По сути - «конституция» агента
- TOOLS.md - Шпаргалка по инфраструктуре - Описание окружения: какие серверы, хосты, устройства, SSH-алиасы, пути. Отделён от SOUL, чтобы можно было менять инфру не трогая поведение
- USER.md - Досье на хозяина - Имя, таймзона, предпочтения, контекст проектов. Агент обновляет сам по мере общения - «учится» о тебе
- HEARTBEAT.md - Crontab - Периодические задачи. Если файл пустой - heartbeat отключён. Если написать задачи - агент выполняет их по расписанию и пишет в Telegram только если что-то не так
- BOOTSTRAP.md - Скрипт первого запуска - Инструкции, которые агент выполняет один раз при первом старте сессии
- AGENTS.md - Мультиагентный конфиг - Описание нескольких агентов с разными ролями (например, один следит за Docker, другой за безопасностью). Для продвинутого использования
Для нашей статьи минимально нужны три: SOUL.md (что делать и чего не делать), TOOLS.md (какое окружение) и HEARTBEAT.md (автоматические проверки). Остальные - по желанию. Их можно заполнять на русском языке, при условии что ИИ модель поддерживает русский и понимает его. В нашем случае:
- MiniMax M2.5:cloud - русский понимает, но обучена преимущественно на английском и китайском. На русском может терять точность в выполнении инструкций, особенно в сложных цепочках команд.
- Qwen3.5:cloud - аналогично, русский не в приоритете.
Мой совет: инструкции (SOUL.md, TOOLS.md) писать на английском - это рабочие команды для модели, точность важнее. А USER.md и IDENTITY.md - можно на русском, там нет критичной логики.
Шаг 25. Настраиваем файлы
Приведу пример файлов, можно изменить по своему усмотрению.
SOUL.md
TOOLS.md
IDENTITY.md
USER.md
HEARTBEAT.md
Часть 7. Ломаем и чиним - тесты
Тест 1. Останавливаем Nginx (простой кейс)
Ломаем через SSH:
Проверяем, что сломалось:
Теперь пишем боту в Telegram что-то типа:
Что агент делает за кулисами:
- curl http://localhost → Connection refused
- sudo systemctl status nginx → inactive (dead)
- sudo systemctl start nginx → Success
- curl http://localhost → HTTP 200 OK
- Отвечает: «Nginx был остановлен. Я его перезапустил, сайт работает (HTTP 200).»
Тест 2. Ломаем конфиг Nginx (средний кейс)
Этот интереснее - тут простой рестарт не поможет.
Ломаем:
Рестарт упадёт, потому что конфиг теперь невалидный. Проверяем:
Пишем боту, что-то типа:
Что агент делает:
- curl http://localhost → Connection refused
- sudo systemctl status nginx → failed
- sudo journalctl -u nginx -n 50 → ошибка конфига в логах
- sudo nginx -t → Syntax error на строке XX
- Читает /etc/nginx/nginx.conf, находит THIS_IS_BROKEN;
- Удаляет битую строку
- sudo nginx -t → Syntax is OK
- sudo systemctl restart nginx → Success
- curl http://localhost → HTTP 200
- Отвечает: «Nginx упал из-за невалидной директивы THIS_IS_BROKEN в nginx.conf. Удалил битую строку, проверил конфиг, перезапустил. Сайт работает.»
Агент не просто перезапустил сервис - он прочитал логи, нашёл root cause, исправил конфиг, проверил и отчитался. Из одного сообщения в Telegram.
Тест 3. Health-check
Необязательно ждать, пока что-то сломается. Пишем боту:
Ожидаемый ответ:
К слову, на моём тестовом стенде nginx и прочие микросервисы развёрнуты через docker compose - вот какой отчёт он мне присылает:
Уборка после тестов
Проверяем, что конфиг Nginx чистый:
Если показывает ошибки - восстанавливаем:
Что в итоге получилось
Полностью рабочий стек:
- Ubuntu 24.04 VPS - инфраструктура
- Nginx - веб-сервер на порту 80
- Ollama → MiniMax M2.5 cloud - LLM без нагрузки на VPS
- OpenClaw - AI-агент
- Telegram-бот - пульт управления
Вся тяжёлая AI-работа происходит в облаке (MiniMax), а на VPS крутится только лёгкий агент + веб-сервер. Поэтому и хватает 4GB RAM.
Если сломается Nginx, агент сам через некоторое время напишет в Telegram и сам всё починит - без единого SSH-подключения.
OpenClaw - не замена мониторингу. Grafana никуда не девается. Это другой слой: можно написать «что с сервером?» и получить не уведомление, а конкретный ответ с диагностикой. Для домашнего лаба или пары VPS - уже работает. Для продакшена с чем-то критичным - пока рано.
Идею взял из статьи "AI-Powered VPS Manager with OpenClaw, Ollama & Telegram".
Если понравилось и хочешь не пропустить следующие материалы - подпишись на канал Art Of Chain. Там про Web3, blockchain, AI и пр.