Det här sätter du upp
n8n kör arbetsflöden: när något händer gör det en rad steg åt dig. Ett arbetsflöde börjar med en trigger, till exempel en webbförfrågan (en webhook), ett schema eller ett nytt e-postmeddelande, och fortsätter med noder som anropar andra tjänster, bearbetar data, skriver filer eller kör lite JavaScript. n8n har färdiga noder för hundratals tjänster, och du bygger arbetsflödena i webbläsaren genom att koppla ihop rutor.
n8n utvecklas av n8n GmbH, ett företag i Berlin i Tyskland. Det distribueras under n8n:s egen licens Sustainable Use License, som gör källkoden tillgänglig men inte är en OSI-godkänd öppen källkodslicens: den låter dig använda och ändra n8n för ditt företags interna verksamhet eller för icke-kommersiellt och personligt bruk, och lämna det vidare till andra bara kostnadsfritt och för icke-kommersiella ändamål; filer märkta .ee, för enterprisefunktionerna, kräver en betald licens. Som standard skickar n8n användningsdata, din IP-adress inräknad, till n8n GmbH, och hämtar nya versioner, mallar och listor över noder från n8n:s servrar; enligt n8n:s integritetspolicy kan en del mottagare av sådana data finnas i USA. Steg 8 visar vad som går vart, och raderna i steg 3 stänger av det.
Här körs n8n som en pod under en egen användare som heter n8n, bakom Caddy från Podman-guiden: n8n själv, PostgreSQL för dess data och en separat container för koden som Code-noder kör. Det är samma upplägg som n8n:s eget exempel för produktion använder, i stället för den SQLite-fil som n8n annars faller tillbaka på.
Varje steg nedan har körts på en nyinstallerad Melonslab VC-P Alloy (2 vCPU, 8 GB) med Debian 13:
- Ägarkontot skapades via en SSH-tunnel innan n8n gick att nå från internet. Därefter svarade installationssidan
Instance owner already setuptill alla. - En webhook tog emot en POST från ett annat nät och skrev den till en fil på servern, och ett schemalagt arbetsflöde skrev tiden, i svensk tid, var femte minut. Båda fortsatte att fungera efter en omstart av servern.
- Med inställningarna i steg 3 gjorde n8n inga anslutningar till n8n:s servrar, varken från servern eller från webbläsaren, när det startade, stod stilla och användes.
- n8n såg varje besökares riktiga adress: en adress som nådde gränsen för lösenordsåterställningar spärrades, medan andra inte gjorde det.
- Arbetsflödena kunde inte läsa filer utanför sin egen katalog, kunde inte läsa n8n:s inställningar eller nycklar och kunde inte nå program på servern som bara lyssnar på
127.0.0.1. - Databasen och krypteringsnyckeln återställdes från en säkerhetskopia, och de sparade inloggningsuppgifterna gick att läsa igen.
- En uppdatering från 2.41.5 till 2.41.6 gick igenom med stegen i steg 11.
Podden använde omkring 380 MB minne: n8n 300 till 360 MB, PostgreSQL 15 MB och kodköraren 5 MB tills en Code-nod körs.
Innan du börjar
Du behöver:
- en server uppsatt som i Podman-guiden, med Caddy igång, och säkrad som i säkerhetsguiden;
- en A-post och en AAAA-post för
n8n.example.comsom pekar på din server; - SSH-åtkomst till servern från din egen dator.
Exemplen använder 203.0.113.10 för servern och n8n.example.com för dess namn. Byt genomgående ut dem mot dina egna.
1. Skapa användaren
Som root:
useradd -m -s /bin/bash n8n
loginctl enable-linger n8n
machinectl shell n8n@
Allt fram till steg 5 körs som n8n.
2. Skapa hemligheterna
openssl rand -hex 32 | tr -d '\n' | podman secret create n8n-encryption-key -
openssl rand -hex 24 | tr -d '\n' | podman secret create n8n-db-password -
openssl rand -hex 32 | tr -d '\n' | podman secret create n8n-runners-token -
Den första är n8n:s krypteringsnyckel. n8n krypterar varje inloggningsuppgift du sparar, som API-nycklar och lösenord till andra tjänster, med den. Utan nyckeln är en säkerhetskopia av databasen värdelös för inloggningsuppgifterna: de går inte att dekryptera, och du får skriva in alla igen. När du skapar nyckeln själv, i stället för att låta n8n göra det, finns den där du kan se den och säkerhetskopiera den. Den andra hemligheten är databaslösenordet, och den tredje låter n8n och dess kodkörare känna igen varandra.
Podman sparar hemligheterna i ~/.local/share/containers/storage/secrets/filedriver/secretsdata.json, som bara n8n kan läsa. Så här visar du nyckeln:
podman secret inspect --showsecret --format '{{.SecretData}}' n8n-encryption-key
Kopiera den till din lösenordshanterare nu. Vid första starten skriver n8n också nyckeln till /home/node/.n8n/config i sin volym n8n-data.
3. Definiera podden
mkdir -p ~/.config/containers/systemd ~/files
podman unshare chown 1000:1000 ~/files
cd ~/.config/containers/systemd
~/files är en katalog som arbetsflödena kan läsa och skriva i. n8n körs som användare 1000 i sin container, och podman unshare chown ger katalogen till den användaren.
Skapa n8n.pod:
[Pod]
PodName=n8n
# Only Caddy, on this server, can reach n8n: the port is not open to the internet.
PublishPort=127.0.0.1:8111:5678
# Lets workflows reach this server's own sites, n8n included, through Caddy.
AddHost=n8n.example.com:host-gateway
[Install]
WantedBy=default.target
Skapa n8n-db.container:
[Container]
ContainerName=n8n-db
Image=docker.io/library/postgres:18-alpine
Pod=n8n.pod
Volume=n8n-db:/var/lib/postgresql
Environment=POSTGRES_USER=n8n POSTGRES_DB=n8n
Secret=n8n-db-password,type=env,target=POSTGRES_PASSWORD
AutoUpdate=registry
[Service]
Restart=always
Skapa n8n-app.container:
[Unit]
After=n8n-db.service
[Container]
ContainerName=n8n-app
Image=docker.io/n8nio/n8n:2.41.6
Pod=n8n.pod
Volume=n8n-data:/home/node/.n8n
Volume=%h/files:/home/node/.n8n-files
Environment=N8N_HOST=n8n.example.com N8N_PROTOCOL=https N8N_WEBHOOK_URL=https://n8n.example.com/ N8N_PROXY_HOPS=1
Environment=GENERIC_TIMEZONE=Europe/Stockholm TZ=Europe/Stockholm
Environment=DB_TYPE=postgresdb DB_POSTGRESDB_HOST=127.0.0.1 DB_POSTGRESDB_DATABASE=n8n DB_POSTGRESDB_USER=n8n
Environment=N8N_RUNNERS_MODE=external
Environment=N8N_DIAGNOSTICS_ENABLED=false N8N_VERSION_NOTIFICATIONS_ENABLED=false N8N_TEMPLATES_ENABLED=false N8N_HIRING_BANNER_ENABLED=false
Environment=N8N_DISABLED_MODULES=mcp-registry N8N_VERIFIED_PACKAGES_ENABLED=false
Secret=n8n-db-password,type=env,target=DB_POSTGRESDB_PASSWORD
Secret=n8n-encryption-key,type=env,target=N8N_ENCRYPTION_KEY
Secret=n8n-runners-token,type=env,target=N8N_RUNNERS_AUTH_TOKEN
[Service]
Restart=always
Och n8n-runners.container:
[Unit]
After=n8n-app.service
[Container]
ContainerName=n8n-runners
Image=docker.io/n8nio/runners:2.41.6
Pod=n8n.pod
Environment=GENERIC_TIMEZONE=Europe/Stockholm TZ=Europe/Stockholm
Secret=n8n-runners-token,type=env,target=N8N_RUNNERS_AUTH_TOKEN
[Service]
Restart=always
Det här gör inställningarna:
N8N_HOST,N8N_PROTOCOLochN8N_WEBHOOK_URLger n8n dess publika adress, så att redigeraren visar webhook-adresser medhttps://n8n.example.com/i stället förhttp://localhost:5678/.N8N_WEBHOOK_URLersätter den äldreWEBHOOK_URL, som n8n har kallat utfasad sedan 2.35.N8N_PROXY_HOPS=1talar om för n8n att en proxy, Caddy, står framför det, så att det tar varje besökares adress från headernX-Forwarded-Forsom Caddy sätter. n8n skriver inte besökarnas adresser i sin logg, men använder dem för att begränsa inloggningsförsök och lösenordsåterställningar per adress. Utan raden har alla besökare Caddys adress, och en besökare som når en gräns stänger ute alla andra (se Felsökning).GENERIC_TIMEZONEär tidszonen för scheman och datum i arbetsflödena, ochTZden för själva containern.N8N_RUNNERS_MODE=externalkör koden i Code-noder i den separata containernn8n-runners, som n8n rekommenderar. Det andra läget, som kör koden inne i n8n, är utfasat.- De två raderna med
N8N_DIAGNOSTICS_ENABLEDochN8N_DISABLED_MODULESstoppar n8n:s anslutningar till n8n:s servrar. Steg 8 förklarar var och en. - n8n:s inloggningskaka är märkt som säker som standard, så att webbläsare bara skickar den över HTTPS; där finns inget att ställa in.
n8n ligger kvar på en exakt version, eftersom databasen ändras med de flesta versioner och en uppdatering bör börja med en säkerhetskopia (steg 11). PostgreSQL följer version 18 av sig själv via podman-auto-update.timer. Starta den:
systemctl --user daemon-reload
systemctl --user start n8n-pod
systemctl --user enable --now podman-auto-update.timer
Avbilderna upptar omkring 2,1 GB på disken. Efter första starten slutar podman logs n8n-app med Editor is now accessible via: https://n8n.example.com.
4. Skapa ägarkontot via en SSH-tunnel
Tills ett ägarkonto finns kan den som först öppnar n8n skapa det, och det kontot äger allt. Caddy visar inte n8n för någon än, så skapa kontot genom en SSH-tunnel, som bara du har.
Öppna en tunnel från din egen dator till n8n:s port på servern, och låt den vara öppen:
ssh -L 8111:127.0.0.1:8111 root@203.0.113.10
Öppna http://localhost:8111 i webbläsaren. Den visar Set up owner account. Fyll i Email, First Name, Last Name och Password (minst 8 tecken, med en siffra och en versal) och välj Next. Lämna I want to receive security and product updates omarkerad om du inte vill ha e-post från n8n. n8n ställer sedan några frågor under Customize n8n to you och öppnar redigeraren. Stäng tunneln när du är klar.
Inloggningskakan är säker, men webbläsare godtar den över http://localhost. Vi testade det i Chromium.
5. Sätt Caddy framför
Gå tillbaka till root med exit, byt till Caddys användare med machinectl shell caddy@ och lägg till det här blocket sist i ~/Caddyfile:
n8n.example.com {
reverse_proxy 127.0.0.1:8111
}
Starta om Caddy med systemctl --user restart caddy och logga in på https://n8n.example.com.
Kontrollera från en annan dator att ingen annan kan skapa en ägare nu:
curl -s -X POST https://n8n.example.com/rest/owner/setup -H 'content-type: application/json' \
-d '{"email":"someone@example.com","firstName":"A","lastName":"B","password":"Password123"}'
{"code":400,"message":"Instance owner already setup"}
6. Ta emot en webhook
Det här arbetsflödet tar emot en POST till https://n8n.example.com/webhook/contact, till exempel från ett kontaktformulär, och sparar det som skickades som en fil i ~/files på servern. Kopiera den här texten:
{
"nodes": [
{
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [0, 0],
"parameters": { "httpMethod": "POST", "path": "contact", "options": {} }
},
{
"name": "Convert to File",
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [220, 0],
"parameters": { "operation": "toJson", "mode": "each", "options": {} }
},
{
"name": "Read/Write Files from Disk",
"type": "n8n-nodes-base.readWriteFile",
"typeVersion": 1.1,
"position": [440, 0],
"parameters": {
"operation": "write",
"fileName": "=/home/node/.n8n-files/contact-{{ $now.toFormat('yyyyMMdd-HHmmss') }}.json",
"options": {}
}
}
],
"connections": {
"Webhook": { "main": [[{ "node": "Convert to File", "type": "main", "index": 0 }]] },
"Convert to File": { "main": [[{ "node": "Read/Write Files from Disk", "type": "main", "index": 0 }]] }
}
}
Välj Build a workflow i n8n (eller + uppe till vänster), klicka på den tomma ytan och klistra in med Ctrl+V. De tre noderna dyker upp: Webhook, Convert to File och Read/Write Files from Disk. Klicka på namnet My workflow högst upp och döp arbetsflödet till Contact form. Välj sedan Publish uppe till höger, och Publish igen i dialogrutan Publish workflow. Ett arbetsflöde svarar på webhooks och körs enligt schema först när det är publicerat.
Från din egen dator:
curl -X POST https://n8n.example.com/webhook/contact \
-H 'content-type: application/json' -d '{"name":"Anna","message":"Hello"}'
{"message":"Workflow was started"}
Som n8n på servern visar ls ~/files en ny fil, contact-...json. Den innehåller det du skickade och förfrågans headers, bland dem x-forwarded-for med din egen adress. Fliken Executions högst upp i arbetsflödet listar varje körning.
7. Kör något enligt schema
Det här arbetsflödet lägger till en rad med tiden i ~/files/heartbeat.log var femte minut. Det visar också att Code-noder fungerar, eftersom en Code-nod skriver raden:
{
"nodes": [
{
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.4,
"position": [0, 0],
"parameters": { "rule": { "interval": [{ "field": "minutes", "minutesInterval": 5 }] } }
},
{
"name": "Code",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [220, 0],
"parameters": { "jsCode": "return [{ json: { line: $now.toFormat('yyyy-MM-dd HH:mm:ss ZZZZ') + '\\n' } }];" }
},
{
"name": "Convert to File",
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [440, 0],
"parameters": { "operation": "toText", "sourceProperty": "line", "options": {} }
},
{
"name": "Read/Write Files from Disk",
"type": "n8n-nodes-base.readWriteFile",
"typeVersion": 1.1,
"position": [660, 0],
"parameters": { "operation": "write", "fileName": "/home/node/.n8n-files/heartbeat.log", "options": { "append": true } }
}
],
"connections": {
"Schedule Trigger": { "main": [[{ "node": "Code", "type": "main", "index": 0 }]] },
"Code": { "main": [[{ "node": "Convert to File", "type": "main", "index": 0 }]] },
"Convert to File": { "main": [[{ "node": "Read/Write Files from Disk", "type": "main", "index": 0 }]] }
}
}
Klistra in det i ett nytt arbetsflöde, döp det till Heartbeat och publicera det som i steg 6. Efter fem minuter, som n8n:
cat ~/files/heartbeat.log
2026-10-02 19:10:31 GMT+2
GMT+2 är svensk sommartid, från GENERIC_TIMEZONE.
8. Vet vad det ansluter till
Vi övervakade serverns utgående anslutningar och webbläsarens förfrågningar, först med n8n:s standardinställningar och sedan med raderna från steg 3.
Med standardinställningarna kontaktar n8n de här tjänsterna, som alla drivs av n8n GmbH:
- telemetry.n8n.io: användningsdata. Enligt n8n:s dokumentation omfattar det din n8n-version, vissa inställningar, serverns operativsystem, minne och processorer, ett anonymt instans-ID, hur varje arbetsflöde är uppbyggt (vilka noder och hur de hänger ihop), de domäner och sökvägar som HTTP Request-noder anropar, felmeddelanden från misslyckade körningar, hur redigeraren används och din IP-adress. Det omfattar inte inloggningsuppgifter eller de data som arbetsflödena hanterar. Redigeraren i webbläsaren skickar sina händelser via ditt eget n8n, som för dem vidare, och laddar sitt spårningsskript från cdn-rs.n8n.io.
- ph.n8n.io: n8n:s PostHog-tjänst, som servern kontaktade vid start.
- api.n8n.io: nya versioner, en lista över nyheter och banderoller (som webbläsaren hämtar, med ditt instans-ID), arbetsflödesmallar, listan över communitynoder som n8n har granskat, och en katalog över MCP-servrar som servern hämtar vid varje start och sedan var åttonde timme.
De tre namnen pekar på Cloudflare. Enligt n8n:s kod är programvaran bakom de två första RudderStack och PostHog; n8n:s integritetspolicy säger att en del mottagare av dessa data kan finnas utanför EU, särskilt i USA, men namnger dem inte.
Raderna i steg 3 stänger av det här:
N8N_DIAGNOSTICS_ENABLED=falsestoppar användningsdata,N8N_VERSION_NOTIFICATIONS_ENABLED=falseversionskontrollen ochN8N_TEMPLATES_ENABLED=falsemallarna. Det är de tre som n8n:s dokumentation nämner.N8N_HIRING_BANNER_ENABLED=falsetar bort en jobbannons som n8n skriver i webbläsarens konsol. Med de fyra gjorde webbläsaren inga förfrågningar utanför ditt eget n8n, och telemetry.n8n.io och ph.n8n.io kontaktades inte.- Servern hämtade ändå från api.n8n.io vid varje start, och många gånger medan vi använde redigeraren.
N8N_DISABLED_MODULES=mcp-registrystänger av katalogen över MCP-servrar, ochN8N_VERIFIED_PACKAGES_ENABLED=falselistan över granskade communitynoder. Enligt n8n:s dokumentation kan du fortfarande installera andra communitynoder med deras npm-namn; det testade vi inte.
Med alla raderna gjorde servern inga anslutningar till n8n:s servrar när den startade och stod stilla, eller medan vi loggade in, byggde och körde arbetsflöden och sökte efter noder. Webbläsaren gjorde en: sidan Community nodes söker i npm:s paketindex på api.npms.io när du öppnar den. n8n kontaktade inte sin licensserver, license.n8n.io, under våra tester. Dina arbetsflöden ansluter förstås till de tjänster du ställer in dem att använda.
9. Begränsa vad arbetsflödena kan göra
Den som kan redigera arbetsflöden kan få n8n att skicka förfrågningar, läsa och skriva filer och köra kod. n8n begränsar det som standard, och vi testade vad ett arbetsflöde kan nå:
- Execute Command, noden som kör skalkommandon, laddas inte som standard, och inte heller Local File Trigger. Slå inte på dem: ett kommando skulle köras inne i n8n-containern, där krypteringsnyckeln och databaslösenordet finns i miljön.
- Code-noder körs i containern
n8n-runners, där JavaScript saknar objektetprocessoch bara kan ladda modulernacryptoochmoment, så koden kan inte läsa n8n:s miljö. Uttryck som läser miljövariabler, till exempel{{ $env.N8N_ENCRYPTION_KEY }}, misslyckas medaccess to env vars denied. - Read/Write Files from Disk når bara
/home/node/.n8n-files, som är~/filespå servern./etc/passwdoch n8n:s egenconfiggav svaretAccess to the file is not allowed. - Ett arbetsflöde kan nå internet, PostgreSQL i sin egen pod (som kräver lösenordet, som det inte kan läsa) och
n8n.example.comvia Caddy, tack vare radenAddHost. Andra webbplatser på samma server behöver en egenAddHost-rad var, annars leder deras namn tillbaka in i podden. Det kunde inte nå ett program på servern som bara lyssnar på127.0.0.1, vilket är så de andra appguiderna publicerar sina portar. Det kunde nå ett program som lyssnar på alla adresser, viahost.containers.internal, trots att ufw stänger den porten mot internet: ufw filtrerar bara det som kommer utifrån. - Allt körs som användaren
n8n, som inte kan läsa andra användares filer på servern, och med användar-ID:n i containrarna som inte tillhör någon annan.
För att blockera fler noder sätter du NODES_EXCLUDE i n8n-app.container. Den ersätter n8n:s standardlista, så behåll de två standardposterna i den. Skriv raden med enkla citattecken runt hela raden:
Environment='NODES_EXCLUDE=["n8n-nodes-base.executeCommand", "n8n-nodes-base.localFileTrigger", "n8n-nodes-base.ssh"]'
Utan de enkla citattecknen tar systemd bort de dubbla, n8n får en lista som det inte kan läsa, och Execute Command blir tillgänglig. Vi testade båda. Kontrollera efter systemctl --user daemon-reload och systemctl --user restart n8n-app med podman exec n8n-app printenv NODES_EXCLUDE: namnen ska stå inom dubbla citattecken.
10. Säkerhetskopiera
För att återställa n8n behöver du databasen och krypteringsnyckeln. Skapa ~/backup.sh som n8n:
#!/bin/sh
# Dumps n8n's database and saves its encryption key into ~/backup.
set -e
umask 077
cd ~/backup
podman exec n8n-db pg_dump -U n8n -Fc n8n > n8n-db.dump
podman secret inspect --showsecret --format "{{.SecretData}}" n8n-encryption-key > n8n-encryption-key
Kör det varje natt med en timer. Skapa ~/.config/systemd/user/n8n-backup.service:
[Unit]
Description=Back up n8n's database and encryption key
[Service]
Type=oneshot
ExecStart=%h/backup.sh
Och ~/.config/systemd/user/n8n-backup.timer:
[Unit]
Description=Back up n8n every night
[Timer]
OnCalendar=*-*-* 03:00
Persistent=true
[Install]
WantedBy=timers.target
mkdir -m 700 ~/backup
chmod 700 ~/backup.sh
systemctl --user daemon-reload
systemctl --user enable --now n8n-backup.timer
systemctl --user start n8n-backup.service
ls ~/backup
ls visar n8n-db.dump och n8n-encryption-key. Nyckelfilen låser upp varje sparad inloggningsuppgift, så förvara säkerhetskopian lika säkert som servern. Använd restic på /home/n8n för att få ut den från servern varje natt, tillsammans med ~/files.
Återställ före steg 5, på en ny server eller efter att volymerna gått förlorade, medan n8n inte går att nå från internet. Lägg tillbaka nyckeln, starta podden så att n8n skapar sin databas, stoppa n8n och ersätt databasen med säkerhetskopian:
tr -d '\n' < ~/backup/n8n-encryption-key | podman secret create n8n-encryption-key -
systemctl --user start n8n-pod
systemctl --user stop n8n-app
podman exec -i n8n-db pg_restore -U n8n -d n8n --clean --if-exists < ~/backup/n8n-db.dump
systemctl --user start n8n-app
Vi körde stegen på testservern efter att ha raderat båda volymerna och nyckeln: ägarkontot, båda arbetsflödena och en sparad inloggningsuppgift kom tillbaka, inloggningsuppgiften gick att dekryptera, och webhooken svarade igen.
11. Uppdatera
n8n ger ut en ny mindre version de flesta veckor och rekommenderar att du uppdaterar minst en gång i månaden. Använd den senaste versionen som inte är märkt Pre-release på n8n:s sida med versioner, som också är den som Docker Hubs tagg stable pekar på, och läs n8n:s versionsinformation efter ändringar som kan bryta något. Säkerhetskopiera (steg 10), byt sedan version på båda n8n-avbilderna, som alltid ska ha samma version, och starta om:
~/backup.sh
cd ~/.config/containers/systemd
sed -i 's/:2.41.6$/:2.42.0/' n8n-app.container n8n-runners.container
systemctl --user daemon-reload
systemctl --user restart n8n-pod
podman image rm docker.io/n8nio/n8n:2.41.6 docker.io/n8nio/runners:2.41.6
n8n uppdaterar sin databas när det startar, och loggen visar Recorded version change: 2.41.6 -> 2.42.0. Vi testade det från 2.41.5 till 2.41.6. För att gå tillbaka till en äldre version efter det behövs säkerhetskopian.
Felsökning
podman pull från docker.n8n.io misslyckas med toomanyrequests: You have reached your unauthenticated pull rate limit. n8n:s eget registernamn skickar förfrågningarna vidare till Docker Hub och nådde gränsen på vår server, medan docker.io fungerade. Avbilden för kodköraren finns inte alls på docker.n8n.io. Använd namnen docker.io/n8nio/... från steg 3.
En webhook svarar Cannot POST /webhook/contact. n8n håller fortfarande på att starta, vilket tog omkring 45 sekunder efter en omstart av vår server, eller så är arbetsflödet inte publicerat. Vänta tills Editor is now accessible syns i podman logs n8n-app, och kontrollera att arbetsflödet är publicerat.
Alla får Too many requests efter att en besökare försökt logga in eller återställa lösenordet för många gånger, och podman logs n8n-app visar ERR_ERL_UNEXPECTED_X_FORWARDED_FOR. N8N_PROXY_HOPS=1 saknas, så n8n räknar varje besökare som Caddy. Lägg till den som i steg 3 och starta om n8n. Vi framkallade det med flit: med inställningen spärrades bara adressen som nådde gränsen.
Ett arbetsflöde som anropar https://n8n.example.com misslyckas med ECONNREFUSED. Inne i podden tillhör serverns egen adress podden. Raden AddHost i n8n.pod skickar namnet till Caddy i stället; kontrollera att den har ditt namn och kör sedan systemctl --user daemon-reload och systemctl --user restart n8n-pod.
Execute Command syns i listan över noder. NODES_EXCLUDE är satt utan enkla citattecken runt hela raden. Se steg 9.
Read/Write Files from Disk svarar Access to the file is not allowed. Sökvägen ligger utanför /home/node/.n8n-files. Använd den sökvägen i noden, och leta efter filen i ~/files på servern.
En fil som ett arbetsflöde har skrivit går inte att radera i ~/files. Den tillhör containerns användare. Använd podman unshare rm ~/files/namn som n8n.