דילוג לתוכן

שכבת האינטרנט ב-Vercel

הפעילו את שכבת האינטרנט של Quire ב-Vercel עם worker נלווה.

הצגה כ-Markdown

התכנון נמצא בסעיף 5 של docs/architecture/23-ops.md. Vercel מפעיל רק את שכבת האינטרנט. כל השאר פועל במארח נלווה שאתם מנהלים, והוא הכרחי.

מצב בגרסה זו

התצורה מוכנה (apps/web/vercel.json, קביעת Nitro בשם vercel ובדיקות ההפעלה). Vercel זקוק לאחסון קבצים משותף (QUIRE_STORAGE_DRIVER=s3 או azure), ל-driver של realtime שעובד בין מופעי function (QUIRE_REALTIME_DRIVER=sse או centrifugo) ולספק דוא״ל דרך HTTP. בלי אלה שכבת האינטרנט מסרבת לעלות והיומן שלה מציין כל הגדרה חסרה.

הרכיבים

רכיב היכן פועל
web Vercel Functions, סביבת Node: עמודים, REST, MCP, LTI ו-webhooks נכנסים
worker, scheduler, collab, content מארח נלווה: Fly,‏ Railway,‏ ECS או מארח Docker משלכם עם docker/compose.yaml
Postgres חיצוני, מאחורי מאגר חיבורים לטרנזקציות: Neon,‏ Supabase או RDS עם PgBouncer
קבצים S3 או R2. אין דיסק קבוע
עבודות רקע נכנסות ל-pg-boss בתוך הטרנזקציה של הבקשה ומופעלות בידי העובד הנלווה. כאשר QUIRE_QUEUE_DRIVER=vercel מוגדר בעובד הנלווה, העבודות הקלות (שליחות notification ו-webhook שאינן לפי סדר) עוברות דרך Vercel Queues (VERCEL_QUEUE_REGION,‏ VERCEL_QUEUE_TOKEN), ולכן Postgres שבמאגר החיבורים אינו נשאל עליהן שוב ושוב
עבודות מחזוריות המתזמן הנלווה. אין נתיב Vercel Cron, כי cron שמבצע עבודה בתוך function פג זמנו
מעקב OpenTelemetry אל ה-collector שלכם, דרך OTEL_EXPORTER_OTLP_ENDPOINT

מה יעד זה אינו יכול לעשות

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

  • אין SMTP. Vercel חוסם SMTP יוצא. הגדירו את QUIRE_EMAIL_PROVIDER_CONFIG לספק HTTP (Postmark,‏ SES,‏ Mailgun,‏ SendGrid או Resend).‏ QUIRE_SMTP_URL נדחה.
  • אין דיסק מקומי. QUIRE_STORAGE_DRIVER=local נדחה.
  • אין זיכרון משותף בין הפעלות. QUIRE_REALTIME_DRIVER=inprocess נדחה. אירועים שנשלחים בזרם מוגבלים לזמן של ה-function; הלקוח מתחבר מחדש עם סמן, כך שאירוע לא הולך לאיבוד, אך נוכחות אינה זמינה.
  • מסדי נתונים מוצמדים של tenants מוגבלים לכשמונה, מפני שכל אחד מוסיף מאגר חיבורים נוסף בסביבה שאינה יכולה לשתף מאגרים.

פריסה

  1. צרו פרויקט Vercel מהמאגר עם Root Directory בשם apps/web. הקובץ apps/web/vercel.json מגדיר פקודות התקנה ובנייה (NITRO_PRESET=vercel) ומגיש את /sw.js ללא מטמון.
  2. הגדירו משתני סביבה. מתוך docker/.env.example, לפחות: QUIRE_DEPLOY_TARGET=vercel,‏ QUIRE_APP_ORIGIN,‏ QUIRE_CONTENT_ORIGIN,‏ QUIRE_PLATFORM_DOMAINS,‏ QUIRE_SECRET_KEY,‏ QUIRE_MASTER_KEY,‏ DATABASE_URL (כתובת מאגר החיבורים),‏ QUIRE_REPORT_DATABASE_URL,‏ QUIRE_AUDIT_DATABASE_URL,‏ QUIRE_DATABASE_ID,‏ QUIRE_EMAIL_PROVIDER_CONFIG,‏ QUIRE_MAIL_FROM, הגדרות האחסון, וכן QUIRE_COLLAB_URL ו-QUIRE_COLLAB_SIGNING_KEY שמצביעים לשירות collab במארח הנלווה. QUIRE_REPORT_DATABASE_URL שייך למסד הפיזי שמצוין ב-DATABASE_URL. לכל מסד נוסף שרשום, הוסיפו כתובת חיבור quire_report משלו לסביבות web ו-worker, ואז רשמו את שם משתנה הסביבה שלו כ-env:NAME במסוף הפלטפורמה. אם חסרה כתובת report לאותו מסד, Analytics מפסיק לפעול במקום להציג תוצאות לא אמינות.
  3. במארח הנלווה הפעילו את docker/compose.yaml ללא שירות web, עם אותו docker/.env:
    docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
    המיגרציות מתבצעות שם לפני קידום כל פריסת Vercel.
  4. פרסו. בתצורה שנדחתה יומן ה-function מתחיל ב-“The web tier did not start on vercel” ומפרט כל הגדרה שיש לשנות.

שדרוג

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

ניווט

הקלידו לחיפוש…

↑↓ ניווט↵ בחירהEsc סגירה