first commit

This commit is contained in:
V.Bolshakov
2026-05-04 16:54:53 +07:00
commit 49b389ed53
20 changed files with 4977 additions and 0 deletions
+439
View File
@@ -0,0 +1,439 @@
# тест тест
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