Два дня назад я опубликовал статью «Я посадил 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-server git clone https://github.com/ShyDamn/openclaw-devops-kit.git /tmp/openclaw-setup cd /tmp/openclaw-setup
Если git не установлен:
curl -L https://github.com/ShyDamn/openclaw-devops-kit/archive/main.tar.gz | tar xz cd 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 .env nano .env
Обязательные поля:
TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxxxxxxxxxx
Опциональные (если используете YouTrack, Firecrawl):
YOUTRACK_TOKEN=perm:your-token-here FIRECRAWL_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/openclaw docker compose run --rm --profile cli openclaw-cli pairing approve telegram <КОД>
Готово. Пишите боту в Telegram.
Разбор скриптов-инструментов
Скрипты монтируются внутрь контейнера в /tools/ (read-only) и доступны агенту. Он сам выбирает нужный скрипт на основе контекста из SOUL.md. Вы пишете задачу на человеческом языке — агент решает, какой инструмент вызвать.
Давайте разберём каждый.
docker-status.sh — статус контейнеров
#!/bin/bash docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" --no-trunc
Простейший скрипт — отформатированный вывод docker ps. Агент вызывает его когда вы спрашиваете «что запущено», «какой статус контейнеров», или в рамках heartbeat.
docker-logs.sh — логи контейнера
#!/bin/bash CONTAINER="${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/bash echo "=== RAM ===" free -h echo "" echo "=== DISK ===" df -h / | tail -1 echo "" echo "=== CPU Load ===" uptime echo "" 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/bash for 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/bash CONTAINER="${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/bash SITES=( "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 fi done [ -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/bash echo "=== 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 -10 echo "=== NGINX CONNECTIONS ===" ss -tn state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10 echo "=== 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 -5 echo "=== 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/bash YT_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/bash ACTION="${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-бот.
Клонируйте, адаптируйте контекст под свой сервер, запустите. Если будут вопросы по конкретным сценариям или нюансам настройки — спрашивайте в комментариях.
Комментарии (3)

nurlan777
11.04.2026 17:59один сервер и все на докере... девопсом тут и не пахнет, скорее всего автоматизация рутины сисадмина джуна
Actek92
Он не сносит на автомате твои файлы, болячки эти прошли или бэкап наше все?
ShyDamn Автор
Нет, по умолчанию он ничего не сносит. Чтение - без подтверждения, а любые опасные действия вроде удаления, перезапуска, правок кода или SQL с изменением данных идут только после явного approve.