Files
n8n_stack/README.md
T
V.Bolshakov 49b389ed53 first commit
2026-05-04 16:54:53 +07:00

167 lines
7.9 KiB
Markdown
Raw 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.
# n8n Docker Stack
Self-hosted n8n с PostgreSQL, Redis, Task Runners, Prometheus и Grafana — готовый production-стек с минимальными усилиями на настройку
## Зачем
- **Изоляция** — отключена телеметрия, шаблоны и внешние запросы к n8n.io
- **Производительность** — queue mode с workers, внешний task runner для JS и Python
- **Надёжность** — PostgreSQL вместо SQLite, Redis как брокер очередей
- **Наблюдаемость** — Prometheus + Grafana с готовым дашбордом
- **Воспроизводимость** — автоимпорт workflows и credentials при каждом старте
- **Контроль версий** — встроенные workflows для экспорта и коммита в git
---
## Сервисы
| Сервис | Порт | Описание |
|---|---|---|
| n8n | 5678 | Основной сервер |
| n8n-worker-1 | — | Worker для queue mode |
| n8n-runner-1 | — | Внешний раннер JS + Python |
| postgres | 5433 | База данных |
| redis (Valkey) | — | Очередь Bull |
| prometheus | 9090 | Сбор метрик |
| grafana | 3000 | Дашборды |
| fix-permissions | — | Однократная правка прав (uid 1000) |
| n8n-import | — | Автоимпорт workflows и credentials при старте |
---
## Быстрый старт
```bash
cp .env.example .env
# Заполнить .env
docker compose up -d
```
Стек запускается без `.env` — все переменные имеют дефолты в `docker-compose.yml`.
---
## Деплой через Portainer
Portainer позволяет управлять стеком через UI без прямого доступа к серверу.
**Важно:** деплой через «URL» (одиночная ссылка на compose-файл) не работает — Portainer не скачивает вспомогательные файлы (`prometheus.yml`, `grafana/` и т.д.). Использовать только **Repository**.
### Требования
Portainer должен быть запущен так, чтобы **путь к данным на хосте и внутри контейнера совпадал**. Иначе Docker Engine не найдёт файлы клонированного репозитория — Portainer передаёт ему свои внутренние пути, а Docker ищет их на хосте.
```bash
docker stop portainer && docker rm portainer
PORTAINER_DATA="$HOME/portainer/data"
mkdir -p "$PORTAINER_DATA"
docker run -d \
-p 9443:9443 \
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PORTAINER_DATA":"$PORTAINER_DATA" \
portainer/portainer-ce:latest \
--data "$PORTAINER_DATA"
```
Флаг `--data` указывает Portainer хранить данные по тому же пути, что смонтирован с хоста — пути совпадают, Docker Engine находит файлы.
### Шаги
1. **Stacks → Add stack → Repository**
2. Repository URL: адрес репозитория
3. Compose path: `docker-compose.yml`
4. Добавить переменные окружения или указать путь к `.env`
Важно правильно настроить WEBHOOK_URL
```
# URL для вебхуков (адрес, по которому n8n доступен снаружи)
WEBHOOK_URL=http://YOUR_SERVER_IP:5678
```
⚠️ Важно: Если указан неверный адрес, то Form Data и вебхуки не будут работать
5. Deploy the stack
> (Опционально) Дать права
```sh
sudo chmod 777 /home/bbr/portainer/data/compose
```
### Документация
- [Установка Docker Compose](https://docs.n8n.io/hosting/installation/server-setups/docker-compose/)
- [Stacks in Portainer](https://docs.portainer.io/user/docker/stacks/add)
- [Git repository deployment](https://docs.portainer.io/user/docker/stacks/add#option-3-git-repository)
---
## Встроенные workflows
В `n8n/backup/workflows/` лежат служебные workflow, которые импортируются автоматически при каждом старте.
| Файл | Назначение |
|---|---|
| `Backup_Workflows.json` | Экспорт всех workflow в `n8n/shared/` |
| `Backup_Сredentials.json` | Экспорт всех credentials в `n8n/shared/` |
| `Git_Commit_Workflows.json` | Коммит экспортированных файлов в git |
| `Git_Pull_Workflows.json` | Pull изменений из git-репозитория |
### Настройка credentials
Встроенные workflows обращаются к API локального n8n. Для работы необходимо:
1. Сгенерировать API ключ: n8n → **Settings → API → Create an API key**
2. Создать credentials типа **n8n API**:
- **URL**: `http://n8n:5678/api/v1`
- **API Key**: ключ из шага 1
3. Сохранить credentials в файл `n8n/backup/credentials/n8n_local.json`
### Защита credentials от перезаписи
n8n CLI не имеет встроенного `--skipExisting` для импорта credentials. Скрипт реализует это через маркер-файлы в `n8n_storage` volume (`/home/node/.n8n/imported/`).
| Тип | Поведение при повторном деплое |
|---|---|
| Credentials | Импортируются **один раз**, затем пропускаются |
| Workflows | Перезаписываются **всегда** |
Принудительный переимпорт — задать `FORCE_IMPORT=true` в env сервиса `n8n-import`.
Для добавления своих workflow при старте — положить JSON в `n8n/backup/workflows/` или `n8n/backup/credentials/`.
### Документация
- [n8n Public API / Authentication](https://docs.n8n.io/api/authentication/)
- [n8n CLI commands](https://docs.n8n.io/hosting/cli-commands/)
- [Автоимпорт workflows](https://docs.n8n.io/hosting/cli-commands/#import-workflows-and-credentials)
---
## Политика хранения данных
| Что | Лимит |
|---|---|
| Данные выполнений | 7 дней / 5 000 записей |
| История версий workflow | 30 дней |
| Логи n8n (файлы) | 10 файлов × 20 MB = ~200 MB |
| Логи Docker (все сервисы) | 3–5 файлов × 5–10 MB на сервис |
| Prometheus TSDB | 15 дней / 1 GB |
| Redis | 256 MB max (LRU) |
Бинарные данные в `n8n/shared/` автоматически не очищаются — при активном использовании нод Read/Write Files настроить очистку по расписанию.
### Документация
- [Execution data — pruning и retention](https://docs.n8n.io/hosting/scaling/execution-data/)
- [Executions environment variables](https://docs.n8n.io/hosting/configuration/environment-variables/executions/)
- [Workflow history](https://docs.n8n.io/workflows/history/)
- [Логирование](https://docs.n8n.io/hosting/logging-monitoring/logging/)
- [Environment Variables (все)](https://docs.n8n.io/hosting/configuration/environment-variables/)
- [Task Runners](https://docs.n8n.io/hosting/configuration/task-runners/)
- [Queue mode](https://docs.n8n.io/hosting/scaling/queue-mode/)
- [Мониторинг n8n](https://docs.n8n.io/hosting/logging-monitoring/monitoring/)
- [Prometheus](https://docs.n8n.io/hosting/configuration/configuration-examples/prometheus/)
- [Аудит безопасности](https://docs.n8n.io/hosting/securing/security-audit/)