Tropic Host

n8n: ce este și cum îl instalezi pe un VPS cu Docker Compose

9 min citire
Tropic
n8n: ce este și cum îl instalezi pe un VPS cu Docker Compose

Language: ro

n8n pe VPS: propria platformă de automatizare fără muncă manuală repetitivă

O solicitare sosește de pe site. n8n validează datele, verifică duplicatele, creează o ofertă, pregătește un răspuns cu AI și îl anunță pe manager în Telegram. O persoană intervine doar când este necesară o decizie, nu pentru a muta date între file de browser.

Mai jos vedem cum funcționează n8n și cum îl instalezi pe un VPS cu Docker Compose, PostgreSQL, HTTPS și execuție izolată a codului.

n8n în șapte pași

Un plan minimal de lansare:

  1. Creează un VPS și direcționează o subdomenă către el, de exemplu n8n.example.com.
  2. Instalează Docker și Docker Compose.
  3. Rulează n8n cu PostgreSQL, un task runner extern și Caddy.
  4. Deschide interfața prin HTTPS și creează contul proprietarului.
  5. Conectează Telegram, un CRM, emailul sau orice API extern.
  6. Configurează tratarea erorilor și perioada de păstrare a datelor de execuție.
  7. Automatizează backupurile bazei de date, ale datelor și ale cheii de criptare.

Pentru o instalare mică de producție, este rezonabil să începi cu 2 vCPU și 4 GB RAM. 2 GB sunt adesea suficienți pentru testare, dar PostgreSQL, Docker și procesele simultane consumă rapid rezerva rămasă.

Ce este n8n și cum funcționează

n8n este o platformă de automatizare a fluxurilor de lucru. Un workflow este construit din noduri: unul pornește procesul, următoarele preiau și transformă datele, iar ultimul nod execută o acțiune.

Un workflow simplu arată astfel:

Webhook → data validation → CRM → Telegram → website response

Un lanț poate fi declanșat de un webhook, o programare, un email, un mesaj sau un eveniment dintr-un serviciu extern. Între noduri sunt disponibile condiții, bucle, filtre, așteptări și tratarea erorilor.

Unul dintre punctele forte ale n8n este că automatizarea nu se limitează la integration-uri gata făcute. Poți apela orice serviciu cu un API prin HTTP Request, iar logica personalizată poate fi scrisă într-un Code node folosind JavaScript sau Python. Astfel, n8n se situează între un builder no-code simplu și codul personalizat de pe server.

De ce este mai mult decât redirecționarea datelor

n8n este util când un proces trece prin mai multe sisteme și necesită o decizie:

form → validation → duplicate search → AI assessment → manager approval → CRM

Poți păstra o persoană doar în punctul de control. De exemplu, AI pregătește răspunsul, dar mesajul este trimis clientului numai după aprobarea unui angajat.

Cazuri tipice de utilizare:

  • vânzări și suport: colectarea solicitărilor, distribuirea leadurilor și crearea ofertelor;
  • conținut și AI: redactarea, clasificarea solicitărilor și publicarea după aprobare;
  • DevOps: notificări despre întreruperi, webhookuri Git și verificări API;
  • operațiuni interne: sincronizarea foilor de calcul, emailului, calendarelor și sistemelor companiei.

O instalare self-hosted îți oferă control asupra procesului și bazei de date, dar nu transformă serviciile externe în servicii locale. Datele trimise către Telegram, CRM sau un model AI cloud părăsesc VPS-ul.

n8n Cloud sau propriul server

Parametrun8n Cloudn8n pe VPS
LansareNu este necesară configurarea serveruluiSunt necesare domeniu, Docker și HTTPS
ActualizăriGestionate de n8nGestionate de proprietar
Bază de date și fișiereÎn infrastructura serviciuluiPe serverul ales
ScalareConform planului cloudConfigurată independent
ResponsabilitateMai puțină administrareBackupurile, securitatea și monitorizarea revin proprietarului
Potrivit pentruUn început rapid fără DevOpsControl, personalizare și procese permanente

Community Edition poate fi găzduită gratuit și folosită pentru procese personale și interne ale unei companii. Totuși, n8n nu este distribuit sub o licență open-source tradițională, ci sub Sustainable Use License, o licență fair-code. Aceasta permite utilizarea internă și modificarea, dar nu îți permite să instalezi pur și simplu n8n, să adaugi propriul logo și să vinzi accesul ca SaaS independent. Pentru un astfel de produs, termenii licenței trebuie analizați separat.

Cerințele serverului n8n

Încărcarea depinde de volumul datelor, concurență și tipul operațiunilor. Fișierele, listele lungi, Code node-urile și fluxurile AI necesită mai multă memorie decât transmiterea unor payloaduri JSON mici între API-uri.

ScenariuConfigurație de pornire
Teste și workflow-uri personale bazate pe text1 vCPU, 2 GB RAM, 20 GB NVMe
Instalare mică de producție2 vCPU, 4 GB RAM, 25–40 GB NVMe
Procese simultane, AI sau fișiere4 vCPU, 8 GB RAM sau mai mult
Mai multe procese worker în queue modeDimensionare după volumul execuțiilor

SQLite este potrivit pentru învățare și pentru o instalare mică cu o singură instanță. PostgreSQL este mai convenabil în producție: backupurile sunt mai ușoare, iar trecerea ulterioară la queue mode este mai simplă.

Cum instalezi n8n pe un VPS

În acest exemplu folosim Ubuntu 24.04, PostgreSQL, Caddy și un task runner extern. Înlocuiește n8n.example.com și fusul orar cu valorile tale.

1. Configurează DNS-ul și pregătește serverul

Creează un record DNS de tip A care indică spre adresa IPv4 a VPS-ului, apoi conectează-te prin SSH:

ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl ufw openssl

Instalează Docker Engine și pluginul Compose din depozitul oficial:

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

apt update
apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin
docker compose version

Permite doar SSH, HTTP și HTTPS:

ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Nu închide sesiunea SSH curentă până nu confirmi că o conexiune nouă funcționează.

2. Creează variabilele de mediu

Pregătește directorul:

mkdir -p /opt/n8n
cd /opt/n8n

Creează .env. Comenzile de mai jos generează imediat secrete aleatorii separate pentru PostgreSQL, criptarea n8n și task runner:

cat > .env <<EOF
N8N_VERSION=stable
N8N_HOST=n8n.example.com
GENERIC_TIMEZONE=Europe/Berlin

POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=$(openssl rand -hex 32)

N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF

chmod 600 .env

Eticheta stable este convenabilă la prima lansare. După verificarea instalării, este mai bine să fixezi o versiune n8n exactă, pentru ca următoarea actualizare a imaginii să nu apară pe neașteptate.

Nu trebuie să pierzi N8N_ENCRYPTION_KEY. n8n folosește această cheie pentru a cripta parolele, tokenurile și alte credențiale stocate. Dacă restaurezi doar PostgreSQL fără cheie, înregistrările vor rămâne în baza de date, dar n8n nu le va putea citi.

3. Creează fișierul Docker Compose

Creează compose.yaml:

services:
  postgres:
    image: postgres:18-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      PGDATA: /var/lib/postgresql/data
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
    restart: unless-stopped
    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_HOST: ${N8N_HOST}
      N8N_PORT: "5678"
      N8N_PROTOCOL: https
      N8N_EDITOR_BASE_URL: https://${N8N_HOST}
      N8N_WEBHOOK_URL: https://${N8N_HOST}/
      N8N_PROXY_HOPS: "1"
      GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
      TZ: ${GENERIC_TIMEZONE}

      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
      N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"

      N8N_RUNNERS_MODE: external
      N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
      N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0

      EXECUTIONS_DATA_PRUNE: "true"
      EXECUTIONS_DATA_MAX_AGE: "168"
      EXECUTIONS_DATA_PRUNE_MAX_COUNT: "10000"
    volumes:
      - n8n_data:/home/node/.n8n
    expose:
      - "5678"
    depends_on:
      postgres:
        condition: service_healthy

  n8n-runner:
    image: n8nio/runners:${N8N_VERSION}
    restart: unless-stopped
    environment:
      N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
      N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
    depends_on:
      - n8n

  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    environment:
      N8N_HOST: ${N8N_HOST}
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - n8n

volumes:
  postgres_data:
    name: n8n_postgres_data
  n8n_data:
    name: n8n_data
  caddy_data:
    name: n8n_caddy_data
  caddy_config:
    name: n8n_caddy_config

Task runner-ul extern execută codul separat de procesul principal n8n. Este mai sigur decât modul intern și reduce riscul ca o eroare dintr-un Code node să afecteze editorul și procesarea webhookurilor.

4. Activează HTTPS

Creează Caddyfile:

{$N8N_HOST} {
    reverse_proxy n8n:5678
}

Caddy va obține automat un certificat TLS dacă DNS-ul indică deja spre VPS și porturile 80 și 443 sunt accesibile. Portul intern 5678 nu este expus pe internet: extern sunt disponibile doar porturile 80 și 443, iar Caddy accesează n8n prin rețeaua Docker.

Variabilele N8N_WEBHOOK_URL și N8N_PROXY_HOPS sunt necesare pentru ca editorul să genereze adrese publice corecte pentru webhookuri și să aibă încredere în headerele unui singur reverse proxy.

5. Pornește n8n

Validează configurația finală și pornește containerele:

docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddy

Deschide:

https://n8n.example.com

Creează contul proprietarului. Nu-i distribui parola colegilor: pentru lucru în echipă, folosește conturi separate și acordă fiecărei persoane doar accesul necesar.

Primul tău workflow util

Un test bun este procesarea unei solicitări de pe un site:

  1. Adaugă un nod Webhook cu metoda POST.
  2. Folosește Edit Fields pentru a păstra doar numele, adresa de email și sursa.
  3. Folosește un nod If pentru a respinge solicitările fără datele obligatorii.
  4. Creează o ofertă în CRM sau trimite solicitarea prin HTTP Request.
  5. Adaugă o notificare Telegram.
  6. Încheie lanțul cu un nod Respond to Webhook.
  7. După testare, activează workflow-ul și înlocuiește webhookul de test cu URL-ul de producție.

Acest exemplu verifică imediat domeniul, HTTPS-ul, solicitările primite, credențialele și integrarea externă. Apoi adaugă un Error Workflow separat, care să te anunțe când lanțul principal eșuează.

Securizarea n8n după instalare

O instanță n8n instalată nu este automat și una fiabilă. După lansare, verifică următoarele:

  • editorul este accesibil doar prin HTTPS;
  • .env are permisiuni 600 și nu este comis în Git;
  • cheile API externe au numai permisiunile necesare;
  • fiecare webhook verifică semnătura sau secretul sursei;
  • istoricul execuțiilor este șters automat;
  • erorile din workflowurile critice sunt trimise administratorului.

Community nodes sunt instalate ca pachete și pot avea acces la datele workflowurilor și la server. Nu adăuga noduri necunoscute fără să le analizezi. Dacă nu ai nevoie de ele, dezactivează-le cu N8N_COMMUNITY_PACKAGES_ENABLED=false.

Rulează auditul integrat:

docker compose exec n8n n8n audit

Acesta ajută la identificarea webhookurilor neprotejate, nodurilor riscante și problemelor cu credențialele, dar nu înlocuiește o verificare manuală.

Istoricul execuțiilor și datele personale

n8n stochează datele de intrare și de ieșire pentru depanare. Împreună cu acestea pot rămâne în baza de date mesaje email, numere de telefon, documente și răspunsuri API.

În configurația de mai sus, execuțiile sunt șterse după șapte zile, iar numărul lor este limitat la 10.000. Pentru procese sensibile, alege perioada de păstrare conform politicii de retenție a datelor și elimină câmpurile inutile înainte de finalizarea workflowului.

Backupuri și actualizări

Pentru recuperare sunt necesare un dump PostgreSQL, volumul n8n_data, fișierele de configurare și .env care conține N8N_ENCRYPTION_KEY. Înainte de copiere, oprește procesoarele și lasă PostgreSQL să ruleze. Astfel apare o scurtă întrerupere a executării workflowurilor:

cd /opt/n8n
mkdir -p backup
docker compose stop n8n n8n-runner

docker compose exec -T postgres sh -c \
  'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' \
  | gzip > "backup/n8n-db-$(date +%F).sql.gz"

docker run --rm \
  -v n8n_data:/source:ro \
  -v "$PWD/backup":/backup \
  alpine sh -c \
  'tar -czf /backup/n8n-data-$(date +%F).tar.gz -C /source .'

tar -czf "backup/n8n-config-$(date +%F).tar.gz" \
  .env compose.yaml Caddyfile

docker compose start n8n n8n-runner

Arhiva care conține .env include secrete: cripteaz-o și stocheaz-o în afara VPS-ului. Verifică periodic backupul efectuând o restaurare de test.

Înainte de actualizare, fă un backup și citește informațiile despre versiune:

cd /opt/n8n
docker compose pull
docker compose up -d
docker compose ps

Task runner-ul și containerul principal trebuie să folosească aceeași etichetă de versiune.

Când devine necesară scalarea

Nu începe cu Redis și mai mulți workeri înainte să existe o încărcare reală. O singură instanță cu PostgreSQL este mai ușor de întreținut și acoperă de obicei procesele interne mici.

Queue mode devine necesar când sarcinile lungi întârzie webhookurile, multe workflowuri pornesc simultan sau procesarea fișierelor consumă regulat toată memoria disponibilă. În această configurație, instanța principală primește evenimentele, Redis distribuie joburile, iar workerii le execută în paralel. Toate componentele trebuie să se conecteze la aceeași bază PostgreSQL și să folosească aceeași N8N_ENCRYPTION_KEY.

Ce VPS să alegi pentru n8n

Pentru n8n, PostgreSQL, Caddy și task runner împreună, este rezonabil să începi cu 2 vCPU, 4 GB RAM și un disc NVMe. Pe tropic.host, planul Light corespunde acestei configurații: 2 vCPU, 4 GB RAM și 25 GB NVMe. Este suficient pentru primele workflowuri de producție fără procesare intensă a fișierelor.

Pentru documente, seturi mari de date și multe workflowuri AI simultane, 8 GB RAM sunt o alegere mai bună. Și o rețea stabilă este importantă: webhookurile, callbackurile OAuth și joburile programate trebuie să rămână disponibile permanent.

Concluzie

n8n transformă operațiunile repetitive în fluxuri vizuale clare: nodurile gata făcute grăbesc lansarea, HTTP Request conectează aproape orice API, iar un Code node îți permite să adaugi propria logică.

Versiunea self-hosted îți oferă control asupra serverului și bazei de date, dar necesită HTTPS, chei cu permisiuni limitate, curățarea istoricului și backupuri verificate. Păstrează N8N_ENCRYPTION_KEY împreună cu PostgreSQL: fără ea, credențialele restaurate nu pot fi decriptate.

FAQ

Poate fi folosit n8n gratuit?

Da. Community Edition poate fi găzduită gratuit pe propriul server pentru procese personale și interne. Revânzarea n8n găzduit ca SaaS independent este restricționată de licența fair-code.

Se poate instala n8n fără domeniu?

Pentru testare locală, da. Pentru webhookuri publice și OAuth, este mai bine să folosești un domeniu și HTTPS.

De cât RAM are nevoie n8n?

Workflowurile personale simple rulează adesea cu 2 GB RAM. Pentru n8n cu PostgreSQL, Caddy și task runner, 4 GB sunt mai potriviți; fișierele și execuțiile simultane pot necesita 8 GB sau mai mult.

Toate datele rămân în VPS?

Doar datele pe care workflowul nu le trimite în altă parte. Baza de date și istoricul execuțiilor sunt stocate pe VPS, dar nodurile Telegram, CRM sau modelele AI externe trimit datele selectate către serviciul corespunzător.

Ce trebuie inclus într-un backup n8n?

Un dump PostgreSQL, volumul n8n_data, compose.yaml, Caddyfile și .env care conține N8N_ENCRYPTION_KEY. Stochează backupul în afara VPS-ului, criptat, și verifică-l prin restaurare.