n8n это платформа автоматизации рабочих процессов с открытым исходным кодом, которая позволяет соединять различные приложения, API и сервисы в единые цепочки обработки данных.
Визуальный интерфейс на основе узлов даёт возможность строить сложные сценарии без написания кода, а при необходимости расширять логику с помощью JavaScript. В отличие от облачных SaaS-решений, n8n можно развернуть на собственной инфраструктуре, что открывает совершенно иной уровень контроля над данными и интеграциями.
Self-hosted (самостоятельный хостинг) означает, что это установка n8n локально и приложение работает на сервере, которым вы управляете: физическом или виртуальном. Все данные учётные записи, история выполнений, промежуточные результаты остаются внутри вашего периметра и не передаются третьим лицам.
Это критически важно для организаций, работающих с конфиденциальной информацией, а также для разработчиков, которым нужна полная свобода в настройке окружения.
Развёртывание n8n на локальном сервере требует технических знаний: настройка серверов и контейнеров, управление ресурсами приложений и масштабированием, обеспечение безопасности. Если опыта администрирования недостаточно, существует риск потери данных или нарушения безопасности. Для таких случаев n8n предлагает облачную версию, однако для команд с техническим бэкграундом self-hosted остаётся предпочтительным вариантом.
Основные концепции, которые нужно понять перед установкой
Воркфлоу как основа автоматизации
Воркфлоу (workflow) это центральное понятие в n8n. Он это последовательность связанных узлов, которые выполняются в определённом порядке для достижения конкретной задачи. Каждый воркфлоу начинается с триггера события, запускающего всю цепочку. Это может быть поступление HTTP-запроса, наступление определённого времени, изменение в базе данных или событие во внешнем сервисе.
После срабатывания триггера управление последовательно передаётся от одного узла к другому, при этом данные, полученные на каждом шаге, становятся доступны для последующих операций.
Внутри одного экземпляра n8n можно создавать неограниченное количество воркфлоу, каждый из которых решает свою задачу. Они могут быть активными (выполняться по расписанию или событию) или неактивными (запускаться вручную для тестирования). Воркфлоу сохраняются в виде JSON-объектов, что позволяет экспортировать их, импортировать и версионировать.
Ноды- строительные блоки автоматизации
Нода (node) это отдельный функциональный элемент воркфлоу, выполняющий одну конкретную операцию. Ноды делятся на несколько категорий. Триггерные ноды инициируют выполнение воркфлоу. Операционные ноды выполняют действия: извлекают данные из внешних систем, отправляют запросы, преобразуют информацию. Логические ноды управляют потоком выполнения, например, с помощью условий "если то" или циклов.
n8n предоставляет обширную библиотеку встроенных нод для популярных сервисов: Google Sheets, Slack, GitHub, баз данных PostgreSQL и MySQL, а также универсальную ноду HTTP Request, позволяющую обратиться к любому REST API. Для нестандартных сценариев можно написать собственную ноду на JavaScript или использовать ноду Code для выполнения произвольного кода прямо внутри воркфлоу.
Webhook и эндпоинты- как внешние системы запускают автоматизацию
Webhook это механизм, при котором одно приложение отправляет HTTP-запрос на заранее определённый URL другого приложения при наступлении определённого события. В контексте n8n нода Webhook выступает в роли триггера: она создаёт эндпоинт уникальный адрес, на который внешние сервисы могут отправлять данные. Когда запрос поступает, n8n автоматически запускает связанный воркфлоу и передаёт полученные данные в первый узел цепочки.
Нода Webhook поддерживает все стандартные HTTP-методы: GET, POST, PUT, PATCH, DELETE и HEAD. Для каждого воркфлоу генерируются два URL: тестовый и production. Тестовый используется во время разработки он позволяет видеть поступающие данные прямо в интерфейсе редактора. Production-URL активируется после публикации воркфлоу и работает без отображения данных в реальном времени, но результаты выполнения можно посмотреть в отдельной вкладке истории выполнений.

Максимальный размер полезной нагрузки вебхука по умолчанию составляет 16 МБ. При самостоятельном хостинге это значение можно изменить через переменную окружения N8N_PAYLOAD_SIZE_MAX. Путь вебхука можно задать вручную, включая динамические параметры маршрута, что делает ноду Webhook удобным инструментом для прототипирования API.
Docker-контейнер и Docker Compose! Изоляция и управление
Docker-контейнер это изолированное окружение, содержащее приложение и все его зависимости. Контейнер n8n включает Node.js, сам движок автоматизации и необходимые библиотеки, что гарантирует одинаковое поведение на любой системе. Запуск в контейнере исключает конфликты версий и упрощает обновление: достаточно заменить образ и перезапустить контейнер.
Docker Compose инструмент для определения и запуска многоконтейнерных приложений. С его помощью описывается вся инфраструктура n8n: сам контейнер с приложением, база данных PostgreSQL для хранения воркфлоу и учётных данных, обратный прокси-сервер для маршрутизации трафика. Вся конфигурация хранится в одном YAML-файле, что делает развёртывание воспроизводимым и удобным для версионирования.
npm как альтернативный способ установки
npm (Node Package Manager) это стандартный менеджер пакетов для экосистемы Node.js. n8n можно установить глобально командой npm install n8n -g, после чего запустить как обычное приложение Node.js. Такой способ подходит для локальной разработки или тестирования, когда не требуется контейнеризация. Однако для production-развёртывания npm-установка менее предпочтительна: она не обеспечивает изоляцию зависимостей и усложняет управление версиями Node.js на сервере.
Переменные окружения? Гибкая настройка без изменения кода
- Переменные окружения это параметры, передаваемые приложению во время запуска и влияющие на его поведение. n8n использует этот механизм как основной способ конфигурации: от указания домена и порта до настройки базы данных и параметров безопасности. В Docker-контейнере переменные задаются через флаг -e в командной строке или через секцию environment в файле Docker Compose.
- Для конфиденциальных данных, таких как пароли и ключи шифрования, предусмотрен механизм с суффиксом _FILE. Вместо передачи значения напрямую переменная указывает на файл, из которого считывается содержимое. Это позволяет использовать Docker Secrets и Kubernetes Secrets, не раскрывая sensitive-информацию в открытом виде.
Reverse proxy! Защита и маршрутизация
Reverse proxy (обратный прокси) это сервер, который принимает входящие запросы из интернета и перенаправляет их на внутренние сервисы. В конфигурации с n8n обратный прокси выполняет несколько функций одновременно: терминирует HTTPS-соединения, маршрутизирует трафик к контейнеру n8n и обеспечивает дополнительный уровень безопасности. Наиболее распространённые решения Nginx, Caddy и Traefik.
Использование обратного прокси позволяет не открывать порт n8n (по умолчанию 5678) напрямую в интернет. Вместо этого наружу публикуются только порты 80 и 443, а весь трафик к приложению проходит через прокси-сервер. Это снижает поверхность атаки и упрощает управление сертификатами SSL/TLS.
Пошаговое развёртывание n8n с помощью Docker Compose
Подготовка сервера и установка Docker
Для развёртывания потребуется сервер под управлением Ubuntu 24.04 или аналогичного дистрибутива Linux с доступом по SSH и правами sudo. Перед установкой Docker необходимо обновить системные пакеты и добавить официальный репозиторий Docker:
sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
После установки пользователя нужно добавить в группу docker, чтобы команды можно было выполнять без sudo:
sudo usermod -aG docker $USER newgrp docker
Проверка установки выполняется командой docker --version. Рекомендуется также убедиться, что Docker Compose доступен: docker compose version. Для работы n8n в production-режиме требуется не менее 4 ГБ оперативной памяти и 2 виртуальных процессора.
Создание структуры директорий и файла переменных окружения
Организация файловой системы начинается с создания рабочей директории для n8n и поддиректорий для хранения данных:
mkdir ~/n8n && cd ~/n8n mkdir n8n-data mkdir local-files sudo chown -R 1000:1000 n8n-data local-files
Права владельца изменены на UID 1000, поскольку именно под этим идентификатором работает пользователь node внутри контейнера n8n. Несоблюдение этого требования приведёт к ошибкам записи при сохранении воркфлоу и учётных данных.
Далее создаётся файл.env для хранения переменных окружения. Использование отдельного файла упрощает управление конфигурацией и позволяет держать sensitive-данные вне основного файла Docker Compose:

# Домен, на котором будет доступен n8n N8N_HOST=n8n.example.com # Порт, который слушает n8n внутри контейнера N8N_PORT=5678 # Протокол доступа (https при использовании reverse proxy с SSL) N8N_PROTOCOL=https # Базовый URL для вебхуков WEBHOOK_URL=https://n8n.example.com # Часовой пояс GENERIC_TIMEZONE=UTC # Ключ шифрования для учётных данных (обязательно сгенерировать уникальный) N8N_ENCRYPTION_KEY=your-unique-encryption-key-here # Данные для подключения к PostgreSQL DB_TYPE=postgresdb DB_POSTGRESDB_HOST=postgres DB_POSTGRESDB_PORT=5432 DB_POSTGRESDB_DATABASE=n8n DB_POSTGRESDB_USER=n8n DB_POSTGRESDB_PASSWORD=strong-password-here
Переменная N8N_ENCRYPTION_KEY критически важна: она используется для шифрования учётных данных, сохраняемых в базе данных. Без неё восстановление доступов после переноса или переустановки будет невозможно.
Конфигурация Docker Compose с PostgreSQL и Traefik
Файл docker-compose.yml описывает три сервиса: базу данных PostgreSQL, сам n8n и обратный прокси Traefik. Traefik автоматически обнаруживает контейнеры через Docker-сокет и настраивает маршрутизацию, а также получает SSL-сертификаты Let's Encrypt.
services: postgres: image: postgres:16-alpine restart: unless-stopped environment: - POSTGRES_USER=${DB_POSTGRESDB_USER} - POSTGRES_PASSWORD=${DB_POSTGRESDB_PASSWORD} - POSTGRES_DB=${DB_POSTGRESDB_DATABASE} volumes: - postgres_data:/var/lib/postgresql/data networks: - n8n-network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_POSTGRESDB_USER}"] interval: 10s timeout: 5s retries: 5 n8n: image: n8nio/n8n:latest container_name: n8n restart: unless-stopped depends_on: postgres: condition: service_healthy environment: - N8N_HOST=${N8N_HOST} - N8N_PORT=${N8N_PORT} - N8N_PROTOCOL=${N8N_PROTOCOL} - WEBHOOK_URL=${WEBHOOK_URL} - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} - DB_TYPE=${DB_TYPE} - DB_POSTGRESDB_HOST=${DB_POSTGRESDB_HOST} - DB_POSTGRESDB_PORT=${DB_POSTGRESDB_PORT} - DB_POSTGRESDB_DATABASE=${DB_POSTGRESDB_DATABASE} - DB_POSTGRESDB_USER=${DB_POSTGRESDB_USER} - DB_POSTGRESDB_PASSWORD=${DB_POSTGRESDB_PASSWORD} volumes: -./n8n-data:/home/node/.n8n -./local-files:/files expose: - "5678" networks: - n8n-network labels: - "traefik.enable=true" - "traefik.http.routers.n8n.rule=Host(`${N8N_HOST}`)" - "traefik.http.routers.n8n.entrypoints=websecure" - "traefik.http.routers.n8n.tls.certresolver=letsencrypt" - "traefik.http.services.n8n.loadbalancer.server.port=5678" traefik: image: traefik:v3 container_name: traefik restart: unless-stopped command: - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.web.http.redirections.entrypoint.to=websecure" - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" - "--certificatesresolvers.letsencrypt.acme.email=admin@example.com" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - letsencrypt_data:/letsencrypt networks: - n8n-network volumes: postgres_data: letsencrypt_data: networks: n8n-network: driver: bridge
Конфигурация Traefik включает автоматическое перенаправление с HTTP на HTTPS и получение сертификатов Let's Encrypt через HTTP-челлендж. Docker-сокет монтируется в режиме "только для чтения", что снижает риски безопасности.
Запуск и проверка
Запуск всей инфраструктуры выполняется одной командой из директории с файлом docker-compose.yml:
docker compose up -d
Флаг -d запускает контейнеры в фоновом режиме. Проверить статус можно командой docker compose ps, а логи docker compose logs -f n8n. После успешного запуска n8n будет доступен по адресу https://n8n.example.com. При первом входе потребуется создать учётную запись владельца экземпляра.
Если домен ещё не настроен или SSL-сертификат не получен, можно временно проверить работу, обратившись к серверу напрямую по IP-адресу и порту 5678, однако для production-использования такая конфигурация недопустима.
Настройка reverse proxy. Nginx как альтернатива Traefik
Конфигурация Nginx для n8n
Nginx более традиционный выбор для обратного проксирования, и многие администраторы предпочитают его за гибкость и предсказуемость. Установка выполняется стандартной командой sudo apt install nginx -y, после чего создаётся файл конфигурации в /etc/nginx/sites-available/n8n:
server { listen 80; server_name n8n.example.com; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; server_name n8n.example.com; ssl_certificate /etc/letsencrypt/live/n8n.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:5678; proxy_http_version 1.1; 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; proxy_read_timeout 3600s; } }
Особое внимание следует уделить заголовкам Upgrade и Connection: интерфейс n8n использует WebSocket для обновлений в реальном времени, и без корректной передачи этих заголовков функциональность редактора может работать некорректно. Таймаут proxy_read_timeout увеличен до часа, поскольку некоторые воркфлоу могут выполняться длительное время.
После сохранения конфигурации создаётся символическая ссылка в sites-enabled, проверяется синтаксис командой sudo nginx -t и выполняется перезагрузка: sudo systemctl reload nginx.
Получение SSL-сертификата с Certbot
- Для выпуска сертификата Let's Encrypt используется Certbot:
- sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d n8n.example.com
- Certbot автоматически изменит конфигурацию Nginx, добавив пути к сертификатам и настроив перенаправление с HTTP. Продление сертификата выполняется автоматически через системный таймер.
Управление переменными окружения и безопасность
Разделение конфигурации и секретов
Практика показывает, что хранение всех параметров в одном файле.env удобно, но не всегда безопасно. Для sensitive-данных, таких как пароль базы данных или ключ шифрования, рекомендуется использовать механизм _FILE. Например, вместо N8N_ENCRYPTION_KEY=my-secret-key можно создать файл /run/secrets/n8n_encryption_key и указать N8N_ENCRYPTION_KEY_FILE=/run/secrets/n8n_encryption_key. В Docker Compose это реализуется через секции secrets:
services: n8n: secrets: - n8n_encryption_key environment: - N8N_ENCRYPTION_KEY_FILE=/run/secrets/n8n_encryption_key secrets: n8n_encryption_key: file:./secrets/n8n_encryption_key.txt
Такой подход исключает попадание секретов в историю команд, переменные окружения процессов и логи.
Дополнительные меры защиты
Помимо использования HTTPS и reverse proxy, следует ограничить доступ к порту 5678 на уровне файрвола, чтобы контейнер n8n не был доступен напрямую из интернета. Настройка UFW:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow OpenSSH sudo ufw enable
Порт 5678 остаётся доступным только внутри Docker-сети, что предотвращает несанкционированные подключения в обход прокси.
Регулярное обновление контейнеров также критически важно для безопасности. Команды docker compose pull и docker compose up -d позволяют обновить образы до последних версий. Рекомендуется предварительно делать резервные копии данных n8n и базы PostgreSQL.
Развёртывание n8n на собственном сервере с использованием Docker Compose даёт полный контроль над автоматизацией бизнес-процессов и гарантирует конфиденциальность данных. Комбинация Docker-контейнеров, PostgreSQL, обратного прокси и продуманной системы переменных окружения создаёт надёжную и масштабируемую инфраструктуру, способную обслуживать как небольшие команды, так и крупные организации.
Понимание ключевых концепций воркфлоу, нод, вебхуков, эндпоинтов позволяет не просто установить платформу, но и эффективно использовать её возможности для решения реальных задач автоматизации.