Установка и настройка 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.
-it: Запуск в интерактивном режиме с псевдо-TTY (удобно для просмотра логов).--rm: Автоматическое удаление контейнера после его остановки (не используйте для продакшена).--name n8n</code: Присвоение имени контейнеру.-p 5678:5678: Проброс порта. Веб-интерфейс n8n будет доступен по адресу http://localhost:5678.-v ~/.n8n:/home/node/.n8n: Монтирование тома для сохранения данных (workflows, учетные данные, настройки) на хост-машину.n8nio/n8n: Официальный образ с Docker Hub.
Базовая установка 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
Разберем ключевые параметры:
После выполнения команды контейнер запустится. В логах вы увидите сообщение 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
Процесс обновления до новой версии прост:
- Остановите контейнер:
docker compose down(в директории сdocker-compose.yml). - Потяните новую версию образа:
docker compose pull. - Запустите контейнер заново:
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, и используйте балансировщик нагрузки перед ними.
Добавить комментарий