1. Что такое n8n и зачем его хостить самому
n8n (произносится «n-eight-n», от «nodemation») — платформа автоматизации с визуальным редактором, где вы соединяете «ноды» в цепочки: триггер → обработка → действие. Поддерживает 400+ интеграций и ~70 специализированных AI-нод для построения LLM-агентов.
Без лимитов
В self-hosted версии нет ограничений на количество выполнений workflow. Запускайте хоть миллион раз — платите только за VPS.
Данные у вас
Все данные хранятся на вашем сервере. Подходит для работы с корпоративными системами, CRM, базами данных без утечки в облако.
Код в нодах
В Code-нодах можно писать произвольный JavaScript или Python. Любая логика, трансформации данных, вызовы библиотек.
Типичные задачи, которые решает n8n: отправка уведомлений в Telegram/Slack при событиях, синхронизация данных между сервисами (CRM ↔ таблицы ↔ БД), обработка webhook от сторонних API, автоматические отчёты по расписанию, построение AI-агентов с вызовом LLM через HTTP-запросы.
n8n 2.0 — декабрь 2025
Актуальная версия — n8n 2.x (2.9.4 на февраль 2026). В 2.0 введены состояния Draft/Published для workflow, изолированное выполнение Code-нод, и удалена поддержка MySQL/MariaDB — теперь только PostgreSQL или SQLite.
2. n8n vs Zapier vs Make.com: сравнение
Все три инструмента решают схожие задачи, но модель ценообразования и возможности сильно различаются.
| Параметр | n8n | Zapier | Make.com |
|---|---|---|---|
| Self-hosting | ✅ Бесплатно | ❌ Нет | ❌ Нет |
| Open source | ✅ Fair-code | ❌ | ❌ |
| Бесплатный план | Неограниченно (self-hosted) | 100 задач/мес | 1 000 операций/мес |
| Платное облако | от $20/мес (2 500 выполнений) | от $20/мес | от $9/мес |
| Интеграций | 400+ нативных | 6 000+ | 1 500+ |
| JavaScript/Python | ✅ Code-ноды | ❌ | Частично |
| AI/LangChain ноды | ~70 специализированных | Минимально | Есть |
| Сложность запуска | Требует VPS + Docker | Просто | Просто |
| Порог входа | Технические знания | Для всех | Средний |
Когда n8n self-hosted выгоднее облака
На Zapier Starter ($20/мес) лимит — 2 500 выполнений. Если webhook срабатывает 100 раз в день — это уже 3 000/мес, и нужен следующий план ($50/мес). VPS на 4 ГБ RAM + n8n = 600–1 000 ₽/мес без каких-либо лимитов. Точка окупаемости — примерно 50–100 автоматизаций в день.
3. Требования к серверу
n8n сам по себе нетребователен, но в продакшене работает в паре с PostgreSQL, что увеличивает потребление RAM.
Минимум (тесты)
- — 1 vCPU
- — 2 ГБ RAM
- — 20 ГБ SSD
- — Небольшая нагрузка
Оптимально
- — 2 vCPU
- — 4 ГБ RAM
- — 40 ГБ SSD
- — До 500 workflow/день
Продакшен
- — 4 vCPU
- — 8 ГБ RAM
- — 80 ГБ NVMe
- — Высокая нагрузка + AI
Для старта подходит любой KVM-VPS с Ubuntu 22.04 или 24.04 и 4 ГБ RAM. Обязательны публичный IP и домен — без них webhook-триггеры не будут работать.
4. Установка Docker
Если Docker ещё не установлен — делается одной командой. Официальный скрипт автоматически определяет дистрибутив и устанавливает актуальную версию.
curl -fsSL https://get.docker.com | sh
# Запустить и добавить в автозапуск
systemctl enable --now docker
# Проверить версию (нужен Docker 20.10+ и Compose 2.x)
docker --version
docker compose versionПлагин vs standalone
Современный Docker включает Compose как встроенный плагин: команда docker compose (без дефиса). Если на сервере установлен старый docker-compose — лучше переустановить через get.docker.com.
5. Docker Compose + PostgreSQL
Официально рекомендованный способ для продакшена — Docker Compose с PostgreSQL. SQLite подойдёт для тестирования, но при высокой нагрузке появляются блокировки.
Шаг 1: создать директорию и .env
mkdir -p ~/n8n && cd ~/n8nСоздайте файл .env со всеми настройками. Замените значения на свои:
# PostgreSQL
POSTGRES_USER=n8n
POSTGRES_PASSWORD=ЗАМЕНИТЕ_НА_СЛОЖНЫЙ_ПАРОЛЬ
POSTGRES_DB=n8n
# Подключение n8n к БД (host = имя сервиса в compose)
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=postgres
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n
DB_POSTGRESDB_PASSWORD=ЗАМЕНИТЕ_НА_СЛОЖНЫЙ_ПАРОЛЬ
DB_POSTGRESDB_SCHEMA=public
# Ваш домен (например: n8n.example.com)
N8N_HOST=n8n.example.com
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://n8n.example.com/
N8N_PROXY_HOPS=1
# Часовой пояс
GENERIC_TIMEZONE=Europe/Moscow
TZ=Europe/Moscow
# Ключ шифрования учётных данных — СГЕНЕРИРУЙТЕ:
# openssl rand -hex 32
N8N_ENCRYPTION_KEY=СГЕНЕРИРОВАННЫЙ_32_БАЙТА_HEX
# Отключить телеметрию
N8N_DIAGNOSTICS_ENABLED=falseopenssl rand -hex 32
# Скопируйте результат в N8N_ENCRYPTION_KEYШаг 2: docker-compose.yml
version: "3.8"
services:
postgres:
image: postgres:16-alpine
container_name: n8n-postgres
restart: unless-stopped
env_file: .env
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 10
n8n:
image: n8nio/n8n:latest
container_name: n8n-app
restart: unless-stopped
env_file: .env
ports:
- "127.0.0.1:5678:5678"
depends_on:
postgres:
condition: service_healthy
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
postgres_data:127.0.0.1:5678 — важно
Порт привязан только к localhost — снаружи он недоступен. Nginx будет проксировать запросы с 443 на 127.0.0.1:5678. Это предотвращает прямой доступ к n8n без SSL.
Шаг 3: запуск
docker compose up -d
# Проверить статус (postgres должен быть healthy)
docker compose ps
# Логи n8n в реальном времени
docker compose logs -f n8nПри первом запуске n8n создаст таблицы в PostgreSQL — это займёт 15–30 секунд. После появления Editor is now accessible в логах — сервис готов.
6. Nginx + SSL
n8n активно использует WebSocket для синхронизации редактора. Без правильной настройки Nginx интерфейс будет загружаться, но работать нестабильно.
Установка Nginx и Certbot
apt install nginx certbot python3-certbot-nginx -yКонфиг Nginx
server {
listen 80;
server_name n8n.example.com;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
# Обязательно для WebSocket (редактор не будет работать без этого)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Для долгих workflow
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
# Для загрузки файлов через n8n
client_max_body_size 50M;
}
}ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
# Получить SSL-сертификат (Certbot сам добавит HTTPS-блок)
certbot --nginx -d n8n.example.comПосле Certbot перезапустит Nginx с HTTPS. Откройте https://n8n.example.com — должна появиться форма регистрации. Первый зарегистрированный аккаунт автоматически становится администратором.
7. Первый вход и примеры workflow
После регистрации вы попадёте в визуальный редактор. Workflow создаётся добавлением нод на холст и соединением их стрелками. Кнопка Save сохраняет черновик, Publish — публикует и активирует workflow.
Пример 1: уведомление в Telegram по расписанию
- — Schedule Trigger: каждый день в 9:00 (Cron:
0 9 * * *) - — HTTP Request: GET на любой API (курс валют, статус сервиса, погода)
- — Telegram: отправить сообщение в чат с результатом
Пример 2: webhook → обработка → Telegram
- — Webhook: принимает POST-запрос от мониторинга (UptimeRobot, Grafana)
- — IF: проверяет поле severity — "critical" или "warning"
- — Telegram: шлёт сообщение с разным форматированием в зависимости от ветки
URL вашего webhook-триггера выглядит так:
# Production URL
https://n8n.example.com/webhook/ВАШ-UUID
# Test URL (для отладки без публикации)
https://n8n.example.com/webhook-test/ВАШ-UUIDПример 3: Code-нода с JavaScript
В Code-ноде можно преобразовывать данные произвольным образом. Например, вычислить сумму поля из массива объектов:
// $input.all() — все входящие элементы
const items = $input.all();
const total = items.reduce((sum, item) => {
return sum + (item.json.amount ?? 0);
}, 0);
// Вернуть один элемент с результатом
return [{ json: { total, count: items.length } }];Черновик vs опубликовано (n8n 2.0)
В n8n 2.x кнопка Save сохраняет черновик — workflow остаётся неактивным. Чтобы webhook и триггеры заработали, нажмите Publish. Это защищает от случайной публикации недоделанного workflow.
8. Обновление и резервные копии
Обновление n8n
cd ~/n8n
# Скачать новые образы
docker compose pull
# Перезапустить с новыми образами
docker compose down && docker compose up -d
# Убедиться, что всё запустилось
docker compose ps
docker compose logs -f n8n --tail 30Перед крупными обновлениями — бэкап
Данные хранятся в Docker-томах. Сделайте снапшот базы перед обновлением на новую мажорную версию:
# Дамп базы данных
docker exec n8n-postgres pg_dump -U n8n n8n > ~/n8n-backup-$(date +%Y%m%d).sql
# Проверить размер дампа
ls -lh ~/n8n-backup-*.sql# Остановить n8n (но не postgres)
docker compose stop n8n
# Восстановить дамп
cat ~/n8n-backup-YYYYMMDD.sql | docker exec -i n8n-postgres psql -U n8n n8n
# Запустить n8n обратно
docker compose start n8nФиксация версии в продакшене
Чтобы обновления происходили только когда вы готовы, зафиксируйте конкретную версию в docker-compose.yml:
# В docker-compose.yml замените:
image: n8nio/n8n:latest
# На конкретную версию:
image: n8nio/n8n:2.9.4