evo-containerapp-n8n

0
README.md

Пример развертывания n8n с синхронизацией данных на Evolution Container Apps

Этот пример демонстрирует как развернуть n8n - мощный инструмент автоматизации рабочих процессов с функцией синхронизации данных между контейнером и внешним хранилищем в Evolution Container Apps.

image

Особенности данного решения

  • Автоматическая синхронизация данных: Скрипт
    background_sync_folders.sh
    обеспечивает двустороннюю синхронизацию данных между директорией контейнера
    /home/node/.n8n
    и внешней директорией
    /synced/n8n
  • Сохранение данных: Все ваши рабочие процессы, учетные данные и настройки n8n автоматически сохраняются в синхронизированной директории
  • Отказоустойчивость: При перезапуске контейнера данные автоматически восстанавливаются из синхронизированной директории
  • Мониторинг использования памяти: Встроенный мониторинг отслеживает использование памяти и автоматически завершает приложение при превышении заданного порога для предотвращения OOM Killer

Структура проекта

  • Dockerfile
    - Модифицированный образ n8n с добавлением скриптов синхронизации
  • scripts/
    - Директория со всеми bash-скриптами:
    • docker-entrypoint.sh
      - Точка входа, запускающая синхронизацию перед стартом n8n
    • background_sync_folders.sh
      - Скрипт фоновой синхронизации директорий
    • final_sync.sh
      - Скрипт финальной синхронизации при завершении работы контейнера

Развертывание

  1. Собрать docker-образ для вашего приложения под платформу linux/amd64.

    docker build --tag your-registry.cr.cloud.ru/n8n . --platform linux/amd64

  2. Загрузить собранный образ в Evolution Container Registry

    docker login your-registry.cr.cloud.ru -u <keyid> -p <password>

    docker push your-registry.cr.cloud.ru/n8n

  3. Из контекстного меню в Evolution Container Registry выберите Создать Container App. Необходимо указать порт контейнера в соответствии с указанным в Dockerfile. В данном случае 5678.

Important

Имя контейнера глобально уникальное и задается один раз при создании, по нему формируется публичный fqdn адрес для вашего приложения в формате

<container-app-name>.containerapps.ru
.

Tip

Для получения публичного URL доступного в Интернет используйте опцию Автоматическая публикация

Tip

Для автоматического развертывания новой ревизии приложения при каждом обновлении образа по тегу используйте опцию Автоматическое развертывание и маску тега

  1. Ваше приложение n8n готово и доступно по публичному адресу в формате
    <container-app-name>.containerapps.ru

Как работает синхронизация

Скрипт

background_sync_folders.sh
выполняет следующие действия:

  1. Инициализация: При запуске проверяет наличие данных в исходной (
    /home/node/.n8n
    ) и целевой (
    /synced/n8n
    ) директориях
  2. Восстановление: Если исходная директория пуста, а целевая содержит данные - выполняет копирование из целевой в исходную
  3. Фоновая синхронизация: Запускает бесконечный процесс, который каждые 5 секунд копирует файлы из исходной директории в целевую

Безопасное завершение работы

Реализована обработка сигналов завершения (SIGTERM/SIGINT) для корректного завершения работы n8n и сохранения данных:

  1. Перехват сигнала: При получении сигнала завершения система корректно останавливает n8n
  2. Ожидание завершения: Дожидается полного завершения процесса n8n
  3. Финальная синхронизация: Выполняет финальную синхронизацию данных с помощью скрипта
    final_sync.sh
  4. Гарантированное сохранение: Обеспечивает сохранение всех изменений перед завершением контейнера

Это предотвращает потерю данных при штатном завершении работы контейнера.

Переменные окружения

В Dockerfile настроены следующие переменные окружения для оптимальной работы n8n:

  • N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false
    - Отключает принудительную проверку прав доступа к файлам настроек
  • N8N_GIT_NODE_DISABLE_BARE_REPOS=true
    - Отключает создание bare репозиториев в Git нодах
  • N8N_BLOCK_ENV_ACCESS_IN_NODE=false
    - Отключает блокировку доступа к переменным окружения в кодовых нодах
  • N8N_RUNNERS_ENABLED=true
    - Включает встроенные исполнители для повышения производительности
  • N8N_RUNNER_AUTH_TOKEN
    - Автоматически генерируемый токен для безопасной аутентификации между n8n сервером и исполнителями
  • DB_SQLITE_POOL_SIZE=10
    - Устанавливает размер пула соединений SQLite
  • MEMORY_KILL_THRESHOLD_PERCENT=95
    - Порог использования памяти (в процентах) при достижении которого приложение будет автоматически завершено для предотвращения OOM Killer
  • MEMORY_WARNING_THRESHOLD_PERCENT=85
    - Порог использования памяти (в процентах) при достижении которого в логах выводиться предупреждения о высоком потреблении памяти

Использование

После развертывания вы можете:

  1. Открыть n8n в браузере по адресу вашего контейнера
  2. Создавать рабочие процессы, которые будут автоматически сохраняться
  3. Настроить интеграции с различными сервисами
  4. Использовать все возможности 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

Способы исправления:

  1. Через консоль Cloud.ru:

    • Откройте Container Apps
    • Выберите ваш контейнер n8n
    • Нажмите "Редактировать"
    • Добавьте переменные окружения в соответствующий раздел
    • Сохраните и перезапустите контейнер
  2. Использование исправленного образа:

    • Используйте образ
      n8n-public.cr.cloud.ru/n8n_with_script:fixed
    • Он содержит автоматическую настройку всех необходимых переменных

После применения исправлений ошибка 403 должна исчезнуть.

Техническая поддержка

При возникновении вопросов или проблем с развертыванием обратитесь к документации n8n или поддержке Evolution Container Apps.