Установка n8n docker

Установка n8n с использованием Docker: Полное руководство

n8n — это инструмент с открытым исходным кодом для оркестрации рабочих процессов (workflow automation), который позволяет соединять различные приложения, API и сервисы между собой. Развертывание n8n в контейнере Docker является предпочтительным методом, так как обеспечивает изоляцию, простоту обновления и согласованность среды выполнения на разных системах. Данное руководство детально описывает процесс установки, настройки и администрирования n8n в Docker.

Предварительные требования и подготовка системы

Перед началом установки необходимо убедиться, что на вашем сервере или локальной машине установлен Docker и, опционально, Docker Compose. Базовая система должна соответствовать следующим критериям:

    • Операционная система: Linux (Ubuntu 20.04+, Debian 10+, CentOS 8+), macOS или Windows 10/11 Pro/Enterprise с поддержкой WSL 2.
    • Установленный Docker Engine версии 20.10.0 или выше.
    • Минимум 2 ГБ оперативной памяти (рекомендуется 4 ГБ для сложных рабочих процессов).
    • Свободное дисковое пространство не менее 2 ГБ.
    • Открытые сетевые порты: 5678 (порт по умолчанию для веб-интерфейса n8n).

    Установите Docker, следуя официальной документации для вашей ОС. Для Linux-систем можно использовать команды:

    • Обновление репозиториев: sudo apt-get update
    • Установка Docker: sudo apt-get install docker.io docker-compose
    • Запуск и добавление в автозагрузку: sudo systemctl enable --now docker
    • Добавление текущего пользователя в группу docker: sudo usermod -aG docker $USER

    Базовый запуск n8n через Docker Run

    Самый быстрый способ запустить n8n — использовать команду docker run. Это создаст и запустит контейнер из официального образа с настройками по умолчанию.

    Базовая команда для запуска:

    docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n

    Разберем ключевые параметры:

    • -d (detach): Запуск контейнера в фоновом режиме.
    • --name n8n: Присвоение имени контейнеру для удобства управления.
    • -p 5678:5678: Проброс порта. Левый порт (5678) — порт на хосте, правый (5678) — порт внутри контейнера. Вы можете изменить первый на любой свободный порт хоста (например, -p 8080:5678).
    • -v ~/.n8n:/home/node/.n8n: Создание тома для сохранения данных. Эта команда монтирует локальную директорию ~/.n8n в директорию внутри контейнера, где n8n хранит рабочие процессы, учетные данные и логи. Это критически важно для сохранения данных между перезапусками контейнера.
    • n8nio/n8n: Имя официального образа из Docker Hub.

    После выполнения команды n8n будет доступен по адресу http://localhost:5678 (или http://your-server-ip:5678). При первом входе будет предложено создать учетную запись пользователя.

    Продвинутая настройка с использованием Docker Compose

    Для производственного использования рекомендуется использовать Docker Compose, который позволяет декларативно описывать все параметры контейнера в YAML-файле. Это упрощает управление, версионирование и масштабирование конфигурации.

    Создайте директорию для проекта, например, ~/n8n-docker, и внутри нее создайте файл docker-compose.yml.

    Пример базового файла docker-compose.yml:

    version: '3.8'
    
    services:
      n8n:
        image: n8nio/n8n
        container_name: n8n
        restart: unless-stopped
        ports:
          - "5678:5678"
        environment:
          - N8N_BASIC_AUTH_ACTIVE=true
          - N8N_BASIC_AUTH_USER=admin
          - N8N_BASIC_AUTH_PASSWORD=secure_password_here
          - N8N_HOST=your-domain.com
          - N8N_PORT=5678
          - N8N_PROTOCOL=https
          - N8N_WEBHOOK_URL=https://your-domain.com/
          - GENERIC_TIMEZONE=Europe/Moscow
        volumes:
          - n8n_data:/home/node/.n8n
          - ./local-files:/files
        networks:
          - n8n_network
    
    volumes:
      n8n_data:
    
    networks:
      n8n_network:
        driver: bridge
    

    Для запуска конфигурации выполните в той же директории команду docker-compose up -d. Для остановки — docker-compose down (флаг -v не используйте, если не хотите удалить том с данными).

    Критические переменные среды (Environment Variables)

    Конфигурация n8n в Docker управляется в основном через переменные среды. Ниже приведена таблица наиболее важных из них.

    Переменная Назначение Пример значения
    N8N_BASIC_AUTH_ACTIVE Включает базовую HTTP-аутентификацию для веб-интерфейса и REST API. Обязательна для экземпляров, доступных из интернета. true
    N8N_BASIC_AUTH_USER / N8N_BASIC_AUTH_PASSWORD Логин и пароль для базовой аутентификации. admin / MyStr0ngP@ss
    N8N_ENCRYPTION_KEY Ключ для шифрования учетных данных в базе данных. Должен быть строкой длиной 32 символа. Должен быть ОДИНАКОВЫМ при всех перезапусках, иначе все сохраненные учетные данные станут нечитаемыми. my_super_secret_key_32_chars_long
    N8N_HOST, N8N_PORT, N8N_PROTOCOL, N8N_WEBHOOK_URL Настройки URL, которые n8n использует для генерации корректных ссылок на вебхуки. Критически важны при работе за reverse proxy или на внешнем хосте. your-domain.com / 5678 / https / https://your-domain.com/
    GENERIC_TIMEZONE Часовой пояс для планировщика (schedule node) и временных меток. Europe/Moscow
    DB_TYPE Тип внешней базы данных (если не используется встроенная SQLite). Поддерживаются: postgresdb, mysqldb, mariadb. postgresdb
    DB_POSTGRESDB_HOST, DB_POSTGRESDB_PORT, DB_POSTGRESDB_DATABASE, DB_POSTGRESDB_USER, DB_POSTGRESDB_PASSWORD Параметры подключения к внешней базе данных PostgreSQL. postgres / 5432 / n8n / n8n_user / db_password
    EXECUTIONS_DATA_PRUNE Включает автоматическую очистку старых данных выполнений. true
    EXECUTIONS_DATA_MAX_AGE Максимальный возраст (в часах) данных выполнений перед удалением. 168 (7 дней)

    Настройка внешней базы данных (PostgreSQL)

    Для production-среды категорически не рекомендуется использовать встроенную SQLite. PostgreSQL обеспечивает надежность, производительность и возможность горизонтального масштабирования. Пример файла docker-compose.yml с сервисом PostgreSQL.

    version: '3.8'
    
    services:
      postgres:
        image: postgres:15-alpine
        container_name: n8n_postgres
        restart: unless-stopped
        environment:
          POSTGRES_USER: n8n_user
          POSTGRES_PASSWORD: strong_postgres_password
          POSTGRES_DB: n8n_db
        volumes:
          - postgres_data:/var/lib/postgresql/data
        networks:
          - n8n_network
    
      n8n:
        image: n8nio/n8n
        container_name: n8n
        restart: unless-stopped
        depends_on:
          - postgres
        ports:
          - "5678:5678"
        environment:
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_PORT=5432
          - DB_POSTGRESDB_DATABASE=n8n_db
          - DB_POSTGRESDB_USER=n8n_user
          - DB_POSTGRESDB_PASSWORD=strong_postgres_password
          - N8N_ENCRYPTION_KEY=your_32_character_long_encryption_key_here
          - N8N_BASIC_AUTH_ACTIVE=true
          - N8N_BASIC_AUTH_USER=admin
          - N8N_BASIC_AUTH_PASSWORD=secure_web_password
        volumes:
          - n8n_data:/home/node/.n8n
        networks:
          - n8n_network
    
    volumes:
      postgres_data:
      n8n_data:
    
    networks:
      n8n_network:
        driver: bridge
    

    Перед первым запуском убедитесь, что переменная N8N_ENCRYPTION_KEY задана и сохранена в безопасном месте. После первого запуска с PostgreSQL миграция данных из SQLite не производится автоматически.

    Настройка Reverse Proxy (Nginx) и SSL

    Для безопасного доступа к n8n из интернета необходимо разместить его за reverse proxy (например, Nginx) и настроить SSL-сертификат (например, от Let’s Encrypt).

    Пример конфигурации Nginx (/etc/nginx/sites-available/n8n):

    server {
        listen 80;
        server_name your-domain.com;
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name your-domain.com;
    
        ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    
        location / {
            proxy_pass http://localhost:5678;
            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_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    

    В этом случае в переменных среды n8n должны быть корректно заданы N8N_HOST=your-domain.com, N8N_PROTOCOL=https и N8N_WEBHOOK_URL=https://your-domain.com/.

    Обновление n8n в Docker

    Процесс обновления до новой версии n8n прост и безопасен при правильной настройке томов и внешней БД.

    1. Остановите текущий контейнер: docker-compose down (в директории с compose-файлом).
    2. Получите новую версию образа: docker-compose pull.
    3. Запустите контейнеры заново: docker-compose up -d.

    n8n автоматически выполнит необходимые миграции базы данных при запуске нового образа.

    Резервное копирование и восстановление

    Резервное копирование данных n8n сводится к сохранению двух компонентов:

    • База данных: Для PostgreSQL используйте pg_dump. Для тома Docker с SQLite — копируйте файл database.sqlite из смонтированной директории.
    • Том с пользовательскими файлами: Это директория, смонтированная в /home/node/.n8n. Она содержит файлы рабочих процессов, SSL-сертификаты и т.д. Скопируйте ее целиком.

Пример команды для создания дампа PostgreSQL из контейнера:

docker exec n8n_postgres pg_dump -U n8n_user n8n_db > backup_$(date +%Y%m%d).sql

Часто задаваемые вопросы (FAQ)

Как сбросить пароль базовой аутентификации?

Остановите контейнер, установите новые значения в переменных среды N8N_BASIC_AUTH_USER и N8N_BASIC_AUTH_PASSWORD в файле docker-compose.yml, затем перезапустите контейнер (docker-compose up -d).

Где хранятся логи n8n в Docker?

Логи можно просмотреть с помощью команды docker logs n8n (или docker-compose logs n8n). Для сохранения логов в файл на хосте настройте драйвер логирования Docker (json-file) или смонтируйте отдельный том для директории логов внутри контейнера, если это необходимо.

Почему вебхуки n8n не работают при доступе через домен?

Наиболее вероятная причина — неправильно заданные переменные среды N8N_HOST, N8N_PROTOCOL и N8N_WEBHOOK_URL. Они должны точно соответствовать внешнему URL, по которому вы обращаетесь к n8n. Проверьте настройки reverse proxy и убедитесь, что заголовки (X-Forwarded-*) передаются корректно.

Как увеличить лимит памяти для выполнения рабочих процессов?

Используйте переменную среды EXECUTIONS_PROCESS_BUFFER_SIZE_MAX. Например, EXECUTIONS_PROCESS_BUFFER_SIZE_MAX=1024 установит лимит в 1 ГБ. Также убедитесь, что сам контейнер Docker запущен с достаточными лимитами памяти через флаги --memory и --memory-swap.

Можно ли использовать собственные узлы (custom nodes) в Docker?

Да. Для этого необходимо смонтировать директорию с узлами в путь /home/node/.n8n/custom внутри контейнера. Добавьте в секцию volumes вашего compose-файла строку: - ./custom-nodes:/home/node/.n8n/custom. Поместите свои узлы в директорию ./custom-nodes на хосте.

Как перенести данные с SQLite на PostgreSQL?

Официального инструмента миграции нет. Рекомендуемый способ: создать все рабочие процессы заново в новой установке, подключенной к PostgreSQL, так как учетные данные зашифрованы и не могут быть просто скопированы. Для самих рабочих процессов (JSON) можно использовать функцию экспорта/импорта в интерфейсе n8n.

Как решить проблему с ошибкой «ERR_OSSL_EVP_UNSUPPORTED» в Node.js?

Эта ошибка может возникнуть в новых версиях Node.js. Добавьте в переменные среды n8n следующую опцию: NODE_OPTIONS=--openssl-legacy-provider. Это заставит Node.js использовать старый провайдер OpenSSL.

Как организовать кластеризацию n8n?

Для горизонтального масштабирования (запуска нескольких экземпляров n8n) необходимы: 1) Внешняя база данных (PostgreSQL/MySQL) для хранения состояния. 2) Внешняя очередь сообщений (Redis, RabbitMQ) для координации выполнения. 3) Общее хранилище файлов (например, S3-совместимое) или настроенная репликация томов. Настройки указываются через соответствующие переменные среды (QUEUE_BULL_REDIS_HOST и др.).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *