התכנון נמצא בסעיף 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. בלי אלה שכבת האינטרנט מסרבת לעלות והיומן שלה מציין כל הגדרה
חסרה.
מארח נלווה: 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 מוגבלים לכשמונה, מפני שכל אחד מוסיף מאגר
חיבורים נוסף בסביבה שאינה יכולה לשתף מאגרים.
פריסה
צרו פרויקט Vercel מהמאגר עם Root Directory בשם apps/web. הקובץ
apps/web/vercel.json מגדיר פקודות התקנה ובנייה (NITRO_PRESET=vercel) ומגיש
את /sw.js ללא מטמון.
הגדירו משתני סביבה. מתוך 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 מפסיק לפעול במקום להציג תוצאות לא אמינות.
במארח הנלווה הפעילו את docker/compose.yaml ללא שירות web, עם אותו docker/.env:
פרסו. בתצורה שנדחתה יומן ה-function מתחיל ב-“The web tier did not start on vercel”
ומפרט כל הגדרה שיש לשנות.
שדרוג
תחילה בצעו migrate במארח הנלווה, אחר כך קדמו את פריסת Vercel החדשה, ולבסוף העבירו
את עובדי המארח הנלווה, לפי הסדר שב-מדריך השדרוג. חזרה מיידית לאחור
ב-Vercel היא חזרה לאחור של הקוד ותמיד בטוחה בתוך אותה גרסה.