N8n установка в докер

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

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

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

Перед началом установки необходимо убедиться, что на вашем сервере или рабочей станции установлен Docker и, опционально, Docker Compose. Минимальные системные требования для работы n8n зависят от сложности и количества выполняемых рабочих процессов, но для старта достаточно 2 ГБ оперативной памяти и 2 ядер CPU. Для хранения данных необходимо подготовить директорию на хостовой машине.

    • Установленный Docker Engine версии 20.10.0 или выше. Проверьте командой: docker --version.
    • Установленный Docker Compose (рекомендуется) версии 2.0.0 или выше. Проверьте командой: docker compose version.
    • Выделенный каталог для данных n8n, например, /opt/n8n или ~/n8n.
    • Открытые порты на фаерволе (если применимо): стандартно используется порт 5678.

    Базовая установка n8n с помощью Docker run

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

    Команда для запуска контейнера n8n в самом простом виде:

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

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

    • -it: Запуск в интерактивном режиме с псевдо-TTY (удобно для просмотра логов).
    • --rm: Автоматическое удаление контейнера после его остановки (не используйте для продакшена).
    • --name n8n</code: Присвоение имени контейнеру.
    • -p 5678:5678: Проброс порта. Веб-интерфейс n8n будет доступен по адресу http://localhost:5678.
    • -v ~/.n8n:/home/node/.n8n: Монтирование тома для сохранения данных (workflows, учетные данные, настройки) на хост-машину.
    • n8nio/n8n: Официальный образ с Docker Hub.

    После выполнения команды контейнер запустится. В логах вы увидите сообщение Editor is now accessible via http://localhost:5678!. Откройте этот адрес в браузере. Первый экран предложит создать учетную запись первого пользователя. Важно: без настройки аутентификации (переменная N8N_BASIC_AUTH_ACTIVE) ваш экземпляр будет открыт для всех.

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

    Для надежной работы в production-среде рекомендуется использовать Docker Compose. Он позволяет декларативно описать все параметры контейнера, включая тома, переменные окружения и сетевые настройки.

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

    mkdir n8n-docker && cd n8n-docker
    nano 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
          - NODE_ENV=production
          - WEBHOOK_URL=https://your-domain.com
          - N8N_PROTOCOL=https
          - N8N_HOST=your-domain.com
          - N8N_PORT=5678
          - GENERIC_TIMEZONE=Europe/Moscow
        volumes:
          - n8n_data:/home/node/.n8n
          - ./local-files:/files
    
    volumes:
      n8n_data:
    

    Запустите развертывание командой:

    docker compose up -d

    Флаг -d запускает контейнер в фоновом режиме (демон). Проверить статус можно командой docker compose logs -f.

    Детальный разбор ключевых переменных окружения

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

    Переменная Назначение Пример значения Обязательность
    N8N_BASIC_AUTH_ACTIVE Включает базовую HTTP аутентификацию для веб-интерфейса и REST API. true Рекомендуется для продакшена
    N8N_BASIC_AUTH_USER / N8N_BASIC_AUTH_PASSWORD Логин и пароль для доступа. admin / myStrongPass123 Если активна аутентификация
    N8N_PROTOCOL, N8N_HOST, WEBHOOK_URL Критически важны для корректной работы вебхуков. Задают публичный URL, по которому n8n доступен извне. https / n8n.mydomain.com / https://n8n.mydomain.com Для работы вебхуков
    GENERIC_TIMEZONE Часовой пояс для выполнения рабочих процессов. Europe/Moscow Опционально
    EXECUTIONS_DATA_PRUNE Включает автоматическую очистку старых данных выполнений. true Опционально
    EXECUTIONS_DATA_MAX_AGE Максимальный возраст (в часах) данных выполнений перед удалением. 168 (7 дней) Если включен prune
    DB_TYPE Тип базы данных (по умолчанию SQLite). Для продакшена рекомендуется PostgreSQL. postgresdb Для масштабирования

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

    Использование встроенной SQLite не подходит для production, так как не поддерживает параллельный доступ и имеет ограничения производительности. Решением является подключение 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
          - POSTGRES_PASSWORD=n8n_strong_password
          - POSTGRES_DB=n8n
          - POSTGRES_NON_ROOT_USER=n8n
        volumes:
          - postgres_data:/var/lib/postgresql/data
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U n8n"]
          interval: 10s
          timeout: 5s
          retries: 5
    
      n8n:
        image: n8nio/n8n
        container_name: n8n
        restart: unless-stopped
        depends_on:
          postgres:
            condition: service_healthy
        ports:
          - "5678:5678"
        environment:
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_PORT=5432
          - DB_POSTGRESDB_DATABASE=n8n
          - DB_POSTGRESDB_USER=n8n
          - DB_POSTGRESDB_PASSWORD=n8n_strong_password
          - N8N_BASIC_AUTH_ACTIVE=true
          - N8N_BASIC_AUTH_USER=admin
          - N8N_BASIC_AUTH_PASSWORD=admin_strong_password
          - WEBHOOK_URL=https://your-domain.com
          - N8N_PROTOCOL=https
        volumes:
          - n8n_data:/home/node/.n8n
          - ./local-files:/files
    
    volumes:
      n8n_data:
      postgres_data:
    

    Ключевые моменты:

    • Добавлен сервис postgres с собственным томом для данных.
    • Настроен healthcheck для БД, чтобы n8n запускался только после готовности PostgreSQL.
    • В сервисе n8n указаны переменные DB_TYPE и связанные с подключением к PostgreSQL.
    • Параметр depends_on с условием service_healthy гарантирует правильный порядок запуска.

    Настройка реверс-прокси (Nginx) и HTTPS

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

    
    server {
        listen 80;
        server_name n8n.your-domain.com;
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name n8n.your-domain.com;
    
        ssl_certificate /etc/letsencrypt/live/n8n.your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/n8n.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 (WEBHOOK_URL, N8N_HOST, N8N_PROTOCOL) необходимо указать ваш домен и протокол HTTPS.

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

    Данные n8n хранятся в смонтированных томах Docker. Для резервного копирования необходимо архивировать соответствующие директории.

    • При использовании SQLite: Резервируется весь том /home/node/.n8n (монтируется, например, в ~/n8n_data).
    • При использовании PostgreSQL: Резервируется том с данными PostgreSQL и, отдельно, том n8n, где хранятся загруженные файлы и конфигурации.

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

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

    Для восстановления:

    cat backup_file.sql | docker exec -i n8n_postgres psql -U n8n -d n8n

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

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

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

Перед обновлением в production всегда делайте полную резервную копию данных.

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

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

Измените маппинг портов в команде docker run или в файле docker-compose.yml. Например, для порта 8080: - "8080:5678". Внутри контейнера порт n8n (5678) остается неизменным.

Где хранятся созданные workflows и учетные данные?

По умолчанию, при использовании тома, все данные хранятся внутри контейнера в директории /home/node/.n8n. При монтировании тома (опция -v) они сохраняются на хост-машине по указанному пути. При использовании внешней БД workflows хранятся в ней.

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

Наиболее частая причина — неправильная настройка переменных окружения WEBHOOK_URL, N8N_PROTOCOL и N8N_HOST. Они должны точно соответствовать публичному URL, по которому ваш инстанс n8n доступен извне. Также убедитесь, что порт открыт на фаерволе и настроен реверс-прокси.

Как увеличить лимит памяти для контейнера n8n?

В Docker Compose можно использовать параметры deploy.resources.limits. Либо при запуске через docker run используйте флаги -m или --memory. Пример для Compose:


services:
  n8n:
    ...
    deploy:
      resources:
        limits:
          memory: 2048M

Как подключить custom node или выполнить npm install внутри контейнера?

Рекомендуемый способ — создание собственного Dockerfile на основе официального образа. Пример:


FROM n8nio/n8n
USER root
RUN npm install -g n8n-nodes-your-custom-package
USER node

Затем соберите образ и укажите его в docker-compose.yml.

Как решить проблему с ошибкой "ETIMEDOUT" при работе с нодами, требующими исходящего интернета?

Убедитесь, что контейнер имеет доступ к внешней сети. Проверьте сетевые настройки Docker. Если используется прокси-сервер, его необходимо настроить внутри контейнера через переменные окружения HTTP_PROXY, HTTPS_PROXY, NO_PROXY.

Как организовать кластеризацию n8n для высокой доступности?

Для горизонтального масштабирования необходима внешняя база данных (PostgreSQL) и внешний брокер сообщений (например, Redis) для координации выполнения процессов. Запустите несколько экземпляров контейнеров n8n, подключенных к одной БД и Redis, и используйте балансировщик нагрузки перед ними.

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

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