167 lines
7.9 KiB
Markdown
167 lines
7.9 KiB
Markdown
# 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/) |