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:

  1. Glavni n8n vsebnik se veže na 127.0.0.1:5678 in ne na 0.0.0.0. Doseže ga lahko le lokalni povratni proxy.
  2. 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.

Vam je bil odgovor v pomoč? 0 uporabniku/om je bi članek v pomoč (0 glasov)