Установка n8n в Docker: Полное руководство

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

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

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

    • Установленный Docker: Требуется Docker Engine версии 18.06.0 или выше. Установить его можно, следуя официальной документации для вашей операционной системы (Linux, Windows, macOS).
    • Установленный Docker Compose: Рекомендуется использовать Docker Compose версии 1.27.0 или новее для управления многоконтейнерными приложениями. Это значительно упрощает конфигурацию.
    • Системные ресурсы: Минимальные требования: 1 ГБ ОЗУ, 1 ядро CPU. Для производственных сред с большим количеством рабочих процессов рекомендуется 2+ ГБ ОЗУ и 2+ ядра CPU.
    • Сетевой доступ: Для работы веб-интерфейса необходимо открыть соответствующий порт в файрволе (по умолчанию 5678).
    • Доменное имя и SSL-сертификат (опционально): Для безопасного доступа извне рекомендуется настроить обратный прокси (например, Nginx Proxy Manager, Traefik) с валидным SSL-сертификатом.

    Базовый запуск n8n с помощью Docker CLI

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

    Выполните следующую команду в терминале:

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

    Разберем параметры команды:

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

    После выполнения команды n8n будет доступен по адресу http://localhost:5678 (или http://IP_вашего_сервера:5678). Данный метод подходит для ознакомления, но для долгосрочной работы требуется более детальная настройка.

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

    Использование Docker Compose позволяет централизованно управлять всеми настройками n8n в одном файле docker-compose.yml. Это стандартный и рекомендуемый подход.

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

    version: '3.8'
    
    services:
      n8n:
        image: n8nio/n8n
        container_name: n8n
        restart: unless-stopped
        ports:
          - "5678:5678"
        environment:
          - N8N_PROTOCOL=https
          - N8N_HOST=your-domain.com
          - N8N_PORT=5678
          - N8N_WEBHOOK_URL=https://your-domain.com/
          - GENERIC_TIMEZONE=Europe/Moscow
          - N8N_ENCRYPTION_KEY=your_super_secret_encryption_key_here
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_PORT=5432
          - DB_POSTGRESDB_DATABASE=n8n
          - DB_POSTGRESDB_USER=n8n_user
          - DB_POSTGRESDB_PASSWORD=your_secure_password
          - N8N_METRICS=true
          - N8N_METRICS_INCLUDE_DEFAULT_METRICS=true
        volumes:
          - n8n_data:/home/node/.n8n
          - ./local_files:/files
        depends_on:
          - postgres
        networks:
          - n8n_network
    
      postgres:
        image: postgres:15-alpine
        container_name: n8n_postgres
        restart: unless-stopped
        environment:
          - POSTGRES_USER=n8n_user
          - POSTGRES_PASSWORD=your_secure_password
          - POSTGRES_DB=n8n
        volumes:
          - postgres_data:/var/lib/postgresql/data
        networks:
          - n8n_network
    
    volumes:
      n8n_data:
      postgres_data:
    
    networks:
      n8n_network:
        driver: bridge
    

    Детальное описание конфигурации Docker Compose

    Конфигурация состоит из двух сервисов: самого n8n и базы данных PostgreSQL.

    Секция сервиса n8n:

    • image: Указывает используемый образ. Для получения конкретной версии можно использовать тег, например, n8nio/n8n:1.0.0.
    • restart: unless-stopped: Гарантирует автоматический перезапуск контейнера при сбое или перезагрузке хоста.
    • environment: Критически важный блок для настройки n8n через переменные окружения.
    Переменная Назначение Пример значения
    N8N_PROTOCOL, N8N_HOST, N8N_WEBHOOK_URL Используются для корректного формирования URL вебхуков. Обязательны для работы триггеров, основанных на вебхуках. https, automation.example.com, https://automation.example.com/
    N8N_ENCRYPTION_KEY Ключ для шифрования учетных данных в базе данных. Должен быть длиной 16, 24 или 32 символа. Обязательно измените! my_32_char_super_secure_key_abc
    DB_TYPE, DB_POSTGRESDB_* Настройки для подключения к внешней базе данных PostgreSQL. Это необходимо для работы в кластере и повышения надежности. postgresdb, postgres, 5432, n8n
    GENERIC_TIMEZONE Часовой пояс для планировщика (Scheduler) и операций с датами. Europe/Moscow, America/New_York
    N8N_METRICS Включение сбора метрик для мониторинга (Prometheus). true
    • volumes:
      • n8n_data:/home/node/.n8n: Сохраняет пользовательские данные (кроме БД).
      • ./local_files:/files: Позволяет n8n читать/записывать файлы в локальную директорию хоста через узел «Read/Write Files from Disk».

    Секция сервиса PostgreSQL:

    Использование отдельного контейнера с PostgreSQL вместо встроенного SQLite обязательно для производственных развертываний. Это обеспечивает сохранность данных, производительность и возможность резервного копирования.

    • volumes: postgres_data:/var/lib/postgresql/data — том для хранения данных СУБД.

    Запуск и первоначальная настройка

    1. Сохраните файл docker-compose.yml.
    2. В терминале, в той же директории, выполните команду для запуска в фоне: docker-compose up -d.
    3. Проверьте логи контейнеров на наличие ошибок: docker-compose logs -f n8n.
    4. После успешного запуска откройте веб-браузер и перейдите по адресу http://your-server-ip:5678.
    5. Вам будет предложено создать первую учетную запись пользователя. Этот пользователь станет администратором экземпляра.

    Настройка обратного прокси и SSL

    Для безопасного доступа к n8n из интернета необходимо настроить обратный прокси. Пример конфигурации для Nginx:

    server {
        server_name automation.your-domain.com;
    
        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";
        }
    
        listen 443 ssl;
        ssl_certificate /path/to/your/fullchain.pem;
        ssl_certificate_key /path/to/your/privkey.pem;
    }
    
    server {
        if ($host = automation.your-domain.com) {
            return 301 https://$host$request_uri;
        }
        listen 80;
        server_name automation.your-domain.com;
        return 404;
    }
    

    После настройки Nginx обновите переменные N8N_PROTOCOL, N8N_HOST и N8N_WEBHOOK_URL в docker-compose.yml на ваши HTTPS-адреса и выполните docker-compose restart n8n.

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

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

    1. База данных PostgreSQL: Используйте pg_dump или создайте дамп через админ-панель.
      • docker exec n8n_postgres pg_dump -U n8n_user n8n > n8n_backup_$(date +%Y%m%d).sql
    2. Том с пользовательскими данными: Скопируйте содержимое тома Docker.
      • docker run --rm -v n8n_data:/source -v $(pwd):/backup alpine tar czf /backup/n8n_data_backup_$(date +%Y%m%d).tar.gz -C /source .

    Для восстановления разверните новый экземпляр, остановите его, замените данные в томах и перезапустите.

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

    Процесс обновления до новой версии безопасен и прост:

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

    Ответы на часто задаваемые вопросы (FAQ)

    Как изменить порт, на котором работает n8n?

    Измените маппинг портов в секции ports файла docker-compose.yml. Например, для порта 8080: "8080:5678". Также может потребоваться обновить переменную N8N_PORT внутри контейнера.

    Где хранятся мои рабочие процессы и учетные данные?

    При использовании конфигурации с PostgreSQL все рабочие процессы, учетные данные (зашифрованные) и настройки хранятся в базе данных. Дополнительные пользовательские файлы (например, загруженные изображения для узла «HTTP Request») хранятся в томе n8n_data.

    Как сбросить пароль администратора?

    Остановите контейнер n8n. Запустите его с переменной окружения N8N_RESET_ADMIN=true, добавив ее в секцию environment в docker-compose.yml. После запуска учетная запись администратора будет сброшена, и вы сможете зарегистрировать нового пользователя заново. После первого входа обязательно удалите эту переменную и перезапустите контейнер.

    Почему не работают вебхуки?

    Проверьте три ключевых момента:

    • Переменные N8N_PROTOCOL, N8N_HOST и N8N_WEBHOOK_URL установлены корректно и соответствуют публичному адресу, по которому доступен ваш n8n.
    • Порт 5678 (или выбранный вами) открыт в файрволе и проброшен через обратный прокси (если используется).
    • В настройках узла Webhook URL соответствует шаблону https://your-domain.com/webhook-path/.

    Как добавить собственные узлы (custom nodes)?

    Создайте в директории проекта папку custom-nodes и смонтируйте ее в контейнер, добавив в секцию volumes сервиса n8n: - ./custom-nodes:/home/node/.n8n/custom. Поместите npm-пакеты с узлами в эту папку на хосте и перезапустите контейнер. n8n автоматически их обнаружит.

    Как оптимизировать производительность n8n?

    • Используйте внешнюю PostgreSQL вместо SQLite.
    • Настройте переменную EXECUTIONS_DATA_PRUNE для автоматической очистки старых данных выполненных workflows.
    • Для высоких нагрузок рассмотрите использование Execution Mode с отдельными контейнерами для веб-интерфейса и воркеров.
    • Выделите достаточное количество CPU и RAM для контейнера.

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

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

Заключение

Развертывание n8n в Docker с использованием Docker Compose и внешней базы данных PostgreSQL представляет собой надежную, масштабируемую и удобную в обслуживании производственную конфигурацию. Такой подход обеспечивает сохранность данных, простоту обновлений, гибкость настройки и возможность интеграции в более сложные инфраструктуры. Следуя инструкциям, изложенным в данном руководстве, вы сможете установить и настроить мощную платформу автоматизации для решения широкого спектра бизнес-задач, от простых уведомлений до сложных интеграций между корпоративными системами.

Комментарии

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

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

Войти

Зарегистрироваться

Сбросить пароль

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