evo-containerapp-n8n
Пример развертывания n8n с синхронизацией данных на Evolution Container Apps
Этот пример демонстрирует как развернуть n8n - мощный инструмент автоматизации рабочих процессов с функцией синхронизации данных между контейнером и внешним хранилищем в Evolution Container Apps.
Особенности данного решения
- Автоматическая синхронизация данных: Скрипт
обеспечивает двустороннюю синхронизацию данных между директорией контейнераbackground_sync_folders.shи внешней директорией/home/node/.n8n/synced/n8n - Сохранение данных: Все ваши рабочие процессы, учетные данные и настройки n8n автоматически сохраняются в синхронизированной директории
- Отказоустойчивость: При перезапуске контейнера данные автоматически восстанавливаются из синхронизированной директории
- Мониторинг использования памяти: Встроенный мониторинг отслеживает использование памяти и автоматически завершает приложение при превышении заданного порога для предотвращения OOM Killer
Структура проекта
- Модифицированный образ n8n с добавлением скриптов синхронизацииDockerfile- Директория со всеми bash-скриптами:scripts/- Точка входа, запускающая синхронизацию перед стартом n8ndocker-entrypoint.sh- Скрипт фоновой синхронизации директорийbackground_sync_folders.sh- Скрипт финальной синхронизации при завершении работы контейнераfinal_sync.sh
Развертывание
-
Собрать docker-образ для вашего приложения под платформу linux/amd64.
docker build --tag your-registry.cr.cloud.ru/n8n . --platform linux/amd64 -
Загрузить собранный образ в Evolution Container Registry
docker login your-registry.cr.cloud.ru -u <keyid> -p <password>docker push your-registry.cr.cloud.ru/n8n -
Из контекстного меню в Evolution Container Registry выберите Создать Container App. Необходимо указать порт контейнера в соответствии с указанным в Dockerfile. В данном случае 5678.
Important
Имя контейнера глобально уникальное и задается один раз при создании, по нему формируется публичный fqdn адрес для вашего приложения в формате
.<container-app-name>.containerapps.ru
Tip
Для получения публичного URL доступного в Интернет используйте опцию Автоматическая публикация
Tip
Для автоматического развертывания новой ревизии приложения при каждом обновлении образа по тегу используйте опцию Автоматическое развертывание и маску тега
- Ваше приложение n8n готово и доступно по публичному адресу в формате <container-app-name>.containerapps.ru
Как работает синхронизация
Скрипт выполняет следующие действия:
- Инициализация: При запуске проверяет наличие данных в исходной (
) и целевой (/home/node/.n8n) директориях/synced/n8n - Восстановление: Если исходная директория пуста, а целевая содержит данные - выполняет копирование из целевой в исходную
- Фоновая синхронизация: Запускает бесконечный процесс, который каждые 5 секунд копирует файлы из исходной директории в целевую
Безопасное завершение работы
Реализована обработка сигналов завершения (SIGTERM/SIGINT) для корректного завершения работы n8n и сохранения данных:
- Перехват сигнала: При получении сигнала завершения система корректно останавливает n8n
- Ожидание завершения: Дожидается полного завершения процесса n8n
- Финальная синхронизация: Выполняет финальную синхронизацию данных с помощью скрипта final_sync.sh
- Гарантированное сохранение: Обеспечивает сохранение всех изменений перед завершением контейнера
Это предотвращает потерю данных при штатном завершении работы контейнера.
Переменные окружения
В Dockerfile настроены следующие переменные окружения для оптимальной работы n8n:
- Отключает принудительную проверку прав доступа к файлам настроекN8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false- Отключает создание bare репозиториев в Git нодахN8N_GIT_NODE_DISABLE_BARE_REPOS=true- Отключает блокировку доступа к переменным окружения в кодовых нодахN8N_BLOCK_ENV_ACCESS_IN_NODE=false- Включает встроенные исполнители для повышения производительностиN8N_RUNNERS_ENABLED=true- Автоматически генерируемый токен для безопасной аутентификации между n8n сервером и исполнителямиN8N_RUNNER_AUTH_TOKEN- Устанавливает размер пула соединений SQLiteDB_SQLITE_POOL_SIZE=10- Порог использования памяти (в процентах) при достижении которого приложение будет автоматически завершено для предотвращения OOM KillerMEMORY_KILL_THRESHOLD_PERCENT=95- Порог использования памяти (в процентах) при достижении которого в логах выводиться предупреждения о высоком потреблении памятиMEMORY_WARNING_THRESHOLD_PERCENT=85
Использование
После развертывания вы можете:
- Открыть n8n в браузере по адресу вашего контейнера
- Создавать рабочие процессы, которые будут автоматически сохраняться
- Настроить интеграции с различными сервисами
- Использовать все возможности n8n с гарантией сохранения данных
Исправление ошибок
Ошибка "Task runner connection attempt failed with status code 403"
Если вы видите эту ошибку в логах контейнера, необходимо добавить следующие переменные окружения в конфигурацию контейнера:
N8N_RUNNERS_ENABLED=true
N8N_RUNNER_MODE=internal
N8N_RUNNER_AUTH_TOKEN=19f6911e6cc945367045940a826968d0
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false
N8N_GIT_NODE_DISABLE_BARE_REPOS=true
N8N_BLOCK_ENV_ACCESS_IN_NODE=false
DB_SQLITE_POOL_SIZE=10
MEMORY_KILL_THRESHOLD_PERCENT=95
MEMORY_WARNING_THRESHOLD_PERCENT=85
Способы исправления:
-
Через консоль Cloud.ru:
- Откройте Container Apps
- Выберите ваш контейнер n8n
- Нажмите "Редактировать"
- Добавьте переменные окружения в соответствующий раздел
- Сохраните и перезапустите контейнер
-
Использование исправленного образа:
- Используйте образ n8n-public.cr.cloud.ru/n8n_with_script:fixed
- Он содержит автоматическую настройку всех необходимых переменных
- Используйте образ
После применения исправлений ошибка 403 должна исчезнуть.
Техническая поддержка
При возникновении вопросов или проблем с развертыванием обратитесь к документации n8n или поддержке Evolution Container Apps.