Files
n8n_stack/docker-compose.yml
V.Bolshakov 49b389ed53 first commit
2026-05-04 16:54:53 +07:00

440 lines
20 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# тест тест
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