Das Projekt installiert und konfiguriert einen vollständigen, produktionsnahen n8n-Stack auf einem Ubuntu-Linux-System.
Find a file
dschlueter 87cd005352 feat: complete n8n stack setup
Docker Compose stack (n8n, PostgreSQL 16, Redis 7, 1 worker) with:
- nginx local proxy on port 8088, YunoHost TLS termination config
- helper scripts: backup/restore/import/export/update
- .env.example, README with architecture, ops commands, to-do list

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 17:31:59 +02:00
compose feat: complete n8n stack setup 2026-05-05 17:31:59 +02:00
docs feat: complete n8n stack setup 2026-05-05 17:31:59 +02:00
scripts feat: complete n8n stack setup 2026-05-05 17:31:59 +02:00
.env.example feat: complete n8n stack setup 2026-05-05 17:31:59 +02:00
.gitignore chore: initial project scaffold 2026-05-05 16:21:18 +02:00
CLAUDE.md chore: initial project scaffold 2026-05-05 16:21:18 +02:00
INITIAL_PROMPT.md docs: update INITIAL_PROMPT with system-specific configuration 2026-05-05 16:57:06 +02:00
README.md feat: complete n8n stack setup 2026-05-05 17:31:59 +02:00

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

# 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 scripts/update-n8n.sh

Führt automatisch ein Backup aus, zieht neue Images und startet den Stack neu.

Backup / Restore

# 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

# 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

# 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/<datei>.json
  3. Falls Credentials mitgeliefert: bash scripts/import-credentials.sh <datei.json>
  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.de92.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)