VPSРейтинг
АвтоматизацияФевраль 2026 · 13 мин чтения

n8n на VPS: автоматизация без Zapier

n8n — open-source платформа автоматизации с визуальным редактором workflow. Self-hosted версия не имеет лимитов на выполнения и стоит ровно столько, сколько стоит ваш VPS. Разворачивается через Docker Compose за 15 минут.

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: сравнение

Все три инструмента решают схожие задачи, но модель ценообразования и возможности сильно различаются.

Параметрn8nZapierMake.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.

2 ГБ RAM

Минимум (тесты)

  • 1 vCPU
  • 2 ГБ RAM
  • 20 ГБ SSD
  • Небольшая нагрузка
4 ГБ RAM

Оптимально

  • 2 vCPU
  • 4 ГБ RAM
  • 40 ГБ SSD
  • До 500 workflow/день
8 ГБ RAM

Продакшен

  • 4 vCPU
  • 8 ГБ RAM
  • 80 ГБ NVMe
  • Высокая нагрузка + AI

Для старта подходит любой KVM-VPS с Ubuntu 22.04 или 24.04 и 4 ГБ RAM. Обязательны публичный IP и домен — без них webhook-триггеры не будут работать.

4. Установка Docker

Если Docker ещё не установлен — делается одной командой. Официальный скрипт автоматически определяет дистрибутив и устанавливает актуальную версию.

Установка Docker Engine (Ubuntu 22.04 / 24.04)
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 со всеми настройками. Замените значения на свои:

~/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=false
Генерация ключа шифрования
openssl rand -hex 32
# Скопируйте результат в N8N_ENCRYPTION_KEY

Шаг 2: docker-compose.yml

~/n8n/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

Установить Nginx и Let's Encrypt
apt install nginx certbot python3-certbot-nginx -y

Конфиг Nginx

/etc/nginx/sites-available/n8n
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;
    }
}
Активировать сайт и получить SSL
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 TriggerHTTP RequestTelegram
  • Schedule Trigger: каждый день в 9:00 (Cron: 0 9 * * *)
  • HTTP Request: GET на любой API (курс валют, статус сервиса, погода)
  • Telegram: отправить сообщение в чат с результатом

Пример 2: webhook → обработка → Telegram

WebhookIFTelegram
  • Webhook: принимает POST-запрос от мониторинга (UptimeRobot, Grafana)
  • IF: проверяет поле severity — "critical" или "warning"
  • Telegram: шлёт сообщение с разным форматированием в зависимости от ветки

URL вашего webhook-триггера выглядит так:

URL webhook (после публикации workflow)
# Production URL
https://n8n.example.com/webhook/ВАШ-UUID

# Test URL (для отладки без публикации)
https://n8n.example.com/webhook-test/ВАШ-UUID

Пример 3: Code-нода с JavaScript

В Code-ноде можно преобразовывать данные произвольным образом. Например, вычислить сумму поля из массива объектов:

Code-нода (JavaScript)
// $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-томах. Сделайте снапшот базы перед обновлением на новую мажорную версию:

Бэкап PostgreSQL
# Дамп базы данных
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:

Фиксированная версия вместо latest
# В docker-compose.yml замените:
image: n8nio/n8n:latest
# На конкретную версию:
image: n8nio/n8n:2.9.4

Частые вопросы

Нужен VPS для n8n? Подойдёт тариф от 4 ГБ RAM

VPS для автоматизации и ботов →

Смотрите также