Два дня назад я опубликовал статью «Я посадил AI-агента на свой VPS и перестал открывать SSH». Реакция оказалась неожиданной: больше всего комментариев было не про сценарии использования, а про конкретику. «Покажи docker-compose», «дай скрипты», «как это повторить у себя».
По многочисленным просьбам выкладываю всё в open-source: конфиги, скрипты, docker-compose, deploy-скрипт — полный комплект, который можно клонировать и запустить за 10 минут.
Репозиторий: github.com/ShyDamn/openclaw-devops-kit
Лицензия — MIT. Берите, адаптируйте, делайте что хотите.
В этой статье — не просто «установи и запусти», а подробный разбор каждого компонента: что делает, зачем нужен, как адаптировать под себя. Чтобы при нештатной ситуации вы понимали, что происходит, а не работали с чёрной коробкой.
Что вы получите в итоге
AI-агент в Telegram, который живёт на вашем VPS и умеет:
-
Показывать статус контейнеров, логи, потребление ресурсов
-
Перезапускать контейнеры и docker compose проекты
-
Выполнять SQL-запросы в PostgreSQL (сам находит креды из переменных окружения контейнера)
-
Проверять сайты по HTTP и автоматически перезапускать упавшие
-
Смотреть ошибки Nginx, проверять fail2ban, искать подозрительные процессы
-
Управлять задачами в YouTrack, триггерить n8n-автоматизации
-
Каждый час самостоятельно проверять, что всё работает (heartbeat)
-
Редактировать файлы и код на сервере
При этом вы общаетесь с ним на человеческом языке. Не docker logs --tail 100 my-container-name, а «покажи последние логи auth-сервиса». Не docker exec postgres psql -U user -d mydb -c "SELECT COUNT(*) FROM users WHERE created_at > NOW() - INTERVAL '7 days'", а «сколько юзеров зарегалось за неделю».
Требования
-
VPS с Ubuntu 20.04+ (или любой Linux с Docker). Минимум 2 ГБ RAM — агент потребляет ~300–500 МБ.
-
Docker + Docker Compose V2. Проверить:
docker compose version. Если нет — docs.docker.com/engine/install. -
API-ключ OpenRouter (openrouter.ai/keys) — единый ключ для GPT-4o, Claude, Gemini, DeepSeek. Хватит $5–10 на месяц при активном использовании. Можно и напрямую через OpenAI или Anthropic, но OpenRouter удобнее: фолбэки между моделями, единый биллинг, все провайдеры в одном месте.
-
Telegram-бот от @BotFather.
Архитектура: что мы строим
Прежде чем лезть в конфиги — давайте разберёмся, из чего состоит система. Вот общая схема:
Вы (Telegram на телефоне/десктопе) │ ▼Telegram Bot API │ ▼Docker: openclaw-gateway (ghcr.io/openclaw/openclaw) │ ├── Читает workspace/SOUL.md — кто он, как себя вести ├── Читает workspace/USER.md — кто вы, какие проекты ├── Читает workspace/HEARTBEAT.md — что проверять каждый час │ ├── Вызывает /tools/*.sh — скрипты мониторинга и управления │ ├── docker-status.sh, docker-logs.sh, docker-restart.sh │ ├── system-stats.sh, health-check.sh, security-check.sh │ ├── db-discover.sh, db-query.sh │ ├── nginx-errors.sh, project-restart.sh │ └── youtrack-api.sh, n8n-workflows.sh, firecrawl.sh, context7.sh │ ├── Имеет доступ к Docker через /var/run/docker.sock ├── Видит все проекты через /var/www:/projects └── Читает логи Nginx через /var/log/nginx
Ключевое: OpenClaw — это готовый open-source Docker-образ (ghcr.io/openclaw/openclaw). Мой репозиторий — не форк, а набор конфигов и скриптов, которые превращают голый образ в DevOps-ассистента. Вы клонируете конфиги, адаптируете под свой сервер, запускаете.
Шаг 1: Клонируем репозиторий
ssh user@your-servergit clone https://github.com/ShyDamn/openclaw-devops-kit.git /tmp/openclaw-setupcd /tmp/openclaw-setup
Если git не установлен:
curl -L https://github.com/ShyDamn/openclaw-devops-kit/archive/main.tar.gz | tar xzcd openclaw-devops-kit-main
Давайте посмотрим, что внутри:
openclaw-devops-kit/├── docker-compose.yml # Docker-конфиг├── .env.example # Шаблон переменных окружения├── deploy.sh # Скрипт автоматического деплоя├── LICENSE # MIT├── config/│ └── openclaw.json # Конфиг агента (модели, Telegram, heartbeat)├── workspace/│ ├── SOUL.md # Личность и правила агента│ ├── USER.md # Контекст о пользователе│ ├── HEARTBEAT.md # Чеклист для периодических проверок│ └── TOOLS.md # Справка по скриптам└── tools/ # 14 bash-скриптов ├── docker-status.sh # Статус контейнеров ├── docker-logs.sh # Логи контейнера ├── docker-restart.sh # Перезапуск контейнера ├── project-restart.sh # Перезапуск docker compose проекта ├── system-stats.sh # RAM, CPU, диск ├── db-discover.sh # Авто-обнаружение PostgreSQL БД ├── db-query.sh # SQL-запрос с авто-определением кредов ├── health-check.sh # HTTP-проверка сайтов + авто-рестарт ├── nginx-errors.sh # Ошибки Nginx ├── security-check.sh # fail2ban, подозрительные процессы ├── youtrack-api.sh # YouTrack REST API ├── n8n-workflows.sh # n8n автоматизации ├── firecrawl.sh # Скрапинг веб-страниц └── context7.sh # Документация библиотек
Шаг 2: Создаём Telegram-бота
-
Открываем @BotFather в Telegram
-
/newbot→ выбираем имя → получаем токен вида123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 -
Узнаём свой Telegram ID — пишем @userinfobot, он ответит числом вроде
778921250
Запоминаем оба значения.
Шаг 3: Заполняем .env
cp .env.example .envnano .env
Обязательные поля:
TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxxxxxxxxxx
Опциональные (если используете YouTrack, Firecrawl):
YOUTRACK_TOKEN=perm:your-token-hereFIRECRAWL_API_KEY=fc-your-key-here
Шаг 4: Указываем Telegram ID
nano config/openclaw.json
Находим "allowFrom" и вписываем свой ID:
"allowFrom": [ "tg:778921250"]
Это whitelist. Бот будет отвечать только на сообщения от указанных ID. Все остальные — игнорируются. Можно добавить несколько ID через запятую, если доступ нужен коллеге.
Шаг 5: Описываем контекст
Это самый важный шаг. Именно контекстные файлы — разница между «GPT в Telegram» и реально работающим ассистентом. Без них агент будет на каждый чих переспрашивать: «Какой контейнер? Какой пароль от базы? Укажите путь к файлу».
SOUL.md — правила поведения
nano workspace/SOUL.md
В шаблоне уже описаны базовые правила. Что нужно адаптировать:
1. Список PostgreSQL-контейнеров. Агент должен знать, где искать базы данных:
## Контейнеры PostgreSQL: db1, db2, db3
2. Таблица проектов. Какой проект в какой папке, какой стек:
| Путь | Проект | Стек ||------|--------|------|| /projects/my-app/ | Мой SaaS | Next.js + PostgreSQL || /projects/api/ | Бэкенд | NestJS || /projects/landing/ | Лендинг | HTML + Nginx |
3. Правила безопасности. В шаблоне уже настроено: чтение без подтверждения, изменения — с подтверждением. Адаптируйте под свои потребности.
Почему это критично: когда вы пишете «покажи логи auth-сервиса», агент должен сам знать, что auth-сервис — это контейнер my-auth-container. Когда пишете «сколько юзеров за неделю» — он должен знать, в каком контейнере база и как к ней подключиться. Без контекста он будет каждый раз переспрашивать, и весь смысл теряется.
USER.md — контекст о вас
nano workspace/USER.md
Кто вы, какой стек, какие проекты, часовой пояс. Агент читает это при каждой сессии.
Шаг 6: Настраиваем мониторинг сайтов
nano tools/health-check.sh
Находим массив SITES и вписываем свои домены:
SITES=( "mysite.ru|mysite-frontend|mysite" "api.mysite.ru|mysite-api|mysite" "admin.mysite.ru|admin-panel|admin")
Формат: домен|имя_контейнера|папка_проекта. Скрипт проверяет HTTP-код каждого домена. Если 5xx или таймаут — автоматически перезапускает контейнер и проверяет снова. Если после рестарта не починилось — сообщает RESTART FAILED, и агент пишет вам срочное уведомление.
Шаг 7: Запускаем
bash deploy.sh
Скрипт сделает всё автоматически:
-
Проверит, что Docker и Docker Compose V2 установлены
-
Создаст
/var/www/openclaw/и скопирует файлы -
Проверит, что
.envи Telegram ID заполнены -
Определит GID группы docker на хосте и пропишет в
.env -
Установит
chmod 600на.env -
Скачает Docker-образ OpenClaw
-
Запустит контейнер
После запуска — привязываем Telegram. Напишите что-нибудь боту. Он пришлёт код подтверждения:
cd /var/www/openclawdocker compose run --rm --profile cli openclaw-cli pairing approve telegram <КОД>
Готово. Пишите боту в Telegram.
Разбор скриптов-инструментов
Скрипты монтируются внутрь контейнера в /tools/ (read-only) и доступны агенту. Он сам выбирает нужный скрипт на основе контекста из SOUL.md. Вы пишете задачу на человеческом языке — агент решает, какой инструмент вызвать.
Давайте разберём каждый.
docker-status.sh — статус контейнеров
#!/bin/bashdocker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" --no-trunc
Простейший скрипт — отформатированный вывод docker ps. Агент вызывает его когда вы спрашиваете «что запущено», «какой статус контейнеров», или в рамках heartbeat.
docker-logs.sh — логи контейнера
#!/bin/bashCONTAINER="${1:?Usage: docker-logs.sh <container_name> [lines]}"LINES="${2:-50}"docker logs --tail "$LINES" "$CONTAINER" 2>&1
Обёртка над docker logs с дефолтом в 50 строк. «Покажи логи auth-сервиса» → агент знает из SOUL.md, что auth-сервис — это контейнер auth-container, и вызывает docker-logs.sh auth-container.
system-stats.sh — ресурсы сервера
#!/bin/bashecho "=== RAM ==="free -hecho ""echo "=== DISK ==="df -h / | tail -1echo ""echo "=== CPU Load ==="uptimeecho ""echo "=== Top by RAM ==="docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" | head -15
Четыре команды в одном скрипте: RAM, диск, нагрузка CPU и top контейнеров по потреблению. Используется в heartbeat для мониторинга ресурсов и по прямому запросу.
db-discover.sh — авто-обнаружение всех баз данных
#!/bin/bashfor c in $(docker ps --format '{{.Names}}' | grep -i postgres); do echo "=== $c ===" DB_USER=$(docker exec "$c" printenv POSTGRES_USER 2>/dev/null) DB_NAME=$(docker exec "$c" printenv POSTGRES_DB 2>/dev/null) [ -z "$DB_USER" ] && DB_USER="postgres" [ -z "$DB_NAME" ] && DB_NAME="postgres" echo "User: $DB_USER | DB: $DB_NAME" docker exec "$c" psql -U "$DB_USER" -d "$DB_NAME" -c "\dt" 2>/dev/null || echo "Connection failed" echo ""done
Этот скрипт — одна из самых полезных штук в наборе. Он обходит все запущенные PostgreSQL-контейнеры на сервере, достаёт креды из переменных окружения (POSTGRES_USER, POSTGRES_DB), подключается и показывает список таблиц.
Зачем: когда у вас 5 PostgreSQL-контейнеров для разных проектов, и вы не помните, в каком из них лежит таблица orders — агент запускает db-discover.sh и находит сам. Без этого скрипта ему пришлось бы спрашивать у вас строку подключения, а весь смысл автоматизации теряется.
db-query.sh — SQL-запрос с авто-определением кредов
#!/bin/bashCONTAINER="${1:?Usage: db-query.sh <container> <query> [db]}"QUERY="${2:?}"DB_OVERRIDE="${3:-}"DB_USER=$(docker exec "$CONTAINER" printenv POSTGRES_USER 2>/dev/null)DB_NAME=$(docker exec "$CONTAINER" printenv POSTGRES_DB 2>/dev/null)[ -z "$DB_USER" ] && DB_USER="postgres"[ -z "$DB_NAME" ] && DB_NAME="postgres"[ -n "$DB_OVERRIDE" ] && DB_NAME="$DB_OVERRIDE"docker exec "$CONTAINER" psql -U "$DB_USER" -d "$DB_NAME" -c "$QUERY" 2>&1
Принцип тот же: креды берутся из переменных окружения контейнера. Не нужно хранить пароли в конфигах агента и не нужно передавать их в чате.
Агент использует это так: вы пишете «сколько юзеров зарегалось за неделю в базе auth», он генерирует SQL, определяет контейнер по контексту из SOUL.md и выполняет запрос.
health-check.sh — HTTP-проверка сайтов с авто-рестартом
#!/bin/bashSITES=( "example.com|my-frontend|my-project" "api.example.com|my-api|my-project")ISSUES=""for site_info in "${SITES[@]}"; do IFS='|' read -r DOMAIN CONTAINER PROJECT <<< "$site_info" HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "https://$DOMAIN") if [ "$HTTP_CODE" -ge 500 ] || [ "$HTTP_CODE" -eq 000 ]; then ISSUES+="CRITICAL: $DOMAIN returns $HTTP_CODE. Container: $CONTAINER. " docker restart "$CONTAINER" 2>/dev/null sleep 10 HTTP_CODE_AFTER=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "https://$DOMAIN") if [ "$HTTP_CODE_AFTER" -ge 500 ] || [ "$HTTP_CODE_AFTER" -eq 000 ]; then ISSUES+="RESTART FAILED — still $HTTP_CODE_AFTER after restart. " else ISSUES+="AUTO-FIXED — now $HTTP_CODE_AFTER after restart. " fi fidone[ -n "$ISSUES" ] && echo "$ISSUES" || echo "ALL_SITES_OK"
Самый ценный скрипт для heartbeat. Логика:
-
Обходит все сайты из массива
SITES -
Делает HTTP-запрос с таймаутом 10 секунд
-
Если 5xx или таймаут (код 000) — автоматически перезапускает контейнер
-
Ждёт 10 секунд и проверяет снова
-
Если починилось —
AUTO-FIXED, если нет —RESTART FAILED
Агент в heartbeat интерпретирует результат: ALL_SITES_OK → молчит, AUTO-FIXED → сообщает что починил, RESTART FAILED → пишет срочное уведомление.
security-check.sh — базовая проверка безопасности
#!/bin/bashecho "=== FAIL2BAN ==="fail2ban-client status sshd 2>/dev/null || echo "fail2ban not running"echo "=== BLOCKED IPS (last 24h) ==="grep "Ban " /var/log/fail2ban.log 2>/dev/null | tail -10echo "=== NGINX CONNECTIONS ==="ss -tn state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10echo "=== NGINX 4xx/5xx LAST HOUR ==="awk -v d="$(date -d '1 hour ago' '+%d/%b/%Y:%H')" '$4 ~ d && ($9 >= 400)' \ /var/log/nginx/access.log 2>/dev/null | awk '{print $9}' | sort | uniq -c | sort -rn | head -5echo "=== SUSPICIOUS PROCESSES ==="ps aux --sort=-%cpu | awk '$3 > 50 {print}' | head -5
Пять проверок в одном скрипте: fail2ban, заблокированные IP за сутки, top-10 IP по количеству соединений, 4xx/5xx ошибки Nginx за последний час, процессы с CPU > 50% (потенциальные майнеры).
Одна команда в Telegram «проверь безопасность» вместо четырёх разных утилит в SSH.
youtrack-api.sh — управление задачами
#!/bin/bashYT_URL="${YOUTRACK_URL:-http://127.0.0.1:8080}"YT_TOKEN="${YOUTRACK_TOKEN:-}"# ... обёртка над YouTrack REST API# projects, issues, create, assign, state, users, agiles
REST API обёртка для YouTrack. Если у вас YouTrack в Docker на том же сервере — он доступен через localhost. Поддерживает: список проектов, задачи, создание, назначение, смена статуса.
«Создай задачу в проекте SA: добавить rate limiting» → агент вызывает youtrack-api.sh create ... и возвращает номер задачи.
n8n-workflows.sh — триггер автоматизаций
#!/bin/bashACTION="${1:-list}"N8N_URL="${N8N_URL:-http://127.0.0.1:5678}"case "$ACTION" in list) curl -s "$N8N_URL/api/v1/workflows" -H "Accept: application/json" | head -200 ;; trigger) curl -s -X POST "$N8N_URL/webhook/${2:?}" -H "Content-Type: application/json" -d "${3:-{}}" ;;esac
Если используете n8n для автоматизаций — агент может просматривать список workflows и триггерить вебхуки.
firecrawl.sh и context7.sh — вспомогательные
firecrawl.sh — скрапинг веб-страниц через Firecrawl API. Агент может «зайти» на сайт и прочитать контент. Полезно для исследования документации, проверки что сайт показывает правильный контент.
context7.sh — актуальная документация библиотек. Когда нужна свежая дока по React, Next.js или другой библиотеке — агент получает её через Context7, а не полагается на свои устаревшие знания.
Docker Compose: разбор конфигурации
services: openclaw-gateway: image: ghcr.io/openclaw/openclaw:latest container_name: openclaw-gateway restart: unless-stopped ports: - "127.0.0.1:18789:18789" volumes: - ./config:/home/node/.openclaw - ./workspace:/home/node/.openclaw/workspace - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker:ro - /var/www:/projects - ./tools:/tools:ro - /var/log/nginx:/var/log/nginx:ro - /usr/libexec/docker/cli-plugins:/usr/libexec/docker/cli-plugins:ro env_file: - .env environment: - NODE_OPTIONS=--max-old-space-size=2048 group_add: - "${DOCKER_GID:-999}" init: true command: ["node", "dist/index.js", "gateway", "--bind", "lan", "--port", "18789"] healthcheck: test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:18789/healthz').then(r=>{if(!r.ok)throw 1})"] interval: 30s timeout: 10s retries: 3 start_period: 30s cap_drop: [NET_RAW, NET_ADMIN] security_opt: [no-new-privileges:true] mem_limit: 3g memswap_limit: 3g
Разберём ключевые решения.
/var/run/docker.sock — даёт агенту возможность управлять контейнерами на хосте. Без этого docker ps, docker restart, docker logs изнутри контейнера не работают. Это самый «опасный» маунт — по сути, это root-доступ к Docker daemon. Но без него агент бесполезен.
/var/www:/projects — агент видит все проекты на сервере. По умолчанию read-write, чтобы мог редактировать код. Если хотите ограничить — поменяйте на /var/www:/projects:ro.
./tools:/tools:ro — скрипты доступны только на чтение. Агент может их вызывать, но не модифицировать.
/var/log/nginx:/var/log/nginx:ro — для скрипта nginx-errors.sh.
/usr/libexec/docker/cli-plugins:/usr/libexec/docker/cli-plugins:ro — без этого docker compose внутри контейнера не работает. Docker Compose V2 — это плагин, а не отдельный бинарник.
group_add: "${DOCKER_GID:-999}" — GID группы docker на хосте. Контейнер работает от пользователя node (не root), и ему нужны права на docker.sock. Deploy-скрипт автоматически определяет GID и прописывает в .env.
cap_drop + no-new-privileges — ограничение привилегий контейнера. NET_RAW и NET_ADMIN не нужны, no-new-privileges запрещает повышение привилегий внутри контейнера.
mem_limit: 3g — чтобы агент сам не съел всю память на сервере. OpenClaw написан на Node.js, и без ограничения V8 может разрастаться.
Конфиг агента: openclaw.json
Полный файл в репозитории, здесь — ключевые секции с объяснениями.
Модели и фолбэки
"model": { "primary": "openrouter/openai/gpt-4o", "fallbacks": [ "openrouter/deepseek/deepseek-chat-v3-0324", "openrouter/google/gemini-2.5-flash" ]}
Основная модель — GPT-4o через OpenRouter. Если rate limit или ошибка — агент автоматически переключается на DeepSeek, затем на Gemini Flash. Вы даже не заметите — ответ придёт от другой модели, но поведение останется тем же (благодаря SOUL.md).
Heartbeat
"heartbeat": { "every": "1h", "model": "openrouter/deepseek/deepseek-chat-v3-0324", "target": "last", "directPolicy": "allow", "lightContext": true}
Каждый час агент «просыпается» на дешёвой модели (DeepSeek — центы за запрос) и выполняет чеклист из HEARTBEAT.md. Результат: если всё ок — молчит (HEARTBEAT_OK). Если есть проблемы — пишет вам в Telegram.
lightContext: true — при heartbeat загружается минимум контекста, чтобы экономить токены. Полный контекст грузится только при прямом общении.
Сессии
"session": { "reset": { "mode": "idle", "idleMinutes": 180 }}
Контекст разговора живёт 3 часа бездействия. Можно утром написать «помоги с nginx-конфигом», через час уточнить «а добавь туда rate limiting» — агент помнит, о каком конфиге речь. Через 3 часа молчания — новая сессия.
HEARTBEAT.md — автоматический мониторинг
# HEARTBEAT## Проверки (выполняй ВСЕ по порядку)1. `bash /tools/health-check.sh` — HTTP-проверка всех сайтов - AUTO-FIXED → сообщи что починил - RESTART FAILED → сообщи СРОЧНО - ALL_SITES_OK → молчи2. `bash /tools/docker-status.sh` — контейнеры - unhealthy/exited → перезапусти и сообщи3. `bash /tools/system-stats.sh` — ресурсы - RAM < 500MB → сообщи - Диск > 90% → сообщи4. Всё ок → HEARTBEAT_OK## Правила- Ночью (00:00–08:00) без срочности не пиши- CRITICAL сайтов — пиши ВСЕГДА, даже ночью- Не повторяй уже сообщённое
Это конфигурируемый чеклист. Агент выполняет его буквально: запускает скрипты по порядку, интерпретирует результаты, принимает решение — писать вам или молчать.
Разница с обычным мониторингом (Grafana, Prometheus): те говорят «плохо», а агент говорит «плохо, потому что вот это, и я уже починил». Разница между пожарной сигнализацией и пожарным.
Как расширять
Добавить свой скрипт
Принцип простой: bash-скрипт + описание в SOUL.md.
-
Создайте файл в
tools/:
#!/bin/bash# tools/my-tool.sh — описаниеecho "result"
-
chmod +x tools/my-tool.sh -
Добавьте в
workspace/SOUL.md:
## Мой инструмент- `bash /tools/my-tool.sh <arg>` — что делает
-
Перезапустите:
docker compose restart openclaw-gateway
Любое API, до которого достучится контейнер (внутренние сервисы, REST API, даже внешние сервисы), можно обернуть в bash-скрипт и дать агенту. YouTrack, n8n, Grafana API, Slack webhooks — всё что угодно.
Безопасность
Этот вопрос был самым частым в комментариях к первой статье. Разберём по пунктам.
Whitelist по Telegram ID. Бот отвечает только на ID из allowFrom. Все остальные сообщения игнорируются. Это первый и самый важный барьер — без вашего Telegram ID никто не может отправить команду агенту.
Docker-контейнер. Агент работает от пользователя node, не от root хоста. Да, у него есть доступ к docker.sock — это эквивалент root на Docker, но не на хосте.
.env с chmod 600. API-ключи и токены недоступны другим пользователям на сервере.
cap_drop + no-new-privileges. Ограничение сетевых привилегий и запрет на повышение прав внутри контейнера.
Двухуровневые операции. Настраивается в SOUL.md:
-
Чтение (логи, файлы, SELECT) — без подтверждения
-
Изменения (DELETE, UPDATE, редактирование кода) — только с вашим approve
Главный риск — не взлом, а ошибка агента. Он может неправильно интерпретировать задачу. Поэтому деструктивные операции — только с подтверждением. Это как code review, только через Telegram.
Полезные команды после установки
cd /var/www/openclaw# Логи агентаdocker compose logs -f openclaw-gateway# Перезапускdocker compose restart openclaw-gateway# Обновление образаdocker compose pull && docker compose up -d# Диагностикаdocker compose run --rm --profile cli openclaw-cli doctor# Статус моделей и авторизацииdocker compose run --rm --profile cli openclaw-cli models status
Сколько стоит
При активном использовании (10–30 запросов в день + heartbeat каждый час на дешёвой модели) — $5–15 в месяц через OpenRouter. Heartbeat на DeepSeek стоит копейки. Основные расходы — GPT-4o или Claude на сложные задачи (дебаг, редактирование кода, длинные SQL).
Итого
Репозиторий: github.com/ShyDamn/openclaw-devops-kit
Внутри: docker-compose, конфиги, 14 скриптов, deploy-скрипт, шаблоны контекстных файлов. MIT лицензия.
Время установки: 10 минут. Нужно: VPS с Docker, API-ключ OpenRouter, Telegram-бот.
Клонируйте, адаптируйте контекст под свой сервер, запустите. Если будут вопросы по конкретным сценариям или нюансам настройки — спрашивайте в комментариях.
ссылка на оригинал статьи https://habr.com/ru/articles/1022304/