Часть 2: OpenClaw в open-source — полный гайд по установке AI-агента на VPS

от автора

Два дня назад я опубликовал статью «Я посадил 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-бота

  1. Открываем @BotFather в Telegram

  2. /newbot → выбираем имя → получаем токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

  3. Узнаём свой 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

Скрипт сделает всё автоматически:

  1. Проверит, что Docker и Docker Compose V2 установлены

  2. Создаст /var/www/openclaw/ и скопирует файлы

  3. Проверит, что .env и Telegram ID заполнены

  4. Определит GID группы docker на хосте и пропишет в .env

  5. Установит chmod 600 на .env

  6. Скачает Docker-образ OpenClaw

  7. Запустит контейнер

После запуска — привязываем 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. Логика:

  1. Обходит все сайты из массива SITES

  2. Делает HTTP-запрос с таймаутом 10 секунд

  3. Если 5xx или таймаут (код 000) — автоматически перезапускает контейнер

  4. Ждёт 10 секунд и проверяет снова

  5. Если починилось — 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.

  1. Создайте файл в tools/:

#!/bin/bash# tools/my-tool.sh — описаниеecho "result"
  1. chmod +x tools/my-tool.sh

  2. Добавьте в workspace/SOUL.md:

## Мой инструмент- `bash /tools/my-tool.sh <arg>` — что делает
  1. Перезапустите: 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/