Установка и настройка n8n в Docker: Полное руководство
N8n — это мощный инструмент для автоматизации рабочих процессов с открытым исходным кодом, который позволяет соединять различные приложения, API и сервисы между собой. Развертывание n8n в контейнере Docker является предпочтительным методом, так как обеспечивает изоляцию, простоту управления зависимостями, масштабируемость и воспроизводимость среды. Данное руководство детально описывает процесс установки, базовой и расширенной настройки n8n в Docker, а также решение распространенных проблем.
Предварительные требования и подготовка
Перед началом установки необходимо убедиться, что на вашем сервере или локальной машине выполнены следующие условия.
- Установленный Docker: Требуется Docker Engine версии 20.10.0 или выше. Для проверки установки выполните в терминале команду
docker --version. - Установленный Docker Compose: Рекомендуется Docker Compose версии 2.0.0 и выше. Проверка осуществляется командой
docker compose version. Для старых установок может использоватьсяdocker-compose --version. - Вычислительные ресурсы: Минимальные требования: 1-2 ядра CPU, 2 ГБ оперативной памяти, 10 ГБ свободного дискового пространства. Для production-среды ресурсы должны быть увеличены.
- Сетевые настройки: Порт 5678 (используемый по умолчанию веб-интерфейсом n8n) должен быть свободен и доступен. Для работы с внешними API и сервисами необходим стабильный выход в интернет.
-d: Запуск контейнера в фоновом режиме (detached).--name n8n: Присвоение контейнеру имени «n8n» для удобства управления.-p 5678:5678: Проброс порта. Левый порт (5678) — порт на хосте, правый (5678) — порт внутри контейнера. Вы можете изменить левый порт, например, на-p 8080:5678.-v ~/.n8n:/home/node/.n8n: Создание тома для сохранения данных (workflows, учетные данные, настройки) на хост-машине в папке~/.n8n. Это предотвращает потерю данных при пересоздании контейнера.n8nio/n8n: Официальный образ n8n с Docker Hub.
Базовый запуск n8n с помощью Docker CLI
Самый быстрый способ запустить n8n для тестирования — использовать одну команду Docker run. Этот метод подходит для ознакомления, но не рекомендуется для долгосрочного использования, так как все данные будут потеряны при остановке контейнера.
Команда для запуска:
docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n
Разбор параметров команды:
После выполнения команды n8n будет доступен по адресу http://localhost:5678 (или http://<IP_вашего_сервера>:5678).
Продвинутая настройка с использованием Docker Compose
Для production-развертывания или сложных конфигураций использование Docker Compose является стандартом. Этот метод позволяет централизованно управлять всеми параметрами n8n и его зависимостями (например, базой данных) в одном 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=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
- WEBHOOK_URL=http://localhost:5678/
- 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 удалит том с данными, используйте с осторожностью).
Ключевые переменные окружения для настройки n8n
Поведение n8n в Docker управляется через переменные окружения. Ниже приведена таблица наиболее важных из них.
| Переменная | Назначение | Пример значения | Важность |
|---|---|---|---|
| N8N_BASIC_AUTH_ACTIVE | Включает базовую HTTP-аутентификацию для веб-интерфейса и API. | true | Критично для публично доступных инстансов. |
| N8N_BASIC_AUTH_USER / N8N_BASIC_AUTH_PASSWORD | Логин и пароль для аутентификации. | admin / MyStr0ngP@ss | Обязательны, если активна базовая аутентификация. |
| N8N_ENCRYPTION_KEY | Ключ для шифрования учетных данных workflow. Должен быть длиной 16, 24 или 32 символа. | my_super_secret_key_32_chars_long | Критично для безопасности. Должен быть задан перед первым запуском и сохранен. |
| DB_TYPE | Тип внешней базы данных (если не используется SQLite по умолчанию). | postgresdb | Важно для production, чтобы сохранять данные в надежном хранилище. |
| DB_POSTGRESDB_HOST, DB_POSTGRESDB_DATABASE, DB_POSTGRESDB_USER, DB_POSTGRESDB_PASSWORD | Параметры подключения к PostgreSQL. | postgres, n8n, n8n_user, db_password | Обязательны для использования внешней БД. |
| EXECUTIONS_DATA_PRUNE | Включает автоматическую очистку старых данных выполненных workflow. | true | Рекомендуется для экономии места в БД. |
| EXECUTIONS_DATA_MAX_AGE | Максимальный возраст (в часах) данных выполненных workflow перед удалением. | 168 (7 дней) | Настраивается под нужды. |
| N8N_PROTOCOL, N8N_HOST, WEBHOOK_URL | Используются для генерации корректных URL вебхуков. | https, n8n.yourdomain.com, https://n8n.yourdomain.com/ | Критично, если n8n находится за reverse proxy или доступен по HTTPS. |
Настройка внешней базы данных (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_user
- POSTGRES_PASSWORD=strong_postgres_password
- POSTGRES_DB=n8n_db
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- n8n_network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n_user -d n8n_db"]
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
- 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_ui_password
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.yourdomain.com
volumes:
- n8n_local_data:/home/node/.n8n
networks:
- n8n_network
volumes:
postgres_data:
n8n_local_data:
networks:
n8n_network:
driver: bridge
Перед первым запуском с новой базой данных необходимо сгенерировать и прописать уникальный, надежный ключ шифрования (N8N_ENCRYPTION_KEY). После первого запуска его менять нельзя без потери доступа к зашифрованным данным.
Развертывание за Reverse Proxy (Nginx Proxy Manager, Traefik)
Для безопасного доступа к n8n извне необходимо использовать HTTPS и доменное имя. Это реализуется с помощью reverse proxy.
Пример конфигурации для Nginx Proxy Manager (NPM):
- Установите и настройте NPM на своем сервере.
- В настройках n8n в Docker Compose убедитесь, что заданы переменные:
N8N_PROTOCOL=https,N8N_HOST=your_n8n_domain.com,WEBHOOK_URL=https://your_n8n_domain.com/. - В веб-интерфейсе NPM создайте новый Proxy Host:
- Domain Names: your_n8n_domain.com
- Forward Hostname / IP: имя сервиса n8n из docker-compose (например,
n8n) или IP сервера. - Forward Port: 5678
- Включите опции «Block Common Exploits» и «Force SSL».
- Добавьте SSL-сертификат (например, через Let’s Encrypt).
Для Traefik v2 конфигурация может быть добавлена через лейблы в docker-compose файл сервиса n8n.
Резервное копирование и восстановление данных
Резервное копирование данных n8n при использовании Docker сводится к сохранению двух основных компонентов.
- База данных: Для PostgreSQL используйте команду
docker execдля создания дампа.docker exec n8n_postgres pg_dump -U n8n_user n8n_db > n8n_backup_$(date +%Y%m%d).sqlВосстановление:
cat backup_file.sql | docker exec -i n8n_postgres psql -U n8n_user -d n8n_db - Том с локальными файлами: Если вы монтируете локальные файлы (например, для узлов, требующих доступа к файловой системе), эту директорию также необходимо архивировать.
Обновление n8n в Docker
Процесс обновления до новой версии n8n при использовании Docker Compose прост и безопасен при условии, что данные сохранены во внешних томах.
- Остановите текущий контейнер:
docker compose down. - Потяните новую версию образа:
docker compose pull. - Запустите контейнеры заново:
docker compose up -d. - Удалите старые, неиспользуемые образы:
docker image prune.
Перед обновлением в production всегда рекомендуется проверить changelog новой версии и создать полную резервную копию данных.
Часто задаваемые вопросы (FAQ)
Как сбросить пароль администратора в n8n?
Если включена базовая аутентификация и пароль утерян, необходимо остановить контейнер, установить новые значения в переменных окружения N8N_BASIC_AUTH_USER и N8N_BASIC_AUTH_PASSWORD в файле docker-compose.yml, и перезапустить контейнеры (docker compose up -d). Невозможно восстановить старый пароль, только установить новый.
Почему вебхуки n8n не работают при развертывании за reverse proxy?
Наиболее частая причина — неправильно заданные переменные окружения N8N_PROTOCOL, N8N_HOST и WEBHOOK_URL. Они должны соответствовать внешнему URL, по которому доступен ваш инстанс n8n (например, https://n8n.mydomain.com). Убедитесь, что в настройках proxy корректно передаются заголовки, особенно X-Forwarded-Proto и X-Forwarded-Host.
Как увеличить лимит памяти для выполнения workflow (execution)?
По умолчанию n8n использует лимит памяти Node.js. Вы можете задать переменную окружения NODE_OPTIONS=--max-old-space-size=2048 (значение в МБ) в конфигурации Docker. Для тяжелых workflow рекомендуется установить значение 4096 (4 ГБ) или выше, в зависимости от ресурсов сервера.
Как установить кастомные узлы (community nodes) в Docker?
Самый чистый способ — создать собственный Dockerfile на основе официального образа n8n и установить необходимые пакеты узлов с помощью npm. Пример Dockerfile:
FROM n8nio/n8n
USER root
RUN npm install -g n8n-nodes-community-node-name
USER node
Затем соберите образ и укажите его в вашем docker-compose.yml вместо n8nio/n8n.
Где хранятся логи n8n в Docker и как их просмотреть?
Логи по умолчанию выводятся в stdout контейнера. Для их просмотра используйте команды:
- Просмотр логов в реальном времени:
docker logs -f n8n. - Просмотр логов за определенный период:
docker logs --since 1h n8n. - Логи можно направить во внешнюю систему (например, ELK Stack) с помощью драйвера логирования Docker (опция
loggingв docker-compose).
Как перенести данные n8n с SQLite на PostgreSQL?
Официальный метод — использовать встроенную функцию экспорта/импорта. Сначала выполните полный экспорт всех данных (workflows, credentials, settings) через интерфейс n8n, работающий на SQLite. Затем настройте и запустите новый инстанс n8n с подключением к PostgreSQL. В новом инстансе выполните импорт ранее сохраненного файла. Прямое копирование файлов базы данных невозможно из-за различий в структуре и шифровании.
Заключение
Развертывание n8n с использованием Docker и Docker Compose предоставляет надежный, масштабируемый и легко воспроизводимый способ запуска этого мощного инструмента автоматизации. Ключевыми шагами для production-готовой установки являются: использование внешней базы данных PostgreSQL, настройка базовой аутентификации и корректного ключа шифрования, проксирование трафика через reverse proxy с HTTPS, а также настройка политик резервного копирования и обновления. Следование инструкциям, изложенным в данном руководстве, позволит создать стабильную и безопасную среду для построения и выполнения сложных рабочих процессов.
Комментарии