n8n je ena najmočnejših odprtokodnih alternativ za Zapier in Make. Lastno gostovanje vam prinese neomejena izvajanja delovnih tokov, suverenost podatkov za občutljive integracije in mesečne stroške, ki ne rastejo z uporabo. Ta vodnik vas vodi skozi produkcijsko postavitev na VPS-u, in ne le hitrega Docker enovrstičnika, ki se sesuje pod resnično obremenitvijo.
n8n uporabljamo interno za avtomatizacijo zaračunavanja, nadzor in postopke uvajanja strank. Postavitev spodaj je tista, ki jo priporočamo strankam, ki želijo storiti enako.
Zakaj je pomembna produkcijska postavitev
Privzeta Docker slika za n8n deluje dobro za posameznega uporabnika, ki preizkuša delovne tokove. Ko jo postavite pred spletne kavlje (webhooks) iz produkcijskih sistemov, izvajate načrtovane tokove ali vključite ekipo, potrebujete:
- PostgreSQL kot bazo namesto privzetega SQLite, ki se zaklene pri sočasnem pisanju.
- Način čakalne vrste z Redisom, da dolgotrajni tokovi ne blokirajo glavnega procesa.
- Povratni proxy s HTTPS za varne webhook končne točke.
- Trajno shrambo in varnostne kopije, ker je izguba definicij tokov boleča.
- Upravljanje skrivnosti, da poverilnice niso shranjene kot odprto besedilo v env datotekah.
Vikend, porabljen za to, se izplača prvič, ko mora načrtovan delovni tok teči med uvajanjem ob 3. uri zjutraj.
Velikost VPS za n8n
Velikost je odvisna od sočasnosti in zahtevnosti delovnih tokov. Razumna izhodišča:
- Manjša ekipa, pod 50 delovnih tokov, občasni webhooki: 2 vCPU, 4 GB RAM, 50 GB disk.
- Srednja uporaba, pogosti webhooki, načrtovani tokovi vsakih nekaj minut: 4 vCPU, 8 GB RAM, 100 GB disk.
- Težka uporaba, način čakalne vrste z več delavci, velike vsebine: 8 vCPU, 16 GB RAM, 200 GB disk.
Naši načrti Cloud VPS lepo ustrezajo tem stopnjam. Za delovne tokove, ki so vezani na CPU (zahtevne pretvorbe podatkov, klici AI/LLM), je linija AMD VPS hitrejša na jedro.
Predpogoji
Ta vodnik predpostavlja:
- Svež VPS z Ubuntu 24.04 LTS ali Debian 12.
- Domena ali poddomena, ki kaže na IP VPS-a (npr.
n8n.vasadomena.com). - Osnoven SSH dostop kot ne-root uporabnik s sudo.
- V požarnem zidu odprta vrata 80 in 443.
1. korak: Namestitev Dockerja in Docker Compose
# Posodobitev sistema
sudo apt update && sudo apt upgrade -y
# Namestitev Dockerja iz uradnega repozitorija
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# Dodajte uporabnika v skupino docker
sudo usermod -aG docker $USER
newgrp docker
# Preverjanje
docker run hello-world
Za produkcijo se izognite priročni skripti get.docker.com. Namestitve iz repozitorija dobivajo pravilne varnostne posodobitve.
2. korak: Ustvarjanje strukture projekta
mkdir -p ~/n8n/{data,postgres,redis,backups}
cd ~/n8n
Ustvarite okoljsko datoteko za skrivnosti:
cat > .env << 'EOF'
# Domena
N8N_HOST=n8n.vasadomena.com
WEBHOOK_URL=https://n8n.vasadomena.com/
N8N_PROTOCOL=https
# Baza podatkov
POSTGRES_USER=n8n
POSTGRES_PASSWORD=USTVARITE_MOCNO_GESLO_TUKAJ
POSTGRES_DB=n8n
# Šifrirni ključ (32+ znakov, ustvarite enkrat in nikoli ne spreminjajte)
N8N_ENCRYPTION_KEY=USTVARITE_NAKLJUCNI_32_ZNAKOVNI_NIZ_TUKAJ
# Časovni pas
GENERIC_TIMEZONE=Europe/Ljubljana
TZ=Europe/Ljubljana
# Način čakalne vrste
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379
# Varnost
N8N_BASIC_AUTH_ACTIVE=false
N8N_USER_MANAGEMENT_DISABLED=false
EOF
chmod 600 .env
Ustvarite varne vrednosti:
# Geslo za PostgreSQL
openssl rand -base64 32
# Šifrirni ključ (32 šestnajstiških znakov)
openssl rand -hex 32
Vsak izhod kopirajte v datoteko .env. Šifrirnega ključa po prvi uporabi nikoli ne smete spreminjati, sicer postanejo poverilnice, shranjene v tokovih, neberljive.
3. korak: Ustvarjanje docker-compose.yml
cat > docker-compose.yml << 'EOF'
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_NON_ROOT_USER=${POSTGRES_USER}
- POSTGRES_NON_ROOT_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./postgres:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- ./redis:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENCRYPTION_KEY
- N8N_HOST
- N8N_PROTOCOL
- WEBHOOK_URL
- GENERIC_TIMEZONE
- TZ
- EXECUTIONS_MODE
- QUEUE_BULL_REDIS_HOST
- QUEUE_BULL_REDIS_PORT
- N8N_RUNNERS_ENABLED=true
volumes:
- ./data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
n8n-worker:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
command: worker
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENCRYPTION_KEY
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- GENERIC_TIMEZONE
- TZ
volumes:
- ./data:/home/node/.n8n
depends_on:
- n8n
EOF
Dve pomembni podrobnosti:
- Glavni n8n vsebnik se veže na
127.0.0.1:5678in ne na0.0.0.0. Doseže ga lahko le lokalni povratni proxy. - Servis worker porablja čakalno vrsto. Več replik dodate z
docker compose up -d --scale n8n-worker=3, ko boste razumeli svojo obremenitev.
4. korak: Povratni proxy z Nginx in Let's Encrypt
sudo apt install -y nginx certbot python3-certbot-nginx
Ustvarite Nginx konfiguracijo:
sudo tee /etc/nginx/sites-available/n8n << 'EOF'
server {
listen 80;
server_name n8n.vasadomena.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name n8n.vasadomena.com;
# SSL konfiguracijo doda certbot
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Podpora za WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Časovne omejitve za dolgotrajne tokove
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# Izdaja SSL potrdila
sudo certbot --nginx -d n8n.vasadomena.com
client_max_body_size 50M in podaljšane časovne omejitve so pomembne, kadar delovni tokovi obravnavajo nalaganja datotek ali čakajo na počasne zunanje API-je.
5. korak: Zagon n8n-a
cd ~/n8n
docker compose up -d
# Spremljajte dnevnike, dokler ni vse v dobrem stanju
docker compose logs -f
Obiščite https://n8n.vasadomena.com in ustvarite račun lastnika. Sistem za upravljanje uporabnikov je v zadnjih različicah privzeto omogočen.
6. korak: Varnost webhookov
Webhooki so po svoji zasnovi javni, vendar neavtenticirani webhooki vabijo zlorabe. Dva vzorca dobro delujeta:
1. Avtentikacija na podlagi glave (header). V vozlišču Webhook nastavite "Authentication" na "Header Auth" in zahtevajte skrivni žeton. Zunanji sistemi žeton pošljejo v poljubni glavi.
2. Prikrivanje po poti za webhooke z nizkim tveganjem. V poti webhooka uporabite UUID. Za karkoli občutljivega se ne zanašajte le na to.
Pri vhodnih webhookih iz storitev, kot sta GitHub ali Stripe, preverite glavo s podpisom. n8n ima za to namenska vozlišča.
7. korak: Varnostne kopije
Varnostne kopije potrebujeta dve stvari: PostgreSQL in imenik ./data.
Ustvarite skripto za varnostne kopije:
cat > ~/n8n/backup.sh << 'EOF'
#!/bin/bash
set -e
BACKUP_DIR="$HOME/n8n/backups"
DATE=$(date +%Y%m%d-%H%M%S)
cd "$HOME/n8n"
# Izvoz baze
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > "$BACKUP_DIR/db-$DATE.sql.gz"
# Imenik podatkov n8n (tokovi, poverilnice, šifrirni ključ)
tar -czf "$BACKUP_DIR/data-$DATE.tar.gz" data/
# Ohrani zadnjih 14 dni
find "$BACKUP_DIR" -name "*.gz" -mtime +14 -delete
echo "Varnostna kopija končana: $DATE"
EOF
chmod +x ~/n8n/backup.sh
# Načrtuj dnevno ob 3. uri zjutraj
(crontab -l 2>/dev/null; echo "0 3 * * * $HOME/n8n/backup.sh >> $HOME/n8n/backups/backup.log 2>&1") | crontab -
Za varnostne kopije izven strežnika potisnite imenik s kopijami v S3-združljivo shrambo ali pa jih z rsync prenesite na Proxmox Backup Server. Stranke v naši infrastrukturi lahko uporabijo prostor za varnostne kopije na PBS, ki je vključen.
8. korak: Posodobitve
cd ~/n8n
docker compose pull
docker compose up -d
docker image prune -f
n8n izdaja različice pogosto. Naročite se na seznam sprememb in večje prehode med različicami pred produkcijo preizkusite v testnem okolju. Pred posodobitvijo vedno naredite svežo varnostno kopijo.
Pogoste pasti
Webhooki nedosegljivi. Preverite, da WEBHOOK_URL ustreza vaši javni domeni in vsebuje poševnico na koncu. Preglejte Nginx dnevnike za napake 502, ki kažejo, da vsebnik ne odgovarja.
Tokovi obvisijo na 100 %. Način čakalne vrste je napačno nastavljen. Preverite, da je Redis dosegljiv in da teče vsaj en delavec z docker compose logs n8n-worker.
Poverilnice postanejo "neveljavne" po ponovnem zagonu. Šifrirni ključ se je spremenil. Obnovite datoteko .env iz varnostne kopije. Tega ključa nikoli ne pustite, da se zamenja brez ponovnega vnosa vseh poverilnic.
Visoka poraba pomnilnika na glavnem vsebniku. Dolgotrajni tokovi se ne premikajo k delavcem. Preverite, da je EXECUTIONS_MODE=queue nastavljen na glavnem vsebniku, in ne le pri delavcu.
Težave s TLS pri klicateljih webhooka. Nekateri stari API odjemalci ne sledijo preusmeritvam. Prepričajte se, da WEBHOOK_URL uporablja https:// in da se vaš DNS A zapis ujema.
Pogosta vprašanja
Ali je samogostujoči n8n res brezplačen?
Community Edition je brezplačen za vsako uporabo po Sustainable Use License. Komercialne funkcije, kot so SSO, LDAP in zunanje shrambe skrivnosti, zahtevajo Enterprise licenco. Za večino ekip je Community dovolj.
Kako se to primerja z n8n Cloud?
Lastno gostovanje stane približno 5 do 15 EUR na mesec za VPS proti 24 EUR na mesec za n8n Cloud Starter, brez omejitev izvajanj. Kompromis je operativna odgovornost: posodobitve, varnostne kopije in razpoložljivost obvladujete sami.
Ali lahko n8n poganjam brez načina čakalne vrste?
Da, pri lažji uporabi. Odstranite storitev n8n-worker in nastavite EXECUTIONS_MODE=regular. Ko boste imeli več kot peščico sočasnih tokov ali dolgotrajne tokove, se majhen dodaten zaplet z načinom čakalne vrste izplača.
Ali n8n ustreza evropskim zahtevam glede prebivališča podatkov?
Lastno gostovanje na VPS-u v EU, kot je naš, ohranja vse podatke tokov, poverilnice in dnevnike izvajanj v EU. To je eden glavnih razlogov, da ekipe, občutljive na GDPR, preidejo iz oblačnih SaaS rešitev na samogostujoči n8n.
Poženite n8n na infrastrukturi, narejeni zanj
Naši VPS načrti tečejo na shrambi, podprti s Ceph, ki omogoča posnetke, kar zgoraj opisane postopke varnostnega kopiranja in povrnitve znatno pospeši. V EU, večjezična podpora, brez nepričakovanega dušenja virov.
Naročite Cloud VPS ali AMD VPS in n8n bo tekel v produkcijski postavitvi, še preden vam jutranja kava odide.