Обычная установка OpenClaw через npm install -g openclaw работает. Но у нее есть проблемы. Node.js нужной версии нет. Зависимости конфликтуют. На сервере вообще ничего ставить не хочется.
Я перевел всех своих агентов на Docker полгода назад. Один docker compose up -- и все работает. На любой машине, на любом сервере, без танцев с Node.js.
Покажу как сделать то же самое за 5 минут.
Почему Docker, а не npm install
OpenClaw -- это платформа для запуска ИИ-агентов. Работает с любой LLM через API: Claude, GPT, Gemini, локальные модели через Ollama. Активно развивается с 2026 года.
Стандартная установка через npm выглядит просто: npm install -g openclaw. Но на практике возникают пять проблем:
Первое: версии Node.js. OpenClaw требует Node 20+. На сервере может стоять 18 или 16. Ставить nvm, переключать версии, следить за совместимостью -- лишняя головная боль.
Второе: зависимости конфликтуют. Глобальный npm -- зона хаоса. Один пакет обновился, другой сломался. Знакомо?
Третье: изоляция. Если запускаешь несколько агентов с разными конфигурациями -- глобальная установка не дает держать их отдельно.
Четвертое: переезд на новый сервер. При npm install нужно заново ставить все зависимости. При Docker -- скопировал папку, docker compose up, работает.
Пятое: на проде не нужен глобальный npm. Чем меньше установлено на сервере -- тем безопаснее.
Docker решает все пять. Контейнер содержит нужную версию Node.js, все зависимости изолированы, каждый агент в своем контейнере, переезд = копирование папки.

Что нужно перед началом
Две вещи:
Docker Desktop (для Mac/Windows) или docker + docker-compose (для Linux/VPS). На Mac и Windows -- скачиваешь с docker.com, ставишь, все. На Linux VPS:
curl -fsSL https://get.docker.com | sh
API-ключ для языковой модели. Для Claude -- ключ из console.anthropic.com. Для GPT -- из platform.openai.com. Для локальных моделей через Ollama -- ничего не нужно, все локально.
Проверь что Docker работает: docker --version. Если видишь версию -- все готово.
Пошаговая установка
Шаг 1: создай структуру файлов
Три файла + одна папка. Вот вся структура:
openclaw-agent/
docker-compose.yml
.env
workspace/
SOUL.md
docker-compose.yml -- конфигурация контейнера. .env -- секреты (API-ключи). workspace/ -- рабочая папка агента. SOUL.md -- инструкция для агента (роль, миссия, правила).

Шаг 2: docker-compose.yml
Создай файл docker-compose.yml:
version: '3.8'
services:
agent:
image: openclaw/openclaw:latest
container_name: openclaw-agent
restart: unless-stopped
env_file: .env
volumes:
- ./workspace:/app/workspace
ports:
- "3000:3000"
Что здесь происходит. image -- официальный Docker-образ OpenClaw. restart: unless-stopped -- агент перезапускается при падении. env_file -- подтягивает переменные из .env. volumes -- папка workspace проброшена в контейнер, данные агента сохраняются на диске. ports -- веб-интерфейс на порту 3000 (опционально).
Шаг 3: файл .env
Создай файл .env:
ANTHROPIC_API_KEY=sk-ant-xxxxxxxx
MODEL=claude-sonnet-4-20250514
TELEGRAM_BOT_TOKEN=123456:ABCdefGHI
AGENT_NAME=my-assistant
ANTHROPIC_API_KEY -- ключ из console.anthropic.com. MODEL -- какую модель использовать. TELEGRAM_BOT_TOKEN -- токен бота из @BotFather (если хочешь общаться через Telegram). AGENT_NAME -- имя агента для логов.
Важно: .env содержит секреты. Добавь его в .gitignore если используешь git.
Шаг 4: SOUL.md -- инструкция для агента
SOUL.md -- это главный файл. Он определяет кто твой агент, что он делает, как себя ведет. Не путай с CLAUDE.md из Claude Code -- формат похожий, но SOUL.md специфичен для OpenClaw.
Создай workspace/SOUL.md:
# Мой ассистент
## Роль
Ты -- персональный ассистент Максима.
## Задачи
- Отвечай на вопросы по базе знаний
- Генерируй посты для Telegram-канала
- Делай ежедневные сводки по метрикам
## Правила
- Отвечай на русском
- Короткие ответы, без воды
- Если не знаешь -- скажи прямо
Чем подробнее инструкция -- тем лучше работает агент. Относись к SOUL.md как к онбордингу нового сотрудника: расскажи все, что ему нужно знать для работы.
Шаг 5: запуск
Все готово. Одна команда:
cd openclaw-agent && docker compose up -d
Флаг -d запускает в фоне. Проверь что контейнер работает: docker compose ps. Посмотри логи: docker compose logs -f agent. Если видишь "Agent started" -- все работает. Пиши боту в Telegram.
Конфигурация: каналы, память, инструменты
Каналы. OpenClaw поддерживает несколько каналов: Telegram, WhatsApp, Discord, Slack, веб-чат. Каждый канал подключается через переменные окружения в .env. Telegram -- самый простой: нужен только BOT_TOKEN от @BotFather.
Память. Агент помнит контекст между сессиями. Память хранится в workspace/memory/. При перезапуске контейнера данные не теряются, потому что папка workspace проброшена через volumes. Агент помнит кто ты, какие задачи ставил, что обсуждали раньше.
Инструменты. Агент может подключаться к внешним сервисам через MCP. Notion, Google Workspace, GitHub, базы данных -- все через конфигурационный файл. Добавляешь MCP-сервер в конфиг, агент получает доступ.
Продвинутая конфигурация: несколько агентов
Один docker-compose.yml может запускать несколько агентов. Каждый -- в своем контейнере, со своим SOUL.md и набором инструментов.
version: '3.8'
services:
writer:
image: openclaw/openclaw:latest
container_name: oc-writer
env_file: .env.writer
volumes:
- ./writer-workspace:/app/workspace
- ./shared:/app/shared
researcher:
image: openclaw/openclaw:latest
container_name: oc-researcher
env_file: .env.researcher
volumes:
- ./researcher-workspace:/app/workspace
- ./shared:/app/shared
Обрати внимание на shared volume -- общую папку между агентами. Через нее агенты могут обмениваться данными: исследователь кладет результаты, писатель забирает для статьи.

Фиксация версии через Dockerfile
Для прода рекомендую зафиксировать версию OpenClaw. Создай Dockerfile:
FROM openclaw/openclaw:1.2.3
COPY ./workspace /app/workspace
Вместо 1.2.3 -- конкретная версия. Это гарантирует, что обновление OpenClaw не сломает рабочего агента.
Healthcheck и логирование
Добавь healthcheck в docker-compose.yml:
services:
agent:
...
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
healthcheck проверяет что агент жив каждые 30 секунд. logging ограничивает размер логов -- без этого диск может забиться.
Типичные проблемы и решения
"Container exited with code 1". Обычно -- неправильный API-ключ или отсутствует .env файл. Проверь: docker compose logs agent. Ищи строку с ошибкой.
"Permission denied на volumes". На Linux: chmod -R 777 workspace/ (для быстрого фикса) или настрой правильного пользователя в Dockerfile.
"Бот не отвечает в Telegram". Три причины: 1) неправильный TELEGRAM_BOT_TOKEN, 2) бот не запущен (проверь docker compose ps), 3) webhook конфликтует -- убедись что только один процесс слушает токен.
"Память не сохраняется между перезапусками". Проверь volumes в docker-compose.yml. Папка workspace должна быть проброшена: ./workspace:/app/workspace.
"Как обновить OpenClaw". docker compose pull && docker compose up -d. Если зафиксировал версию -- поменяй тег в Dockerfile и пересобери: docker compose build && docker compose up -d.
Безопасность на проде
Несколько правил для продакшена:
.env в .gitignore -- всегда. API-ключи не должны попадать в репозиторий.
Не запускай от root. Создай отдельного пользователя для Docker: useradd -m openclaw && usermod -aG docker openclaw.
Ограничь ресурсы. Добавь лимиты в docker-compose.yml: deploy.resources.limits.memory: 512m. Агент не должен съедать весь сервер.
Бэкапь workspace. Память агента и его данные лежат в workspace/. Делай регулярные бэкапы этой папки. Потерять память агента -- как уволить сотрудника и забыть провести передачу дел.
Итого
Docker + OpenClaw = предсказуемая, изолированная, переносимая установка. Три файла, одна команда, агент работает.
Для базового старта хватит 5 минут. Продвинутая конфигурация с несколькими агентами, healthcheck и безопасностью -- еще 30 минут.
Если еще не знакомы с OpenClaw -- начни со статьи что такое OpenClaw и как он работает. Если хочешь подключить Telegram -- читай настройку OpenClaw для Telegram.
Если что-то пошло не так при установке -- пиши в Telegram, разберемся.
