# тест тест volumes: n8n_storage: postgres_data: valkey-data: grafana-data: prometheus_data: x-n8n: &service-n8n image: n8nio/n8n:stable restart: unless-stopped environment: WEBHOOK_URL: ${WEBHOOK_URL:-} N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY:-} # Изоляция self-hosted # https://docs.n8n.io/hosting/configuration/configuration-examples/isolation/ # ============================================================================= # N8N_DIAGNOSTICS_ENABLED - Отправлять анонимную телеметрию (false отключает Ask AI в Code node). По умолчанию: true. # N8N_VERSION_NOTIFICATIONS_ENABLED - Уведомления о новых версиях. По умолчанию: true. # N8N_TEMPLATES_ENABLED - Включить шаблоны workflow. По умолчанию: false. # N8N_HIRING_BANNER_ENABLED - Баннер о вакансиях в консоли. По умолчанию: true. N8N_DIAGNOSTICS_ENABLED: false N8N_VERSION_NOTIFICATIONS_ENABLED: false N8N_TEMPLATES_ENABLED: false N8N_HIRING_BANNER_ENABLED: false # Настройки логирования # https://docs.n8n.io/hosting/configuration/environment-variables/logs/ # ============================================================================= # N8N_LOG_LEVEL - Уровень логирования: info|warn|error|debug. По умолчанию: info. # N8N_LOG_OUTPUT - Куда выводить: console|file (через запятую). По умолчанию: console. # N8N_LOG_FORMAT - Формат: text|json. По умолчанию: text. # N8N_LOG_FILE_LOCATION - Путь к файлу лога. По умолчанию: ~/.n8n/logs/n8n.log. # N8N_LOG_FILE_SIZE_MAX - Максимальный размер файла лога (MB). По умолчанию: 16. # DB_LOGGING_ENABLED - Логирование запросов к БД. По умолчанию: false. # DB_LOGGING_OPTIONS - Уровень логирования БД: query|error|schema|warn|info|log|all. По умолчанию: error. # CODE_ENABLE_STDOUT - Выводить console.log из Code node в stdout. По умолчанию: false. N8N_LOG_LEVEL: info N8N_LOG_OUTPUT: console,file N8N_LOG_FORMAT: json N8N_LOG_FILE_LOCATION: /data/logs/n8n.log N8N_LOG_FILE_SIZE_MAX: 20 N8N_LOG_FILE_COUNT_MAX: 10 DB_LOGGING_ENABLED: true DB_LOGGING_OPTIONS: error CODE_ENABLE_STDOUT: false # Персонализация # ============================================================================= # N8N_PERSONALIZATION_ENABLED - Вопросы персонализации при первом запуске. По умолчанию: true. # N8N_HIDE_USAGE_PAGE - Скрыть страницу использования и планов. По умолчанию: false. N8N_PERSONALIZATION_ENABLED: false N8N_HIDE_USAGE_PAGE: true # Настройки узлов (Nodes) # https://docs.n8n.io/hosting/configuration/environment-variables/nodes/ # NODES_EXCLUDE: Список узлов, которые не нужно загружать (блокировка). Пример: ["n8n-nodes-baseexecuteCommand"]. NODES_EXCLUDE: ${NODES_EXCLUDE:-[]} # Настройки безопасности # https://docs.n8n.io/hosting/configuration/environment-variables/security/ # N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES - Блокировать доступ к файлам .n8n и конфигам. По умолчанию: true. # N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS - Права 0600 на файл настроек. По умолчанию: false. # N8N_RESTRICT_FILE_ACCESS_TO - Директории с разрешенным доступом к файлам (через ;). По умолчанию: "". N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES: true N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: false N8N_RESTRICT_FILE_ACCESS_TO: /data/shared;/data/logs # Настройки часового пояса и локализации # https://docs.n8n.io/hosting/configuration/environment-variables/timezone-localization/ # ============================================================================= # GENERIC_TIMEZONE - Часовой пояс (важно для Schedule/Cron узлов). По умолчанию: America/New_York. # N8N_DEFAULT_LOCALE - Локаль интерфейса (региональные идентификаторы не поддерживаются). По умолчанию: en. GENERIC_TIMEZONE: ${GENERIC_TIMEZONE:-Europe/Moscow} N8N_DEFAULT_LOCALE: ${N8N_DEFAULT_LOCALE:-en} # Настройки базы данных PostgreSQL # https://docs.n8n.io/hosting/configuration/environment-variables/database/ # ============================================================================= # -- Параметры подключения # DB_POSTGRESDB_DATABASE - Имя базы данных PostgreSQL(по умолчанию: n8n) # DB_POSTGRESDB_HOST - Хост PostgreSQL сервера(по умолчанию: localhost) # DB_POSTGRESDB_PORT - Порт PostgreSQL сервера(по умолчанию: 5432) # DB_POSTGRESDB_USER - Имя пользователя PostgreSQL(по умолчанию: postgres) # DB_POSTGRESDB_PASSWORD - Пароль PostgreSQL(обязательное поле, нет значения по умолчанию) DB_TYPE: postgresdb DB_POSTGRESDB_DATABASE: ${DB_POSTGRESDB_DATABASE:-n8n} DB_POSTGRESDB_HOST: ${DB_POSTGRESDB_HOST:-postgres} DB_POSTGRESDB_PORT: ${DB_POSTGRESDB_PORT:-5432} DB_POSTGRESDB_USER: ${DB_POSTGRESDB_USER:-postgres} DB_POSTGRESDB_PASSWORD: ${DB_POSTGRESDB_PASSWORD:-your_secure_password_here} # Настройки Task Runner # https://docs.n8n.io/hosting/configuration/environment-variables/task-runners/ # ============================================================================= # N8N_RUNNERS_ENABLED - Включить task runners (рекомендуется для production). По умолчанию: false. # N8N_RUNNERS_MODE - Режим: internal|external. По умолчанию: internal. # N8N_RUNNERS_BROKER_LISTEN_ADDRESS - Адрес брокера (127.0.0.1 для internal, 0.0.0.0 для external). По умолчанию: 127.0.0.1. # N8N_RUNNERS_AUTH_TOKEN - Токен аутентификации (обязателен для external, авто для internal). По умолчанию: "". # N8N_RUNNERS_MAX_CONCURRENCY - Одновременных задач на runner'е. По умолчанию: 5. # N8N_RUNNERS_TASK_TIMEOUT - Макс. время выполнения задачи (сек), после — runner перезапускается. По умолчанию: 300. # N8N_RUNNERS_INSECURE_MODE - Отключить все меры безопасности (НЕ ДЛЯ PRODUCTION!). По умолчанию: false. # N8N_RUNNERS_TASK_REQUEST_TIMEOUT - Таймаут ожидания свободного runner'а (сек). По умолчанию: 20. N8N_RUNNERS_ENABLED: true N8N_RUNNERS_MODE: external N8N_RUNNERS_AUTH_TOKEN: ${N8N_RUNNERS_AUTH_TOKEN:-your-secret-here} N8N_RUNNERS_BROKER_PORT: 5679 N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0 N8N_RUNNERS_MAX_CONCURRENCY: ${N8N_RUNNERS_MAX_CONCURRENCY:-5} N8N_RUNNERS_TASK_TIMEOUT: ${N8N_RUNNERS_TASK_TIMEOUT:-300} N8N_RUNNERS_INSECURE_MODE: ${N8N_RUNNERS_INSECURE_MODE:-false} N8N_RUNNERS_TASK_REQUEST_TIMEOUT: ${N8N_RUNNERS_TASK_REQUEST_TIMEOUT:-20} # Настройки режима очереди (Queue mode) # https://docs.n8n.io/hosting/configuration/environment-variables/queue-mode/ # ============================================================================= # EXECUTIONS_MODE - Режим выполнения: regular|queue. По умолчанию: regular. # OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS - Ручные запуски на worker'ах. По умолчанию: false. # QUEUE_BULL_REDIS_HOST - Хост Redis. По умолчанию: localhost. # QUEUE_BULL_REDIS_PORT - Порт Redis. По умолчанию: 6379. # QUEUE_HEALTH_CHECK_ACTIVE - Health checks. По умолчанию: false. EXECUTIONS_MODE: queue OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS: true QUEUE_BULL_REDIS_HOST: ${REDIS_HOST:-redis} QUEUE_BULL_REDIS_PORT: ${REDIS_PORT:-6379} QUEUE_HEALTH_CHECK_ACTIVE: true # Настройки мониторинга # https://docs.n8n.io/hosting/configuration/environment-variables/endpoints/ # ============================================================================= # N8N_METRICS - Включить endpoint /metrics. По умолчанию: false. # N8N_METRICS_PREFIX - Префикс для метрик. По умолчанию: n8n_. # N8N_METRICS_INCLUDE_DEFAULT_METRICS - Стандартные метрики системы и node.js. По умолчанию: true. # N8N_METRICS_INCLUDE_CACHE_METRICS - Метрики кэша. По умолчанию: false. # N8N_METRICS_INCLUDE_MESSAGE_EVENT_BUS_METRICS - Метрики шины событий. По умолчанию: false. # N8N_METRICS_INCLUDE_WORKFLOW_ID_LABEL - Label с ID workflow. По умолчанию: false. # N8N_METRICS_INCLUDE_NODE_TYPE_LABEL - Label с типом узла. По умолчанию: false. # N8N_METRICS_INCLUDE_CREDENTIAL_TYPE_LABEL - Label с типом credentials. По умолчанию: false. # N8N_METRICS_INCLUDE_API_ENDPOINTS - Метрики для API endpoints. По умолчанию: false. # N8N_METRICS_INCLUDE_API_PATH_LABEL - Label с путем API. По умолчанию: false. # N8N_METRICS_INCLUDE_API_METHOD_LABEL - Label с HTTP методом. По умолчанию: false. # N8N_METRICS_INCLUDE_API_STATUS_CODE_LABEL - Label с HTTP статус-кодом. По умолчанию: false. # N8N_METRICS_INCLUDE_QUEUE_METRICS - Метрики очереди (для scaling mode). По умолчанию: false. # N8N_METRICS_QUEUE_METRICS_INTERVAL - Частота обновления метрик очереди (сек). По умолчанию: 20. N8N_METRICS: ${N8N_METRICS:-true} N8N_METRICS_PREFIX: ${N8N_METRICS_PREFIX:-n8n_} N8N_METRICS_INCLUDE_DEFAULT_METRICS: ${N8N_METRICS_INCLUDE_DEFAULT_METRICS:-true} N8N_METRICS_INCLUDE_CACHE_METRICS: ${N8N_METRICS_INCLUDE_CACHE_METRICS:-false} N8N_METRICS_INCLUDE_MESSAGE_EVENT_BUS_METRICS: ${N8N_METRICS_INCLUDE_MESSAGE_EVENT_BUS_METRICS:-false} N8N_METRICS_INCLUDE_WORKFLOW_ID_LABEL: ${N8N_METRICS_INCLUDE_WORKFLOW_ID_LABEL:-true} N8N_METRICS_INCLUDE_NODE_TYPE_LABEL: ${N8N_METRICS_INCLUDE_NODE_TYPE_LABEL:-true} N8N_METRICS_INCLUDE_CREDENTIAL_TYPE_LABEL: ${N8N_METRICS_INCLUDE_CREDENTIAL_TYPE_LABEL:-false} N8N_METRICS_INCLUDE_API_ENDPOINTS: ${N8N_METRICS_INCLUDE_API_ENDPOINTS:-false} N8N_METRICS_INCLUDE_API_PATH_LABEL: ${N8N_METRICS_INCLUDE_API_PATH_LABEL:-false} N8N_METRICS_INCLUDE_API_METHOD_LABEL: ${N8N_METRICS_INCLUDE_API_METHOD_LABEL:-false} N8N_METRICS_INCLUDE_API_STATUS_CODE_LABEL: ${N8N_METRICS_INCLUDE_API_STATUS_CODE_LABEL:-false} N8N_METRICS_INCLUDE_QUEUE_METRICS: ${N8N_METRICS_INCLUDE_QUEUE_METRICS:-true} N8N_METRICS_QUEUE_METRICS_INTERVAL: ${N8N_METRICS_QUEUE_METRICS_INTERVAL:-20} N8N_USER_MANAGEMENT_DISABLED: false N8N_SECURE_COOKIE: false # Политика хранения данных выполнений # https://docs.n8n.io/hosting/configuration/environment-variables/executions/ # ============================================================================= # EXECUTIONS_DATA_MAX_AGE - Максимальный возраст данных (часы). По умолчанию: 336. # EXECUTIONS_DATA_PRUNE_MAX_COUNT - Максимум хранимых выполнений. По умолчанию: 10000. # N8N_WORKFLOW_HISTORY_PRUNE_TIME - Хранить версии workflow (часы, -1 = бессрочно). По умолчанию: -1. # N8N_INSIGHTS_COMPACTION_HOURLY_TO_DAILY_THRESHOLD_DAYS - Компактизация часовых → дневных (дни). По умолчанию: 90. # N8N_INSIGHTS_COMPACTION_DAILY_TO_WEEKLY_THRESHOLD_DAYS - Компактизация дневных → недельных (дни). По умолчанию: 180. EXECUTIONS_DATA_PRUNE: true EXECUTIONS_DATA_MAX_AGE: 168 # 7 дней EXECUTIONS_DATA_PRUNE_MAX_COUNT: 5000 EXECUTIONS_DATA_HARD_DELETE_BUFFER: 1 EXECUTIONS_DATA_PRUNE_HARD_DELETE_INTERVAL: 15 EXECUTIONS_DATA_PRUNE_SOFT_DELETE_INTERVAL: 60 N8N_WORKFLOW_HISTORY_PRUNE_TIME: 720 # 30 дней N8N_INSIGHTS_COMPACTION_HOURLY_TO_DAILY_THRESHOLD_DAYS: 30 N8N_INSIGHTS_COMPACTION_DAILY_TO_WEEKLY_THRESHOLD_DAYS: 60 logging: driver: json-file options: max-size: "10m" max-file: "5" extra_hosts: - "kontur.bbr.ru:192.168.1.155" - "bankrupt.bbr.ru:192.168.1.155" - "forge.bbr.ru:192.168.1.155" - "forge2.bbr.ru:192.168.1.156" x-n8n-runner: &service-n8n-runner build: context: ./n8n/runner dockerfile: Dockerfile.runner pull: true logging: driver: json-file options: max-size: "10m" max-file: "3" services: fix-permissions: image: alpine:3 container_name: fix-permissions restart: "no" user: root # n8n, n8n-worker-1, n8n-runner-1 запускаются от uid 1000 (node) # После клонирования через Portainer директории принадлежат root — исправляем command: chown -R 1000:1000 /data/shared /data/logs /backup volumes: - ./n8n/shared:/data/shared - ./n8n/logs:/data/logs - ./n8n/backup:/backup logging: driver: json-file options: max-size: "1m" max-file: "1" n8n: <<: *service-n8n container_name: n8n restart: unless-stopped volumes: - n8n_storage:/home/node/.n8n - ./n8n/shared:/data/shared - ./n8n/logs:/data/logs ports: - "5678:5678" healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:5678/healthz || exit 1"] interval: 30s timeout: 10s retries: 5 start_period: 60s depends_on: fix-permissions: condition: service_completed_successfully postgres: condition: service_healthy n8n-worker-1: <<: *service-n8n command: worker container_name: n8n-worker-1 volumes: - n8n_storage:/home/node/.n8n - ./n8n/shared:/data/shared - ./n8n/logs:/data/logs healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:5678/healthz || exit 1"] interval: 30s timeout: 10s retries: 5 start_period: 30s depends_on: fix-permissions: condition: service_completed_successfully n8n: condition: service_healthy redis: condition: service_healthy postgres: condition: service_healthy n8n-runner-1: <<: *service-n8n-runner container_name: n8n-runner-1 restart: unless-stopped volumes: - ./n8n/shared:/data/shared - ./n8n/logs:/data/logs entrypoint: ["/bin/sh", "-c", "/usr/local/bin/task-runner-launcher javascript python"] healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:5680/healthz || exit 1"] interval: 30s timeout: 10s retries: 5 start_period: 30s environment: # N8N_RUNNERS_TASK_BROKER_URI - URI брокера задач. По умолчанию: http://127.0.0.1:5679. # GENERIC_TIMEZONE - Часовой пояс (важно для Schedule/Cron узлов). По умолчанию: America/New_York. # N8N_RUNNERS_AUTH_TOKEN - Токен аутентификации (обязателен для external, авто для internal). По умолчанию: "". # N8N_RUNNERS_LAUNCHER_LOG_LEVEL - Уровень логирования: debug|info|warn|error. По умолчанию: info. # N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT - Секунд бездействия до остановки runner'а. По умолчанию: 15. N8N_RUNNERS_TASK_BROKER_URI: http://n8n-worker-1:5679 GENERIC_TIMEZONE: ${GENERIC_TIMEZONE:-Europe/Moscow} N8N_RUNNERS_AUTH_TOKEN: ${N8N_RUNNERS_AUTH_TOKEN:-your-secret-here} N8N_RUNNERS_LAUNCHER_LOG_LEVEL: ${N8N_RUNNERS_LAUNCHER_LOG_LEVEL:-info} N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT: ${N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT:-15} depends_on: fix-permissions: condition: service_completed_successfully n8n-worker-1: condition: service_healthy postgres: container_name: postgres image: postgres:${POSTGRES_VERSION:-17} restart: unless-stopped # autovacuum_vacuum_scale_factor=0.05 — запускать VACUUM когда мёртвых строк > 5% таблицы (по умолчанию 20%) command: > postgres -c autovacuum=on -c autovacuum_vacuum_scale_factor=0.05 -c autovacuum_analyze_scale_factor=0.02 ports: - "5433:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 3s timeout: 3s retries: 10 environment: POSTGRES_USER: ${DB_POSTGRESDB_USER:-postgres} POSTGRES_PASSWORD: ${DB_POSTGRESDB_PASSWORD:-your_secure_password_here} POSTGRES_DB: ${DB_POSTGRESDB_DATABASE:-n8n} volumes: - postgres_data:/var/lib/postgresql/data logging: driver: json-file options: max-size: "10m" max-file: "3" redis: container_name: redis image: docker.io/valkey/valkey:8-alpine # --save 30 1 — снапшот каждые 30 мин при ≥1 изменении # --maxmemory 256mb — жёсткий лимит памяти # --maxmemory-policy allkeys-lru — вытеснять редко используемые ключи при достижении лимита command: > valkey-server --save 30 1 --loglevel warning --maxmemory 256mb --maxmemory-policy allkeys-lru restart: unless-stopped stop_grace_period: 30s volumes: - valkey-data:/data cap_drop: - ALL cap_add: - SETGID - SETUID - DAC_OVERRIDE healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 3s timeout: 10s retries: 10 logging: driver: json-file options: max-size: "5m" max-file: "3" prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped # --storage.tsdb.retention.time — удалять данные старше 15 дней # --storage.tsdb.retention.size — удалять при превышении 1 ГБ (что наступит первым) command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--storage.tsdb.retention.time=15d' - '--storage.tsdb.retention.size=1GB' ports: - "9090:9090" volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - prometheus_data:/prometheus extra_hosts: - "host.docker.internal:host-gateway" depends_on: - n8n logging: driver: json-file options: max-size: "10m" max-file: "3" grafana: image: grafana/grafana:11.2.0 container_name: grafana restart: unless-stopped environment: GF_SECURITY_ADMIN_USER: ${GF_SECURITY_ADMIN_USER:-admin} GF_SECURITY_ADMIN_PASSWORD: ${GF_SECURITY_ADMIN_PASSWORD:-admin} GF_LOG_LEVEL: warn GF_LOG_MODE: console ports: - "3000:3000" volumes: - grafana-data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning - ./grafana/dashboards:/var/lib/grafana/dashboards extra_hosts: - "host.docker.internal:host-gateway" depends_on: - prometheus logging: driver: json-file options: max-size: "10m" max-file: "3" n8n-import: <<: *service-n8n container_name: n8n-import restart: "no" entrypoint: /bin/sh command: /scripts/import_workflows.sh volumes: - n8n_storage:/home/node/.n8n - ./n8n/shared:/data/shared - ./n8n/logs:/data/logs - ./n8n/backup:/backup - ./scripts/import_workflows.sh:/scripts/import_workflows.sh:ro depends_on: n8n: condition: service_healthy