Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
linux:n8n:installation_compose [2023/04/17 22:39] – [8.2 Neustart] psycore | linux:n8n:installation_compose [2024/01/12 22:20] – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | {{tag> | ||
+ | ====== n8n Installation mit Docker Compose ====== | ||
+ | n8n Installation mit Docker Compose, Let's Encrypt [[wpde> | ||
+ | |||
+ | ===== 1. Docker Installation (Debian) ===== | ||
+ | |||
+ | ==== 1.1 alte Versionen deinstallieren ==== | ||
+ | |||
+ | <code bash> | ||
+ | sudo apt-get remove docker docker-engine docker.io containerd runc | ||
+ | </ | ||
+ | |||
+ | ==== 1.2 Repo Installation ==== | ||
+ | |||
+ | === 1.2.1 Update apt und HTTPS aktivieren === | ||
+ | |||
+ | <code bash> | ||
+ | sudo apt-get update | ||
+ | |||
+ | sudo apt-get install \ | ||
+ | ca-certificates \ | ||
+ | curl \ | ||
+ | gnupg \ | ||
+ | lsb-release | ||
+ | | ||
+ | sudo mkdir -m 0755 -p / | ||
+ | curl -fsSL https:// | ||
+ | echo \ | ||
+ | "deb [arch=$(dpkg --print-architecture) signed-by=/ | ||
+ | $(lsb_release -cs) stable" | ||
+ | </ | ||
+ | | ||
+ | === 1.2.2 Docker GPG Key hinzufügen === | ||
+ | |||
+ | <code bash> | ||
+ | sudo mkdir -m 0755 -p / | ||
+ | curl -fsSL https:// | ||
+ | </ | ||
+ | |||
+ | === 1.2.3 Repo Setup === | ||
+ | |||
+ | <code bash> | ||
+ | echo \ | ||
+ | "deb [arch=$(dpkg --print-architecture) signed-by=/ | ||
+ | $(lsb_release -cs) stable" | ||
+ | </ | ||
+ | |||
+ | ==== 1.3 Docker Engine installieren ==== | ||
+ | |||
+ | <code bash> | ||
+ | sudo apt-get update | ||
+ | sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | ||
+ | </ | ||
+ | |||
+ | ===== 2. Docker Compose installieren ===== | ||
+ | |||
+ | <code bash> | ||
+ | sudo apt-get install docker-compose-plugin | ||
+ | </ | ||
+ | |||
+ | ===== 3. DNS Eintrag ===== | ||
+ | |||
+ | <code bash> | ||
+ | Type: A | ||
+ | Name: n8n | ||
+ | IP address: < | ||
+ | </ | ||
+ | |||
+ | ===== 4. Docker Compose Datei erstellen ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== 4.1 HTTP-01 Challenge (Standard TLS Port 443) ==== | ||
+ | |||
+ | < | ||
+ | <code bash> | ||
+ | version: " | ||
+ | |||
+ | services: | ||
+ | traefik: | ||
+ | image: " | ||
+ | restart: always | ||
+ | command: | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | ports: | ||
+ | - " | ||
+ | - " | ||
+ | volumes: | ||
+ | - ${DATA_FOLDER}/ | ||
+ | - / | ||
+ | |||
+ | n8n: | ||
+ | image: n8nio/n8n | ||
+ | restart: always | ||
+ | ports: | ||
+ | - " | ||
+ | labels: | ||
+ | - traefik.enable=true | ||
+ | - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`) | ||
+ | - traefik.http.routers.n8n.tls=true | ||
+ | - traefik.http.routers.n8n.entrypoints=web, | ||
+ | - traefik.http.routers.n8n.tls.certresolver=mytlschallenge | ||
+ | - traefik.http.middlewares.n8n.headers.SSLRedirect=true | ||
+ | - traefik.http.middlewares.n8n.headers.STSSeconds=315360000 | ||
+ | - traefik.http.middlewares.n8n.headers.browserXSSFilter=true | ||
+ | - traefik.http.middlewares.n8n.headers.contentTypeNosniff=true | ||
+ | - traefik.http.middlewares.n8n.headers.forceSTSHeader=true | ||
+ | - traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME} | ||
+ | - traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true | ||
+ | - traefik.http.middlewares.n8n.headers.STSPreload=true | ||
+ | - traefik.http.routers.n8n.middlewares=n8n@docker | ||
+ | environment: | ||
+ | - N8N_BASIC_AUTH_ACTIVE=true | ||
+ | - N8N_BASIC_AUTH_USER | ||
+ | - N8N_BASIC_AUTH_PASSWORD | ||
+ | - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME} | ||
+ | - N8N_PORT=5678 | ||
+ | - N8N_PROTOCOL=https | ||
+ | - NODE_ENV=production | ||
+ | - WEBHOOK_URL=https:// | ||
+ | - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} | ||
+ | # this section reduces the database size and speed up performance, | ||
+ | - EXECUTIONS_DATA_SAVE_ON_ERROR=all | ||
+ | - EXECUTIONS_DATA_SAVE_ON_SUCCESS=none | ||
+ | - EXECUTIONS_DATA_SAVE_ON_PROGRESS=true | ||
+ | - EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false | ||
+ | - EXECUTIONS_DATA_PRUNE=true | ||
+ | - EXECUTIONS_DATA_MAX_AGE=336 | ||
+ | - EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000 | ||
+ | - DB_SQLITE_VACUUM_ON_STARTUP=true | ||
+ | volumes: | ||
+ | - ${DATA_FOLDER}/ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== 4.2 DNS-01 Challenge (Alternative TLS Ports) ==== | ||
+ | |||
+ | Hier muss der [[wpde> | ||
+ | |||
+ | < | ||
+ | <code bash> | ||
+ | version: " | ||
+ | |||
+ | services: | ||
+ | traefik: | ||
+ | image: " | ||
+ | restart: always | ||
+ | command: | ||
+ | #- " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | #- " | ||
+ | - " | ||
+ | - " | ||
+ | ports: | ||
+ | - " | ||
+ | - " | ||
+ | environment: | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | volumes: | ||
+ | - ${DATA_FOLDER}/ | ||
+ | - / | ||
+ | |||
+ | n8n: | ||
+ | image: n8nio/n8n | ||
+ | restart: always | ||
+ | ports: | ||
+ | - " | ||
+ | labels: | ||
+ | - traefik.enable=true | ||
+ | - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`) | ||
+ | - traefik.http.routers.n8n.tls=true | ||
+ | - traefik.http.routers.n8n.entrypoints=web, | ||
+ | - traefik.http.routers.n8n.tls.certresolver=myresolver | ||
+ | - traefik.http.middlewares.n8n.headers.SSLRedirect=true | ||
+ | - traefik.http.middlewares.n8n.headers.STSSeconds=315360000 | ||
+ | - traefik.http.middlewares.n8n.headers.browserXSSFilter=true | ||
+ | - traefik.http.middlewares.n8n.headers.contentTypeNosniff=true | ||
+ | - traefik.http.middlewares.n8n.headers.forceSTSHeader=true | ||
+ | - traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME} | ||
+ | - traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true | ||
+ | - traefik.http.middlewares.n8n.headers.STSPreload=true | ||
+ | - traefik.http.routers.n8n.middlewares=n8n@docker | ||
+ | environment: | ||
+ | - N8N_BASIC_AUTH_ACTIVE=true | ||
+ | - N8N_BASIC_AUTH_USER | ||
+ | - N8N_BASIC_AUTH_PASSWORD | ||
+ | - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME} | ||
+ | - N8N_PORT=5678 | ||
+ | - N8N_PROTOCOL=https | ||
+ | - NODE_ENV=production | ||
+ | - WEBHOOK_URL=https:// | ||
+ | - GENERIC_TIMEZONE=${GENERIC_TIMEZONE} | ||
+ | # this section reduces the database size and speed up performance, | ||
+ | - EXECUTIONS_DATA_SAVE_ON_ERROR=all | ||
+ | - EXECUTIONS_DATA_SAVE_ON_SUCCESS=none | ||
+ | - EXECUTIONS_DATA_SAVE_ON_PROGRESS=true | ||
+ | - EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false | ||
+ | - EXECUTIONS_DATA_PRUNE=true | ||
+ | - EXECUTIONS_DATA_MAX_AGE=336 | ||
+ | - EXECUTIONS_DATA_PRUNE_MAX_COUNT=50000 | ||
+ | - DB_SQLITE_VACUUM_ON_STARTUP=true | ||
+ | #- N8N_LOG_LEVEL=debug | ||
+ | #- N8N_LOG_OUTPUT=console | ||
+ | volumes: | ||
+ | - ${DATA_FOLDER}/ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== 5. .env Datei erstellen ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | <code bash> | ||
+ | # Folder where data should be saved | ||
+ | DATA_FOLDER=/ | ||
+ | |||
+ | # The top level domain to serve from | ||
+ | DOMAIN_NAME=example.com | ||
+ | |||
+ | # The subdomain to serve from | ||
+ | SUBDOMAIN=n8n | ||
+ | |||
+ | # DOMAIN_NAME and SUBDOMAIN combined decide where n8n will be reachable from | ||
+ | # above example would result in: https:// | ||
+ | |||
+ | # The user name to use for authentication - IMPORTANT ALWAYS CHANGE! | ||
+ | N8N_BASIC_AUTH_USER=user | ||
+ | |||
+ | # The password to use for authentication - IMPORTANT ALWAYS CHANGE! | ||
+ | N8N_BASIC_AUTH_PASSWORD=password | ||
+ | |||
+ | # Optional timezone to set which gets used by Cron-Node by default | ||
+ | # If not set New York time will be used | ||
+ | GENERIC_TIMEZONE=Europe/ | ||
+ | |||
+ | # The email address to use for the SSL certificate creation | ||
+ | SSL_EMAIL=user@example.com | ||
+ | </ | ||
+ | |||
+ | ===== 6. Daten Verzeichnis erstellen ===== | ||
+ | |||
+ | <code bash> | ||
+ | mkdir / | ||
+ | </ | ||
+ | |||
+ | ===== 7. Starten und Stoppen ===== | ||
+ | |||
+ | ==== 7.1 Start ==== | ||
+ | |||
+ | <code bash> | ||
+ | sudo docker compose up -d | ||
+ | </ | ||
+ | |||
+ | === 7.1.1 Start mit Ausgabe === | ||
+ | |||
+ | <code bash> | ||
+ | sudo docker compose up | ||
+ | </ | ||
+ | |||
+ | ==== 7.2 Stopp ==== | ||
+ | |||
+ | <code bash> | ||
+ | sudo docker compose stop | ||
+ | </ | ||
+ | |||
+ | ===== 8. Update ===== | ||
+ | |||
+ | ==== 8.1 Image aktualisieren ==== | ||
+ | |||
+ | <code bash> | ||
+ | docker pull n8nio/n8n | ||
+ | </ | ||
+ | |||
+ | ==== 8.2 Neustart ==== | ||
+ | |||
+ | <code bash> | ||
+ | # Stop current setup | ||
+ | sudo docker compose stop | ||
+ | # Delete it (will only delete the docker-containers, | ||
+ | sudo docker compose rm | ||
+ | # Then start it again, in ingteractive mode to check for errors | ||
+ | sudo docker compose up | ||
+ | </ | ||
+ | |||
+ | Wenn alles fehlerfrei läuft, den Prozess mit STRG+C beenden und im Daemon Modus starten | ||
+ | |||
+ | <code bash> | ||
+ | sudo docker compose up -d | ||
+ | </ |