# n8n Stack Produktionsnaher n8n-Stack auf Docker Compose mit PostgreSQL, Redis und Queue-Mode. ## Architektur ``` Internet → n8n.linix.de:443 → YunoHost (192.168.179.10) — TLS-Terminierung (Let's Encrypt) → nginx lokal :8088 (192.168.179.124) → n8n Docker :5678 ↔ PostgreSQL (n8n-stack-postgres-1) ↔ Redis (n8n-stack-redis-1) ← n8n-worker (n8n-stack-n8n-worker-1) ``` ## Verzeichnisstruktur ``` n8n_stack/ ├── compose/docker-compose.yml # Stack-Definition ├── .env # Secrets (600, nie committen!) ├── .env.example # Vorlage ├── scripts/ # Hilfsskripte (700) ├── data/ # Docker-Volumes (gitignoriert) │ ├── n8n/ │ ├── postgres/ │ └── redis/ ├── backups/ # Backups, max. 2 (gitignoriert) ├── imports/workflows/ # Workflow-JSONs zum Importieren ├── imports/credentials/ # Credentials-Exporte (unverschlüsselt!) ├── local-files/ # Dateien für n8n-Container (/files) └── docs/ # nginx-Configs, Runbooks ``` ## Start / Stop / Status ```bash # Start docker compose -f compose/docker-compose.yml up -d # Stop docker compose -f compose/docker-compose.yml down # Status docker compose -f compose/docker-compose.yml ps # Logs docker compose -f compose/docker-compose.yml logs -f n8n # Worker skalieren (z.B. auf 2) docker compose -f compose/docker-compose.yml up -d --scale n8n-worker=2 ``` ## Update ```bash bash scripts/update-n8n.sh ``` Führt automatisch ein Backup aus, zieht neue Images und startet den Stack neu. ## Backup / Restore ```bash # Backup erstellen (behält immer die letzten 2) bash scripts/backup-n8n.sh # Restore aus Backup-Verzeichnis bash scripts/restore-n8n.sh backups/backup_20240101_120000 ``` ## Import / Export von Workflows ```bash # Einzelne Workflow-JSON importieren bash scripts/import-workflow.sh imports/workflows/mein-workflow.json # Ganzes Verzeichnis importieren bash scripts/import-workflow.sh imports/workflows/ # Alle Workflows exportieren bash scripts/export-workflows.sh ``` ## Import / Export von Credentials ```bash # Credentials importieren bash scripts/import-credentials.sh imports/credentials/creds.json # Credentials exportieren (UNVERSCHLÜSSELT — sicher aufbewahren!) bash scripts/export-credentials.sh ``` **Wichtig:** Credential-Exporte enthalten alle Secrets im Klartext. Export-Dateien nach Gebrauch löschen. ## Übernahme fremder n8n-Projekte 1. Workflow-JSON-Dateien nach `imports/workflows/` kopieren 2. `bash scripts/import-workflow.sh imports/workflows/.json` 3. Falls Credentials mitgeliefert: `bash scripts/import-credentials.sh ` 4. In der n8n-UI: Credentials der importierten Workflows prüfen und neu verknüpfen Bei Voll-Exporten (`.zip` mit mehreren JSONs): entpacken, dann Verzeichnis übergeben. ## Deployment auf neuem Host 1. Repo klonen 2. `.env.example` → `.env` kopieren, alle Werte ausfüllen 3. Neuen `N8N_ENCRYPTION_KEY` generieren: `openssl rand -base64 32` 4. `N8N_HOST` und `WEBHOOK_URL` auf die neue Domain anpassen 5. nginx-Config aus `docs/nginx-local-n8n.conf` anpassen und aktivieren 6. YunoHost-Config aus `docs/yunohost-nginx-n8n.conf` anpassen und installieren 7. `docker compose -f compose/docker-compose.yml up -d` ## Kritische Hinweise - **`N8N_ENCRYPTION_KEY`** darf nach dem ersten Start **nie geändert** werden — eine Änderung macht alle gespeicherten Credentials unbrauchbar. Key steht in `.env`. - **`.env`** nie committen (steht in `.gitignore`). - Backup vor jedem Update läuft automatisch via `update-n8n.sh`. ## URLs und Zugangspfade | Was | Wert | |---|---| | n8n Web-UI | https://n8n.linix.de | | Erster Login | Beim ersten Aufruf Owner-Account anlegen | | Secrets-Datei | `./.env` (Rechte 600) | | Backup-Verzeichnis | `./backups/` | | nginx lokal | `/etc/nginx/sites-available/n8n` (Port 8088) | | YunoHost nginx | `/etc/nginx/conf.d/n8n.linix.de.conf` | ## To-do (manuell auf YunoHost) - [ ] DNS: `n8n.linix.de` → `92.50.108.218` (A-Record beim DNS-Provider) - [ ] YunoHost: Domain hinzufügen: `sudo yunohost domain add n8n.linix.de` - [ ] YunoHost: Let's Encrypt: `sudo yunohost domain cert install n8n.linix.de` - [ ] YunoHost: `docs/yunohost-nginx-n8n.conf` → `/etc/nginx/conf.d/n8n.linix.de.conf` kopieren, dann `sudo nginx -t && sudo systemctl reload nginx` - [ ] SMTP-Credentials in `.env` eintragen (`SMTP_USER`, `SMTP_PASSWORD`) - [ ] Ersten Owner-Account in n8n anlegen (https://n8n.linix.de beim ersten Aufruf)