Установка 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-сертификатом.
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 с помощью Docker CLI
Самый быстрый способ запустить n8n для тестирования — использовать команду docker run. Это создаст и запустит контейнер с настройками по умолчанию.
Выполните следующую команду в терминале:
Разберем параметры команды:
После выполнения команды 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— том для хранения данных СУБД.
Запуск и первоначальная настройка
- Сохраните файл
docker-compose.yml. - В терминале, в той же директории, выполните команду для запуска в фоне:
docker-compose up -d. - Проверьте логи контейнеров на наличие ошибок:
docker-compose logs -f n8n. - После успешного запуска откройте веб-браузер и перейдите по адресу
http://your-server-ip:5678. - Вам будет предложено создать первую учетную запись пользователя. Этот пользователь станет администратором экземпляра.
Настройка обратного прокси и 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 включает два основных компонента:
- База данных PostgreSQL: Используйте
pg_dumpили создайте дамп через админ-панель.docker exec n8n_postgres pg_dump -U n8n_user n8n > n8n_backup_$(date +%Y%m%d).sql
- Том с пользовательскими данными: Скопируйте содержимое тома 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
Процесс обновления до новой версии безопасен и прост:
- Остановите контейнеры:
docker-compose down. - Сделайте резервную копию (как описано выше).
- Обновите образ:
docker-compose pull. - Запустите контейнеры заново:
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 представляет собой надежную, масштабируемую и удобную в обслуживании производственную конфигурацию. Такой подход обеспечивает сохранность данных, простоту обновлений, гибкость настройки и возможность интеграции в более сложные инфраструктуры. Следуя инструкциям, изложенным в данном руководстве, вы сможете установить и настроить мощную платформу автоматизации для решения широкого спектра бизнес-задач, от простых уведомлений до сложных интеграций между корпоративными системами.
Комментарии