Slot Policy — Управление слотами

n8n Community Edition ограничен 5 активными workflows. Slot Policy определяет какие workflows занимают эти слоты и как их переключать.

❓ Почему только 5 слотов?

n8n использует модель лицензирования:

Community Edition

  • ✓ Бесплатно
  • ✓ Self-hosted
  • ✗ Лимит: 5 активных workflows
  • ✗ Нет командной работы

Enterprise

  • ✓ Безлимит workflows
  • ✓ Команды и RBAC
  • ✓ Priority support
  • ✗ Платно ($$$)

💡 Решение

Вместо покупки Enterprise лицензии, мы используем систему слотов. Можно иметь сколько угодно workflow-файлов, но активно только 5. Остальные "спят" и могут быть активированы по требованию.

🎯 Визуализация слотов

┌─────────────────────────────────────────────────────────────────┐
│                    5 ACTIVE SLOTS                                │
│                   (n8n community limit)                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │ Slot 1 │ web_search_workflow              │ [PROTECTED] 🔒 ││
│  ├────────┴────────────────────────────────────────────────────┤│
│  │ Webhook: /webhook/abc-123                                   ││
│  │ Process: web_search                                         ││
│  │ Usage: 1000+ runs/day                                       ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │ Slot 2 │ reminder_dispatch_workflow      │ [PROTECTED] 🔒 ││
│  ├────────┴────────────────────────────────────────────────────┤│
│  │ Webhook: /webhook/xyz-789                                   ││
│  │ Process: reminder_dispatch                                  ││
│  │ Usage: Critical for reminders                               ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │ Slot 3 │ travel_research_workflow        │ [SWAPPABLE] 🔄 ││
│  ├────────┴────────────────────────────────────────────────────┤│
│  │ Webhook: /webhook/trv-456                                   ││
│  │ Process: travel_research                                    ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │ Slot 4 │ content_factory_digest_workflow │ [SWAPPABLE] 🔄 ││
│  ├────────┴────────────────────────────────────────────────────┤│
│  │ Webhook: /webhook/cnt-789                                   ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │ Slot 5 │ (available)                     │ [EMPTY] ⬜      ││
│  └─────────────────────────────────────────────────────────────┘│
│                                                                  │
└─────────────────────────────────────────────────────────────────┘


INACTIVE WORKFLOWS (спят в файловой системе)
─────────────────────────────────────────────
  • finance_coach_weekly_workflow.json
  • web_research_brief_workflow.json
  • customer_support_workflow.json
  • data_pipeline_etl.json
  • ... (сколько угодно)

🔒 Protected Workflows

Некоторые workflows критически важны и не могут быть вытеснены:

WorkflowПричина защиты
web_search_workflowОсновной процесс поиска, используется постоянно
reminder_dispatch_workflowКритический для напоминаний, SLA важен

Настройка в runtime_policy_json:

{
  "n8n": {
    "slots": {
      "max_active": 5,
      "protected": ["web_search_workflow", "reminder_dispatch_workflow"]
    }
  }
}

💻 Управление слотами

Скрипт n8n_slot_switch.sh управляет слотами:

list — Показать слоты

./scripts/n8n_slot_switch.sh list

[INFO] Active slots (4/5):
  1. web_search_workflow
  2. reminder_dispatch_workflow
  3. travel_research_workflow
  4. content_factory_digest_workflow

[INFO] Available workflows (12 total):
  - customer_support_workflow (active=no)
  - data_pipeline_etl (active=no)
  - finance_coach_weekly_workflow (active=no)
  ...

promote — Добавить в слот

# Добавить workflow в свободный слот
./scripts/n8n_slot_switch.sh promote finance_coach_weekly_workflow --sync

[OK] Added into free slot: finance_coach_weekly_workflow

# Если слот занят -- заменить конкретный
./scripts/n8n_slot_switch.sh promote new_workflow \
  --replace travel_research_workflow --sync

[OK] Replaced slot: travel_research_workflow -> new_workflow

demote — Убрать из слота

# Убрать workflow из активных слотов
./scripts/n8n_slot_switch.sh demote travel_research_workflow --sync

[OK] Removed active workflow: travel_research_workflow

set — Установить все слоты сразу

# Установить конкретный набор слотов
./scripts/n8n_slot_switch.sh set \
  web_search_workflow,reminder_dispatch_workflow,travel_research_workflow \
  --sync

⚙️ Опции команды

ОпцияОписание
--syncЗапустить n8n_sync_workflows.sh после изменения
--dry-runПоказать что изменится, но не применять
--replace <name>При promote: заменить конкретный workflow
--max <n>Переопределить лимит слотов
--slots-file <path>Использовать другой файл слотов

🎬 Типичные сценарии

Сценарий 1: Тестирование нового workflow

# 1. Посмотреть текущие слоты
./scripts/n8n_slot_switch.sh list

# 2. Временно заменить слот 5 на новый workflow
./scripts/n8n_slot_switch.sh promote my_new_workflow --sync

# 3. Протестировать...
# 4. Вернуть как было
./scripts/n8n_slot_switch.sh demote my_new_workflow --sync

Сценарий 2: Dry-run перед изменением

# Проверить что получится
./scripts/n8n_slot_switch.sh promote new_workflow --replace old_workflow --dry-run

[DRY-RUN] Active slots ->
  1. web_search_workflow
  2. reminder_dispatch_workflow
  3. travel_research_workflow
  4. content_factory_digest_workflow
  5. new_workflow  <- будет вместо old_workflow

Сценарий 3: Переключение набора workflows

# Утром: рабочие workflows
./scripts/n8n_slot_switch.sh set \
  web_search,reminder_dispatch,travel_research,content_factory,finance_coach \
  --sync

# Вечером: девелопмент workflows
./scripts/n8n_slot_switch.sh set \
  web_search,reminder_dispatch,test_workflow_1,test_workflow_2,test_workflow_3 \
  --sync

📚 Связанные разделы