Самостоятельный n8n: установка и настройка автоматизации

Разверните n8n на собственном сервере: пошаговый гид по Docker‑установке, настройке автоматизаций и интеграции с AI для эффективного self‑hosting.

Не указано
Алексей Кузнецов
Алексей Кузнецов
Системный администратор14 января 2026 г.

Установка Docker и Docker Compose (Linux)

Обновите индексы пакетов, добавьте официальный репозиторий Docker и установите необходимые пакеты. Это базовое окружение для запуска n8n в контейнерах.

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Создание директории и файла docker-compose.yml

Создайте отдельную директорию для проекта и файл конфигурации docker-compose.yml, который определяет сервисы n8n и PostgreSQL. Замените плейсхолдеры на свои значения.

mkdir -p ~/n8n-stack && cd ~/n8n-stack
touch docker-compose.yml

Конфигурация docker-compose.yml

Заполните файл docker-compose.yml содержимым для развертывания n8n и PostgreSQL. Обязательно укажите свои домен (N8N_HOST), пароли (CHANGE_ME_DB_PASSWORD) и ключ шифрования (CHANGE_ME_LONG_RANDOM_STRING).

version: "3.8"

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: unless-stopped
    environment:
      - TZ=Europe/Moscow
      - N8N_HOST=your.domain.tld
      - N8N_PORT=5678
      - WEBHOOK_URL=https://your.domain.tld/webhook/
      - N8N_ENCRYPTION_KEY=CHANGE_ME_LONG_RANDOM_STRING
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=CHANGE_ME_DB_PASSWORD
    ports:
      - "5678:5678"
    depends_on:
      - postgres
    networks:
      - n8n-net
    volumes:
      - n8n_data:/home/node/.n8n

  postgres:
    image: postgres:15-alpine
    container_name: n8n-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=CHANGE_ME_DB_PASSWORD
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - n8n-net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  n8n-net:
    driver: bridge

volumes:
  n8n_data:
  postgres_data:

Запуск контейнеров

Запустите контейнеры в фоновом режиме. После выполнения команды проверьте логи, чтобы убедиться в отсутствии ошибок и успешном запуске сервера.

docker compose up -d
docker compose logs -f n8n

Первый вход и настройка аккаунта

Откройте в браузере ваш домен (или localhost:5678). При первом запуске создайте учетную запись администратора, затем проверьте настройки хоста и URL в разделе Settings -> Instance Settings.

# Открыть в браузере
# https://your.domain.tld
# или
http://localhost:5678

Настройка Telegram Bot

Найдите бота @BotFather в Telegram, создайте нового бота и сохраните токен. Отправьте боту любое сообщение, чтобы начать чат. Получите свой Chat ID, используя бота @userinfobot или API запрос.

curl "https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates"

Создание Credentials в n8n

В интерфейсе n8n перейдите в раздел Credentials, добавьте новый набор данных типа Telegram Bot, вставьте полученный токен и сохраните.

Построение Workflow

Создайте новый workflow. Добавьте узел Webhook (Trigger) и скопируйте сгенерированный URL. Добавьте узел Telegram (Action -> Telegram -> Send Message), выберите созданные Credentials и укажите Chat ID. В тексте сообщения используйте выражения (например, {{ $json.message }}).

curl -X POST -H "Content-Type: application/json" -d '{"message":"Тестовое событие"}' https://your.domain.tld/webhook/your-uuid

Резервное копирование

Для сохранения данных создайте скрипт бэкапа. Он делает дамп PostgreSQL и архивирует том с данными n8n. Рекомендуется добавить скрипт в cron для автоматизации.

#!/bin/bash
set -e
BACKUP_DIR="$HOME/n8n-backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

# Дамп БД
docker exec n8n-postgres pg_dump -U n8n n8n > "$BACKUP_DIR/n8n.sql"

# Копия тома n8n_data в архив
docker run --rm -v n8n_data:/data -v "$BACKUP_DIR:/backup" alpine sh -c "tar czf /backup/n8n_data.tar.gz -C /data ."

# Очистка старых бэкапов (оставить последние 7)
ls -dt ~/n8n-backups/* | tail -n +8 | xargs -r rm -rf

Self-hosted workflow automation с n8n: Полный гид по установке и настройке

Введение

Workflow automation (автоматизация рабочих процессов) позволяет связывать разрозненные сервисы, устранять рутинные задачи и строить сложную логику без написания кода. В отличие от облачных решений, self-hosted n8n дает полный контроль над данными, логикой выполнения и инфраструктурой, а также исключает ограничения публичных тарифов.

Почему n8n:

  • Открытый исходный код с возможностью коммерческой лицензии (Sustainable Use License).
  • Богатая экосистема узлов (nodes) для API, баз данных, очередей, AI.
  • Гибкая оркестрация: визуальный редактор, возможность запуска в Docker, поддержка переменных окружения, шифрование секретов.
  • Масштабируемость: от单节点 до кластера с внешними базами (PostgreSQL) и очередями (Redis).

Подготовка окружения (Docker и Docker Compose)

Для комфортной работы вам понадобятся:

  • Сервер или локальная машина с Docker и Docker Compose.
  • Домен (или локальный DNS) для доступа к веб-интерфейсу и Webhook.
  • Рекомендуется: TLS-terminating reverse proxy (Traefik, Caddy, Nginx) для HTTPS и удобного роутинга.

Установка Docker и Docker Compose (Linux)

  1. Обновите индексы пакетов и установите Docker:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

# Добавьте официальный GPG-ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Добавьте репозиторий
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. Проверьте установку:
sudo docker run --rm hello-world
docker compose version
  1. (Опционально) Добавьте текущего пользователя в группу docker, чтобы не использовать sudo:
sudo usermod -aG docker $USER
# Перелогиньтесь для применения прав

Пример docker-compose.yml для n8n

Создайте отдельную директорию проекта и файл docker-compose.yml:

mkdir -p ~/n8n-stack && cd ~/n8n-stack
touch docker-compose.yml

Содержимое файла (минимальный безопасный стенд с PostgreSQL):

version: "3.8"

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: unless-stopped
    environment:
      - TZ=Europe/Moscow
      - N8N_HOST=your.domain.tld          # ваш домен или IP
      - N8N_PORT=5678
      - WEBHOOK_URL=https://your.domain.tld/webhook/   # важно для внешних вызовов
      - N8N_ENCRYPTION_KEY=CHANGE_ME_LONG_RANDOM_STRING   # минимум 32 символа
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=CHANGE_ME_DB_PASSWORD
      # Для internal queue (опционально, при шкалировании)
      # - EXECUTIONS_MODE=queue
      # - QUEUE_BULL_REDIS_HOST=redis
      # - QUEUE_BULL_REDIS_PORT=6379
    ports:
      - "5678:5678"   # можно убрать, если используете reverse proxy внутри сети
    depends_on:
      - postgres
    networks:
      - n8n-net
    volumes:
      - n8n_data:/home/node/.n8n
      # Пример монтирования внешних скриптов/credentials (опционально)
      # - ./scripts:/usr/src/app/custom:ro

  postgres:
    image: postgres:15-alpine
    container_name: n8n-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=CHANGE_ME_DB_PASSWORD
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - n8n-net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

# Redis раскомментировать при использовании очередей и шкалирования
#  redis:
#    image: redis:7-alpine
#    container_name: n8n-redis
#    restart: unless-stopped
#    networks:
#      - n8n-net

networks:
  n8n-net:
    driver: bridge

volumes:
  n8n_data:
  postgres_data:

Важно:

  • Замените CHANGE_ME_LONG_RANDOM_STRING и CHANGE_ME_DB_PASSWORD на надежные значения.
  • Если используете reverse proxy, выключите проброс порта 5678 наружу и настройте роутинг через него.

Установка n8n: Пошаговая инструкция

  1. Перейдите в папку с docker-compose.yml:
cd ~/n8n-stack
  1. Запустите стек в фоне:
docker compose up -d
  1. Проверьте логи на предмет ошибок:
docker compose logs -f n8n

Ожидаемый вывод: сервер запущен, доступен на порту 5678 (или через reverse proxy).

  1. Если нужно обновить версию:
docker compose pull
docker compose up -d --force-recreate
  1. (Опционально) Первоначальная настройка через переменные окружения:
  • N8N_BASIC_AUTH_ACTIVE=true и N8N_BASIC_AUTH_USER/N8N_BASIC_AUTH_PASSWORD для базовой авторизации, если нет SSO.
  • N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true для ограничения доступа к файлам.
  • EXECUTIONS_TIMEOUT=300 для ограничения максимального времени выполнения.

Первый запуск и базовая настройка

  1. Откройте в браузере ваш URL (например, https://your.domain.tld). При локальном запуске: http://localhost:5678.

  2. Если базовая авторизация включена, введите логин/пароль.

  3. Создайте учетную запись администратора (email/пароль) в интерфейсе при первом входе.

  4. В разделе «Credentials» добавьте минимум один набор аутентификации для теста (например, Telegram Bot Token).

  5. Проверьте настройки хоста и URL:

  • Меню → Settings → Instance Settings → Host and Webhook → «Webhook URL» должен совпадать с WEBHOOK_URL.
  1. (Опционально) Настройте SMTP для уведомлений и восстановления пароля:
  • Environment variables: N8N_EMAIL_MODE=smtp, N8N_SMTP_HOST, N8N_SMTP_PORT, N8N_SMTP_USER, N8N_SMTP_PASS, N8N_SMTP_SENDER.

Создание первой автоматизации (пример с Telegram уведомлениями)

Цель: отправить сообщение в Telegram, когда вызывается вебхук (например, событие от мониторинга или сайта).

Шаг 1: Telegram Bot

  1. Найдите в Telegram бота @BotFather, создайте нового бота и получите HTTP API Token.
  2. Создайте личный чат с ботом и отправьте любое сообщение.
  3. Получите chat ID, например через @userinfobot или запросом к API:
curl "https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates"

Шаг 2: Добавление Credentials в n8n

  1. В n8n перейдите в Credentials → Add Credential → Telegram Bot.
  2. Вставьте Token и сохраните (назовите «Telegram Bot»).

Шаг 3: Построение workflow

  1. Создайте новый workflow (Workflows → Add workflow).
  2. Добавьте узел «Webhook» (Trigger). Скопируйте «Webhook URL», который он сгенерирует (например, https://your.domain.tld/webhook/your-uuid).
  3. Добавьте узел «Telegram» (Action → Telegram → Send Message).
  4. В узле Telegram выберите созданную Credentials, укажите Chat ID и текст сообщения.
    • Для теста можно вставить статический текст: Новое событие: {{ $json.message || 'без описания' }}.
  5. Нажмите «Test workflow» и вызовите вебхук:
curl -X POST -H "Content-Type: application/json" -d '{"message":"Тестовое событие"}' https://your.domain.tld/webhook/your-uuid
  1. В интерфейсе n8n увидите выполнение и статус отправки сообщения в Telegram.

Полезные советы

  • Для сложных данных используйте выражения: {{ $json.field }}.
  • Включите «Listening for events» в Webhook-узле, если нужно слушать GET/POST.
  • Для отладки добавляйте узел «Data Storage» или «Function» с return [items], чтобы выводить промежуточные данные.

Расширенные возможности: AI-агенты и функциональные узлы

AI-агенты

n8n поддерживает интеграцию с LLM-провайдерами (OpenAI, Anthropic, Ollama и др.) для построения агентских сценариев.

  1. Добавьте узел «OpenAI» (Credentials → OpenAI API), укажите API-ключ.
  2. Используйте узел «Simple Chain» или «Agent» для оркестрации:
    • Вход: текст из Webhook.
    • Промпт: «Проанализируй запрос и сформируй ответ».
    • Выход: в Telegram или Email.
  3. Для локальных моделей через Ollama: используйте узел «HTTP Request» к API Ollama или специализированные community-узлы.

Функциональные узлы

  • Code (JavaScript): выполняйте произвольный код на Node.js, включая npm-пакеты. Полезно для трансформации данных, работы с JSON, массивами.
  • Switch/IF: ветвление логики по условиям.
  • Merge/Aggregate: объединение данных из нескольких источников.
  • Webhook / HTTP Request: для приёма и отправки запросов, интеграции с API.
  • Schedule/Trigger: триггер по расписанию (cron) для периодических задач.

Пример: «Каждые 30 минут собирать данные из API → фильтровать изменения → отправлять дайджест в Telegram».


Безопасность и резервное копирование

Безопасность

  • Сильные секреты:
    • N8N_ENCRYPTION_KEY — обязательно длинная случайная строка.
    • Пароли БД и внешних сервисов — через переменные окружения, не хардкодьте в workflow.
  • Сеть:
    • Размещайте n8n и БД в отдельной Docker-сети.
    • Не публикуйте порты БД наружу.
    • Используйте reverse proxy с TLS и ограничьте доступ до n8n по IP/домену.
  • Доступ:
    • Включайте базовую аутентификацию или настраивайте SSO (через обратный прокси или OIDC-заголовки, если поддерживается).
    • Отключайте «public sharing» для workflow, если не нужно.
  • Переменные окружения:
    • EXECUTIONS_TIMEOUT, N8N_PAYLOAD_SIZE_LIMIT (например, 10MB) для контроля ресурсов.
  • Роли и права (в Enterprise/Pro):
    • Используйте RBAC для разделения прав между пользователями.

Резервное копирование

  • Файловой том для n8n_data (содержит кэш, ключи, настройки). Регулярно делайте копии.
  • PostgreSQL: используйте pg_dump для выгрузки данных.

Пример бэкапа (добавьте в cron или скрипт):

#!/bin/bash
set -e
BACKUP_DIR="$HOME/n8n-backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

# Дамп БД
docker exec n8n-postgres pg_dump -U n8n n8n > "$BACKUP_DIR/n8n.sql"

# Копия тома n8n_data в архив
docker run --rm -v n8n_data:/data -v "$BACKUP_DIR:/backup" alpine sh -c "tar czf /backup/n8n_data.tar.gz -C /data ."

# Очистка старых бэкапов (оставить последние 7)
ls -dt ~/n8n-backups/* | tail -n +8 | xargs -r rm -rf

Восстановление:

  • Остановите контейнеры: docker compose down.
  • Восстановите том: распакуйте архив в том или подмените том бэкапом.
  • Восстановите БД: docker exec -i n8n-postgres psql -U n8n n8n < n8n.sql.
  • Запустите: docker compose up -d.

Наблюдаемость

  • Логи: docker compose logs -f n8n.
  • Метрики (Enterprise/Pro): включите экспортер Prometheus.
  • Алерты: отправляйте уведомления через тот же n8n (Webhook → Telegram/Slack) при ошибках или переполнении диска.

Заключение и полезные ресурсы

Вы развернули n8n в Docker, настроили PostgreSQL и построили простую автоматизацию с Telegram. Теперь вы можете масштабировать стек: добавить Redis для очередей, запустить несколько воркеров, интегрировать AI-агентов и защитить инфраструктуру reverse proxy и HTTPS.

Полезные ресурсы:

Приятной автоматизации!

Поделиться:TelegramX / TwitterVK