Tropic Host

n8n: מה זה ואיך להתקין אותו על VPS עם Docker Compose

3 דקות קריאה
Tropic
n8n: מה זה ואיך להתקין אותו על VPS עם Docker Compose

Language: he

n8n על VPS: פלטפורמת אוטומציה משלכם בלי עבודה ידנית מיותרת

בקשה מגיעה מהאתר. n8n מאמת את הנתונים, בודק כפילויות, יוצר עסקה, מכין תשובת טיוטה בעזרת AI ומיידע את המנהל ב-Telegram. אדם מתערב רק כשנדרשת החלטה — לא כדי להעביר נתונים בין לשוניות בדפדפן.

להלן נראה כיצד n8n עובד וכיצד להתקין אותו על VPS עם Docker Compose, PostgreSQL, HTTPS והרצת קוד מבודדת.

n8n בשבעה שלבים

תוכנית מינימלית להפעלה:

  1. צרו VPS והפנו אליו תת-דומיין, למשל n8n.example.com.
  2. התקינו Docker ו-Docker Compose.
  3. הפעילו n8n עם PostgreSQL, מריץ משימות חיצוני ו-Caddy.
  4. פתחו את הממשק ב-HTTPS וצרו חשבון בעלים.
  5. חברו את Telegram, מערכת CRM, דואר אלקטרוני או כל API חיצוני.
  6. הגדירו טיפול בשגיאות ושמירת נתוני הרצות.
  7. הפכו את גיבוי מסד הנתונים, הנתונים ומפתח ההצפנה לאוטומטי.

להתקנה קטנה בסביבת production, התחלה עם 2 vCPU ו-4 GB RAM היא סבירה. לעיתים 2 GB מספיקים לבדיקות, אך PostgreSQL, Docker ותהליכים מקבילים צורכים במהירות את מרווח המשאבים שנותר.

מהו n8n ואיך הוא עובד

n8n היא פלטפורמה לאוטומציית תהליכי עבודה. תהליך מורכב מצמתים: צומת אחד מתחיל את התהליך, הצמתים הבאים שולפים ומשנים נתונים, והצומת האחרון מבצע פעולה.

תהליך פשוט נראה כך:

Webhook → data validation → CRM → Telegram → website response

אפשר להפעיל שרשרת באמצעות webhook, לוח זמנים, דואר אלקטרוני, הודעה או אירוע בשירות חיצוני. בין הצמתים זמינים תנאים, לולאות, מסננים, המתנות וטיפול בשגיאות.

אחד היתרונות של n8n הוא שהאוטומציה אינה מוגבלת לאינטגרציות מוכנות. אפשר לקרוא לכל שירות עם API באמצעות HTTP Request, ואילו לוגיקה מותאמת אישית אפשר לכתוב בצומת Code באמצעות JavaScript או Python. כך n8n נמצאת בין בונה no-code פשוט לבין קוד צד-שרת מותאם אישית.

למה זה יותר מהעברת נתונים

n8n שימושית כאשר תהליך עובר בין כמה מערכות ודורש החלטה:

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

אפשר להשאיר אדם רק בנקודת הבקרה. לדוגמה, AI מכינה תשובה, אך ההודעה נשלחת ללקוח רק לאחר שעובד מאשר אותה.

מקרי שימוש נפוצים:

  • מכירות ותמיכה: איסוף פניות, הקצאת לידים ויצירת עסקאות;
  • תוכן ו-AI: יצירת טיוטות, סיווג פניות ופרסום לאחר אישור;
  • DevOps: התראות על תקלות, Git webhooks ובדיקות API;
  • תפעול פנימי: סנכרון גיליונות, דואר, לוחות שנה ומערכות ארגוניות.

התקנה באירוח עצמי נותנת לכם שליטה על התהליך ועל מסד הנתונים, אך היא אינה הופכת שירותים חיצוניים למקומיים. נתונים שנשלחים ל-Telegram, ל-CRM או למודל AI בענן יוצאים מה-VPS.

n8n Cloud או שרת משלכם

פרמטרn8n Cloudn8n על VPS
הפעלהאין צורך בהגדרת שרתנדרשים דומיין, Docker ו-HTTPS
עדכוניםמטופלים על ידי n8nמטופלים על ידי הבעלים
מסד נתונים וקבציםבתשתית השירותבשרת שנבחר
הרחבהלפי תוכנית הענןמוגדרת באופן עצמאי
אחריותפחות ניהולגיבויים, אבטחה וניטור באחריות הבעלים
מתאים במיוחד להתחלה מהירה ללא DevOpsשליטה, התאמה אישית ותהליכים שפועלים תמיד

Community Edition ניתנת לאירוח עצמי ללא תשלום ולהפעלה עבור תהליכים אישיים ופנימיים של העסק. עם זאת, n8n מופצת לא תחת רישיון קוד פתוח מסורתי, אלא תחת רישיון fair-code בשם Sustainable Use License. הוא מאפשר שימוש פנימי ושינוי, אך אינו מאפשר פשוט לפרוס n8n, להוסיף לוגו משלכם ולמכור גישה כ-SaaS עצמאי. עבור מוצר כזה יש לבדוק את תנאי הרישיון בנפרד.

דרישות השרת של n8n

העומס תלוי בכמות הנתונים, במקביליות ובסוג הפעולות. קבצים, רשימות ארוכות, צמתי Code ותהליכי AI דורשים יותר זיכרון מהעברת מטעני JSON קטנים בין APIs.

תרחישתצורת התחלה
בדיקות ותהליכי טקסט אישיים1 vCPU, 2 GB RAM, 20 GB NVMe
התקנת production קטנה2 vCPU, 4 GB RAM, 25–40 GB NVMe
תהליכים מקבילים, AI או קבצים4 vCPU, 8 GB RAM או יותר
כמה תהליכי worker במצב queueהתאמה לפי נפח ההרצות

SQLite מתאימה ללמידה ולהתקנה קטנה עם מופע יחיד. PostgreSQL נוחה יותר ל-production: קל יותר לגבות אותה, והמעבר למצב queue בהמשך פשוט יותר.

איך להתקין n8n על VPS

בדוגמה נעשה שימוש ב-Ubuntu 24.04, PostgreSQL, Caddy ומריץ משימות חיצוני. החליפו את n8n.example.com ואת אזור הזמן בערכים משלכם.

1. הגדרת DNS והכנת השרת

צרו רשומת DNS מסוג A שמצביעה לכתובת ה-IPv4 של ה-VPS, ולאחר מכן התחברו ב-SSH:

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

התקינו את Docker Engine ואת תוסף Compose מהמאגר הרשמי:

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

אפשרו רק SSH, HTTP ו-HTTPS:

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

אל תסגרו את חיבור ה-SSH הנוכחי עד שתוודאו שחיבור חדש עובד.

2. יצירת משתני סביבה

הכינו את התיקייה:

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

צרו את .env. הפקודות הבאות מייצרות מיד סודות אקראיים נפרדים עבור PostgreSQL, הצפנת n8n ומריץ המשימות:

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

תג stable נוח להפעלה ראשונה. לאחר שתוודאו שההתקנה עובדת, עדיף לנעוץ גרסת n8n מסוימת כדי שעדכון התמונה הבא לא יתרחש באופן בלתי צפוי.

אסור לאבד את N8N_ENCRYPTION_KEY. n8n משתמשת במפתח כדי להצפין סיסמאות, טוקנים ופרטי גישה אחרים שנשמרו. אם תשחזרו רק את PostgreSQL ללא המפתח, הרשומות יישארו במסד הנתונים, אך n8n לא תוכל לקרוא אותן.

3. יצירת קובץ Docker Compose

צרו את 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

מריץ המשימות החיצוני מבצע קוד בנפרד מתהליך n8n הראשי. זה בטוח יותר ממצב פנימי ומפחית את הסיכון ששגיאה בצומת Code תשפיע על העורך ועל עיבוד ה-webhook.

4. הפעלת HTTPS

צרו את Caddyfile:

{$N8N_HOST} {
    reverse_proxy n8n:5678
}

Caddy תשיג תעודת TLS באופן אוטומטי אם ה-DNS כבר מצביע ל-VPS והפורטות 80 ו-443 נגישות. פורט 5678 הפנימי אינו חשוף לאינטרנט: מבחוץ זמינים רק הפורטים 80 ו-443, בעוד Caddy ניגשת ל-n8n דרך רשת Docker.

המשתנים N8N_WEBHOOK_URL ו-N8N_PROXY_HOPS נדרשים כדי שהעורך ייצור כתובות webhook ציבוריות נכונות וייתן אמון בכותרות מ-proxy הפוך אחד.

5. הפעלת n8n

אמתו את התצורה הסופית והפעילו את הקונטיינרים:

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

פתחו:

https://n8n.example.com

צרו את חשבון הבעלים. אל תשתפו את הסיסמה שלו עם עמיתים: לעבודה בצוות השתמשו בחשבונות נפרדים והעניקו לכל אדם רק את הגישה הדרושה לו.

תהליך העבודה השימושי הראשון שלכם

בדיקה טובה היא עיבוד פנייה מאתר:

  1. הוסיפו צומת Webhook עם שיטת POST.
  2. השתמשו ב-Edit Fields כדי להשאיר רק את השם, כתובת הדואר והמקור.
  3. השתמשו בצומת If כדי לדחות פנייה שחסרים בה נתונים חובה.
  4. צרו עסקה ב-CRM או שלחו בקשה באמצעות HTTP Request.
  5. הוסיפו התראת Telegram.
  6. סיימו את השרשרת בצומת Respond to Webhook.
  7. לאחר הבדיקה הפעילו את התהליך והחליפו את webhook הבדיקה בכתובת ה-production.

דוגמה זו בודקת מיד את הדומיין, HTTPS, בקשות נכנסות, פרטי גישה ואינטגרציה חיצונית. לאחר מכן הוסיפו Error Workflow נפרד שיודיע לכם כשהשרשרת הראשית נכשלת.

אבטחת n8n לאחר ההתקנה

מופע n8n מותקן אינו הופך אוטומטית לאמין. לאחר ההפעלה ודאו כי:

  • העורך נגיש רק דרך HTTPS;
  • ל-.env יש הרשאות 600 והוא אינו נשמר ב-Git;
  • למפתחות API חיצוניים יש את ההרשאות המינימליות הנדרשות;
  • כל webhook מאמת את חתימת המקור או את הסוד שלו;
  • היסטוריית ההרצות נמחקת אוטומטית;
  • שגיאות בתהליכים קריטיים נשלחות למנהל.

צמתי קהילה מותקנים כחבילות ועלולים לקבל גישה לנתוני התהליכים ולשרת. אל תוסיפו צמתים לא מוכרים בלי לבדוק אותם. אם אין בהם צורך, השביתו אותם באמצעות N8N_COMMUNITY_PACKAGES_ENABLED=false.

הריצו את הביקורת המובנית:

docker compose exec n8n n8n audit

היא מסייעת לזהות webhooks לא מוגנים, צמתים מסוכנים ובעיות בפרטי גישה, אך אינה מחליפה בדיקה ידנית.

היסטוריית הרצות ונתונים אישיים

n8n שומרת נתוני קלט ופלט לצורך ניפוי באגים. יחד איתם עלולים להישאר במסד הנתונים הודעות דואר, מספרי טלפון, מסמכים ותשובות API.

בתצורה שלמעלה, הרצות נמחקות לאחר שבעה ימים ומספרן מוגבל ל-10,000. לתהליכים רגישים, בחרו את תקופת השמירה לפי מדיניות שמירת הנתונים שלכם והסירו שדות מיותרים לפני סיום התהליך.

גיבויים ועדכונים

לשחזור נדרשים dump של PostgreSQL, ה-volume בשם n8n_data, קובצי התצורה ו-.env שמכיל את N8N_ENCRYPTION_KEY. לפני ההעתקה עצרו את המעבדים והשאירו את PostgreSQL פועל. כך נוצרת הפסקה קצרה בביצוע תהליכים:

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

הארכיון שמכיל את .env כולל סודות: הצפינו אותו ושמרו אותו מחוץ ל-VPS. אמתו את הגיבוי מדי פעם באמצעות שחזור בדיקה.

לפני עדכון, צרו גיבוי ועיינו בהערות הגרסה:

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

מריץ המשימות והקונטיינר הראשי חייבים להשתמש באותו תג גרסה.

מתי נדרשת הרחבה

אל תתחילו עם Redis וכמה workers לפני שיש עומס אמיתי. מופע יחיד עם PostgreSQL קל יותר לתחזוקה ובדרך כלל מספיק לתהליכים פנימיים קטנים.

מצב queue נעשה נחוץ כאשר משימות ארוכות מעכבות webhooks, תהליכים רבים מתחילים בו-זמנית או שעיבוד קבצים צורך באופן קבוע את כל הזיכרון הזמין. במצב זה המופע הראשי מקבל אירועים, Redis מפיצה עבודות ו-workers מבצעים אותן במקביל. כל הרכיבים חייבים להתחבר לאותו מסד PostgreSQL ולהשתמש באותו N8N_ENCRYPTION_KEY.

איזה VPS לבחור עבור n8n

עבור n8n, PostgreSQL, Caddy ומריץ משימות יחד, התחלה עם 2 vCPU, 4 GB RAM וכונן NVMe היא סבירה. ב-tropic.host, תוכנית Light תואמת לתצורה הזו: 2 vCPU, 4 GB RAM ו-25 GB NVMe. זה מספיק לתהליכי production ראשונים ללא עיבוד קבצים כבד.

למסמכים, מערכי נתונים גדולים ותהליכי AI מקבילים רבים, 8 GB RAM הם בחירה טובה יותר. גם רשת יציבה חשובה: webhooks, callbacks של OAuth ומשימות מתוזמנות חייבים להישאר זמינים כל הזמן.

סיכום

n8n הופכת פעולות חוזרות לזרימות חזותיות ברורות: צמתים מוכנים מאיצים את ההשקה, HTTP Request מחבר כמעט כל API וצומת Code מאפשר להוסיף לוגיקה משלכם.

הגרסה באירוח עצמי נותנת שליטה על השרת ועל מסד הנתונים, אך דורשת HTTPS, מפתחות מוגבלים, ניקוי היסטוריה וגיבויים מאומתים. שמרו את N8N_ENCRYPTION_KEY יחד עם PostgreSQL: בלעדיו לא ניתן לפענח פרטי גישה ששוחזרו.

FAQ

האם אפשר להשתמש ב-n8n בחינם?

כן. ניתן לארח את Community Edition ללא תשלום בשרת שלכם עבור תהליכים אישיים ופנימיים. מכירה חוזרת של n8n מאוחסנת כ-SaaS עצמאי מוגבלת על ידי רישיון ה-fair-code.

האם אפשר להתקין n8n ללא דומיין?

לבדיקות מקומיות כן. עבור webhooks ציבוריים ו-OAuth עדיף להשתמש בדומיין וב-HTTPS.

כמה RAM n8n צריכה?

תהליכים אישיים פשוטים פועלים לעיתים עם 2 GB RAM. עבור n8n עם PostgreSQL, Caddy ומריץ משימות, 4 GB הגיוניים יותר; קבצים והרצות מקבילות עלולים לדרוש 8 GB או יותר.

האם כל הנתונים נשארים בתוך ה-VPS?

רק נתונים שהתהליך אינו שולח החוצה. מסד הנתונים והיסטוריית ההרצות נשמרים ב-VPS, אך צמתים של Telegram, CRM או מודל AI חיצוני שולחים את הנתונים שנבחרו לשירות המתאים.

מה צריך לכלול בגיבוי של n8n?

dump של PostgreSQL, את ה-volume n8n_data, את compose.yaml, את Caddyfile ואת .env שמכיל את N8N_ENCRYPTION_KEY. שמרו את הגיבוי מוצפן מחוץ ל-VPS ואמתו אותו באמצעות שחזור.