---
title: "web tier در Vercel"
description: "web tier کوایر را همراه worker همکار روی Vercel اجرا کنید."
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/fa/llms.txt
> Use this file to discover all available pages before exploring further.

# web tier در Vercel

<span id="the-web-tier-on-vercel"></span>

طرح در بخش ۵ از `docs/architecture/23-ops.md` آمده است. Vercel فقط web tier را اجرا می‌کند. همه‌چیز دیگر روی میزبان همکار شما اجرا می‌شود و اختیاری نیست.

## وضعیت در این انتشار <!--quire:status-in-this-release-->

پیکربندی آماده است (`apps/web/vercel.json`، preset نیتروی `vercel` و بررسی‌های هنگام راه‌اندازی). Vercel به ذخیره‌سازی مشترک فایل نیاز دارد (`QUIRE_STORAGE_DRIVER=s3` یا `azure`)، driver بلادرنگی که میان نمونه‌های function کار کند (`QUIRE_REALTIME_DRIVER=sse` یا `centrifugo`) و ارائه‌دهندهٔ ایمیل HTTP. بدون این‌ها web tier از آغاز سر باز می‌زند و گزارشش هر تنظیمِ گمشده را نام می‌برد.

## اجزا <!--quire:the-pieces-->

| جزء | محل اجرا |
| --- | --- |
| `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` |

## کارهایی که این مقصد نمی‌تواند انجام دهد <!--quire:what-this-target-cannot-do-->

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 دیگر می‌افزاید.

## استقرار <!--quire:deploying-->

1. از مخزن پروژه‌ای در Vercel بسازید و **Root Directory** را `apps/web` بگذارید. `apps/web/vercel.json` فرمان نصب و ساخت را تعیین می‌کند (`NITRO_PRESET=vercel`) و `/sw.js` را بدون cache ارائه می‌دهد.
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` (نشانی 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 با حالت ایمنِ بسته شکست می‌خورد.
3. در میزبان همکار `docker/compose.yaml` را بدون سرویس `web` و با همان `docker/.env` اجرا کنید:
   ```sh
   docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
   ```
   migrationها پیش از ارتقای هر استقرار Vercel همان‌جا اجرا می‌شوند.
4. استقرار دهید. اگر پیکربندی رد شود، گزارش function با «The web tier did not start on vercel» آغاز و هر تنظیم نیازمند تغییر را فهرست می‌کند.

## ارتقا <!--quire:upgrading-->

ابتدا از میزبان همکار migration را انجام دهید، سپس استقرار تازهٔ Vercel را فعال کنید و بعد workerهای همکار را بچرخانید؛ ترتیب در [upgrade.md](/fa/ops/upgrade/) آمده است. بازگردانی فوری Vercel بازگردانی کد است و درون یک انتشار همیشه ایمن است.

Source: https://docs.quirelms.com/fa/ops/vercel/index.mdx
