🐳 Docker Services
clowbot запускается в Docker Compose с 8+ сервисами. Каждый сервис имеет свою роль, изолирован в контейнере и связан с другими через Docker network.
Архитектура сервисов
📋 Сводная таблица
| Сервис | Порт | Образ | Health Check |
|---|---|---|---|
| 🐘 PostgreSQL | 25432 | postgres:15 | pg_isready |
| 🤖 Bot | 8000, 28000 | custom Dockerfile | /health |
| ⚡ n8n | 25678 | n8nio/n8n | GET / |
| 🧠 Ollama | 21435 | ollama/ollama | ollama list |
| 📊 Prometheus | 29090 | prom/prometheus | /-/ready |
| 🔔 Alertmanager | 29093 | prom/alertmanager | - |
| 🌐 Selenium | 4444 | selenium/standalone-chrome | /wd/hub/status |
| 🎤 Whisper | 9000 | ahmadunchawan/whisper-asr | GET / |
Описание сервисов
Центр истины платформы. Хранит все данные: пользователи, чаты, процессы, агенты, политики, workflow, аудит, транскрипции, напоминания.
db/init/*.sql
postgres_data
clowbot
clowbot
postgres:
image: postgres:15
environment:
POSTGRES_DB: clowbot
POSTGRES_USER: clowbot
POSTGRES_PASSWORD: clowbot_pass
volumes:
- postgres_data:/var/lib/postgresql/data
- ./db/init:/docker-entrypoint-initdb.d
healthcheck:
test: ["CMD-SHELL", "pg_isready -U clowbot -d clowbot"]
interval: 10s
timeout: 5s
retries: 5Python Bridge. Telegram long-polling, FastAPI endpoints, routing, auth, queue management, provider clients. ТОНКИЙ мост — НЕ содержит бизнес-логику.
Long-polling, getUpdates
Internal API, /health
chat_queue, backpressure
asyncpg connection pool
Prometheus exporter
Ollama, n8n, Telegram
Важно: Вся бизнес-логика в DB (политики, процессы, агенты) или в n8n (workflow). Python только выполняет.
bot:
build: .
environment:
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
- DATABASE_URL=postgresql://clowbot:clowbot_pass@postgres:5432/clowbot
depends_on:
postgres:
condition: service_healthy
ollama:
condition: service_healthy
ports:
- "28000:8000"
volumes:
- ./voice_data:/app/voice_data
restart: unless-stoppedExecution plane. Визуальный оркестратор workflows, multi-step процессы, scheduled tasks, webhook endpoints.
n8n/workflows/*.json
5 активных
n8n_api_*
Встроенная БД
n8n:
image: n8nio/n8n:latest
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
- N8N_API_KEY=${N8N_API_KEY}
volumes:
- n8n_data:/home/node/.n8n
- ./n8n/workflows:/home/node/.n8n/workflows
ports:
- "25678:5678"
restart: unless-stoppedLLM inference. Локальные модели: phi4-mini (default), qwen3, llama3. GPU опционально (CUDA).
phi4-mini (~2GB)
memory error → lighter
Опционально
ollama_data
ollama:
image: ollama/ollama:latest
ports:
- "21435:11434"
volumes:
- ollama_data:/root/.ollama
healthcheck:
test: ["CMD-SHELL", "ollama list >/dev/null 2>&1"]
interval: 20s
timeout: 8s
retries: 10
start_period: 60s
restart: unless-stoppedObservability stack. Метрики бота, алерты на ошибки, health monitoring, Grafana-ready.
- HTTP request latency
- LLM call duration
- Queue depth
- Error rates
- Active chats
- High error rate (>5%)
- LLM timeout
- PostgreSQL down
- Queue overflow
prometheus:
image: prom/prometheus:latest
ports:
- "29090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
restart: unless-stopped
alertmanager:
image: prom/alertmanager:latest
ports:
- "29093:9093"
volumes:
- ./prometheus/alertmanager.yml:/etc/alertmanager/alertmanager.yml
restart: unless-stoppedBrowser automation. Web scraping, screenshots, JS-rendered pages. Chromium в headless режиме.
selenium:
image: selenium/standalone-chrome:latest
ports:
- "4444:4444"
- "7900:7900" # VNC for debugging
shm_size: "2gb"
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:4444/wd/hub/status || exit 1"]
interval: 15s
timeout: 5s
retries: 5
restart: unless-stoppedVoice transcription. Голосовые сообщения → текст. Поддержка 99+ языков, модель whisper-base.
whisper:
image: ahmadunchawan/whisper-asr-webservice:latest
ports:
- "9000:9000"
environment:
- ASR_MODEL=base
- ASR_ENGINE=faster_whisper
volumes:
- whisper_cache:/root/.cache
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:9000/"]
interval: 30s
timeout: 10s
retries: 5
restart: unless-stopped🔗 Зависимости сервисов
Зависимости Bot
Зависимости n8n
Startup Order
🎮 Управление сервисами
Запуск
docker compose up -dЗапустить все сервисы
docker compose up -d bot n8nЗапустить конкретные сервисы
docker compose up -d --build botПересобрать и запустить
Остановка
docker compose downОстановить все сервисы
docker compose stop botОстановить конкретный сервис
docker compose down -vОстановить и удалить volumes
Мониторинг
docker compose psСтатус всех сервисов
docker compose logs -f botЛоги сервиса в реальном времени
docker statsИспользование ресурсов
Рестарт
docker compose restart botРестарт конкретного сервиса
docker compose restartРестарт всех сервисов
docker compose pull && docker compose up -dОбновить образы
🔧 Troubleshooting
Сервис не запускается
- Проверить логи:
docker compose logs service - Проверить зависимости:
docker compose ps - Проверить ресурсы:
docker stats - Проверить env vars:
docker compose config
Port уже занят
1. Найти процесс: lsof -i :8000
2. Остановить или изменить порт в docker-compose.yml
Volume проблемы
• docker volume ls — список volumes
• docker volume rm clowbot_postgres_data — удалить volume
• docker compose down -v — удалить все volumes