Установка 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).
- Обновление репозиториев:
sudo apt-get update - Установка Docker:
sudo apt-get install docker.io docker-compose - Запуск и добавление в автозагрузку:
sudo systemctl enable --now docker - Добавление текущего пользователя в группу docker:
sudo usermod -aG docker $USER -d(detach): Запуск контейнера в фоновом режиме.--name n8n: Присвоение имени контейнеру для удобства управления.-p 5678:5678: Проброс порта. Левый порт (5678) — порт на хосте, правый (5678) — порт внутри контейнера. Вы можете изменить первый на любой свободный порт хоста (например,-p 8080:5678).-v ~/.n8n:/home/node/.n8n: Создание тома для сохранения данных. Эта команда монтирует локальную директорию~/.n8nв директорию внутри контейнера, где n8n хранит рабочие процессы, учетные данные и логи. Это критически важно для сохранения данных между перезапусками контейнера.n8nio/n8n: Имя официального образа из Docker Hub.
Установите Docker, следуя официальной документации для вашей ОС. Для Linux-систем можно использовать команды:
Базовый запуск n8n через Docker Run
Самый быстрый способ запустить n8n — использовать команду docker run. Это создаст и запустит контейнер из официального образа с настройками по умолчанию.
Базовая команда для запуска:
docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n
Разберем ключевые параметры:
После выполнения команды 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 прост и безопасен при правильной настройке томов и внешней БД.
- Остановите текущий контейнер:
docker-compose down(в директории с compose-файлом). - Получите новую версию образа:
docker-compose pull. - Запустите контейнеры заново:
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 и др.).
Добавить комментарий