طرح در بخش ۵ از docs/architecture/23-ops.md آمده است. Vercel فقط web tier را اجرا میکند. همهچیز دیگر روی میزبان همکار شما اجرا میشود و اختیاری نیست.
وضعیت در این انتشار
پیکربندی آماده است (apps/web/vercel.json، preset نیتروی vercel و بررسیهای هنگام راهاندازی). Vercel به ذخیرهسازی مشترک فایل نیاز دارد (QUIRE_STORAGE_DRIVER=s3 یا azure)، driver بلادرنگی که میان نمونههای function کار کند (QUIRE_REALTIME_DRIVER=sse یا centrifugo) و ارائهدهندهٔ ایمیل HTTP. بدون اینها web tier از آغاز سر باز میزند و گزارشش هر تنظیمِ گمشده را نام میبرد.
اجزا
جزء
محل اجرا
web
Vercel Functions و محیط Node: صفحهها، REST، MCP، LTI و وبهوکهای دریافتی
worker، scheduler، collab، content
میزبان همکار: Fly، Railway، ECS یا میزبان Docker خودتان با docker/compose.yaml
Postgres
بیرونی، پشت transaction pooler: Neon، Supabase یا RDS با PgBouncer
فایلها
S3 یا R2؛ دیسک پایدار وجود ندارد
کارهای پسزمینه
با pg-boss در transaction درخواست صف میشوند و worker همکار اجراشان میکند. اگر در worker همکار QUIRE_QUEUE_DRIVER=vercel باشد، کارهای سبک (اعلانهای بیترتیب و تحویل وبهوک) از Vercel Queues میگذرند (VERCEL_QUEUE_REGION، VERCEL_QUEUE_TOKEN) تا برایشان Postgres پول نمیشود
کارهای دورهای
scheduler همکار. مسیر Vercel Cron نداریم، چون cronای که در function کار میکند timeout میشود
رهگیری
OpenTelemetry به گردآورندهٔ شما، OTEL_EXPORTER_OTLP_ENDPOINT
کارهایی که این مقصد نمیتواند انجام دهد
web tier هنگام راهاندازی موردهای زیر را میسنجد و هر مشکل را نام میبرد و از آغاز سر باز میزند؛ این بهتر از شکست در اولین ایمیلی است که هرگز ارسال نمیشود:
SMTP وجود ندارد. Vercel خروجی SMTP را مسدود میکند. QUIRE_EMAIL_PROVIDER_CONFIG را روی ارائهدهندهٔ HTTP بگذارید (Postmark، SES، Mailgun، SendGrid یا Resend). QUIRE_SMTP_URL رد میشود.
دیسک محلی وجود ندارد.QUIRE_STORAGE_DRIVER=local رد میشود.
حافظه میان فراخوانیها مشترک نیست.QUIRE_REALTIME_DRIVER=inprocess رد میشود. جریان رویدادِ ارسالی از سرور تا timeout تابع محدود است؛ مشتری با cursor دوباره وصل میشود، پس رویدادی گم نمیشود، اما حضور در دسترس نیست.
تعداد پایگاه دادهٔ tenantهای سنجاقشده محدود است و حدود هشت پایگاه میشود، چون هرکدام در محیطی که poolها را شریک نمیشود یک connection pool دیگر میافزاید.
استقرار
از مخزن پروژهای در Vercel بسازید و Root Directory را apps/web بگذارید. apps/web/vercel.json فرمان نصب و ساخت را تعیین میکند (NITRO_PRESET=vercel) و /sw.js را بدون cache ارائه میدهد.
متغیرهای محیطی را تنظیم کنید. دستکم این موارد را از docker/.env.example بگیرید: QUIRE_DEPLOY_TARGET=vercel، QUIRE_APP_ORIGIN، QUIRE_CONTENT_ORIGIN، QUIRE_PLATFORM_DOMAINS، QUIRE_SECRET_KEY، QUIRE_MASTER_KEY، DATABASE_URL (نشانی pooler)، 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 ثبت کنید. اگر نشانی گزارش آن پایگاه نباشد، analytics با حالت ایمنِ بسته شکست میخورد.
در میزبان همکار docker/compose.yaml را بدون سرویس web و با همان docker/.env اجرا کنید:
migrationها پیش از ارتقای هر استقرار Vercel همانجا اجرا میشوند.
استقرار دهید. اگر پیکربندی رد شود، گزارش function با «The web tier did not start on vercel» آغاز و هر تنظیم نیازمند تغییر را فهرست میکند.
ارتقا
ابتدا از میزبان همکار migration را انجام دهید، سپس استقرار تازهٔ Vercel را فعال کنید و بعد workerهای همکار را بچرخانید؛ ترتیب در upgrade.md آمده است. بازگردانی فوری Vercel بازگردانی کد است و درون یک انتشار همیشه ایمن است.