🐳 Docker Services

clowbot запускается в Docker Compose с 8+ сервисами. Каждый сервис имеет свою роль, изолирован в контейнере и связан с другими через Docker network.

Архитектура сервисов

📱 Telegram
внешний API
🌐 n8n UI
:5678
📊 Prometheus
:9090
🤖 Bot
Python/FastAPI
:8000
⚡ n8n
workflows
🧠 Ollama
LLM inference
:11435
📊 Alertmanager
alerts
🐘 PostgreSQL
source of truth
:25432
🌐 Selenium
browser
🎤 Whisper
voice→text
🔔 webhook
debug

📋 Сводная таблица

СервисПортОбразHealth Check
🐘 PostgreSQL25432postgres:15pg_isready
🤖 Bot8000, 28000custom Dockerfile/health
⚡ n8n25678n8nio/n8nGET /
🧠 Ollama21435ollama/ollamaollama list
📊 Prometheus29090prom/prometheus/-/ready
🔔 Alertmanager29093prom/alertmanager-
🌐 Selenium4444selenium/standalone-chrome/wd/hub/status
🎤 Whisper9000ahmadunchawan/whisper-asrGET /

Описание сервисов

🐘PostgreSQL:25432

Центр истины платформы. Хранит все данные: пользователи, чаты, процессы, агенты, политики, workflow, аудит, транскрипции, напоминания.

Миграции

db/init/*.sql

Volume

postgres_data

Database

clowbot

User

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: 5
🤖Bot:8000, :28000

Python Bridge. Telegram long-polling, FastAPI endpoints, routing, auth, queue management, provider clients. ТОНКИЙ мост — НЕ содержит бизнес-логику.

Telegram

Long-polling, getUpdates

FastAPI

Internal API, /health

Queue

chat_queue, backpressure

DB Pool

asyncpg connection pool

Metrics

Prometheus exporter

Providers

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-stopped
n8n:25678

Execution plane. Визуальный оркестратор workflows, multi-step процессы, scheduled tasks, webhook endpoints.

Workflows

n8n/workflows/*.json

Slots

5 активных

API Key

n8n_api_*

SQLite

Встроенная БД

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-stopped
🧠Ollama:21435

LLM inference. Локальные модели: phi4-mini (default), qwen3, llama3. GPU опционально (CUDA).

Default Model

phi4-mini (~2GB)

Fallback

memory error → lighter

GPU

Опционально

Volume

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-stopped
📊Prometheus🔔Alertmanager:29090, :29093

Observability stack. Метрики бота, алерты на ошибки, health monitoring, Grafana-ready.

Prometheus собирает:
  • HTTP request latency
  • LLM call duration
  • Queue depth
  • Error rates
  • Active chats
Alertmanager отправляет:
  • 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-stopped
🌐Selenium:4444Опциональный

Browser 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-stopped
🎤Whisper:9000Опциональный

Voice 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

PostgreSQL (service_healthy)
Ollama (service_healthy)

Зависимости n8n

PostgreSQL (service_healthy)
Bot (для webhook calls)

Startup Order

PostgreSQLOllamaBotn8nPrometheus

🎮 Управление сервисами

Запуск

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

Сервис не запускается

  1. Проверить логи: docker compose logs service
  2. Проверить зависимости: docker compose ps
  3. Проверить ресурсы: docker stats
  4. Проверить 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

🔗 Связанные страницы