---
title: "Web tier sa Vercel"
description: "Patakbuhin ang web tier ng Quire sa Vercel kasama ang kasamang worker."
image: "https://docs.quirelms.com/og.png"
---

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

# Web tier sa Vercel

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

Nasa seksiyon 5 ng `docs/architecture/23-ops.md` ang disenyo. Web tier lang
ang pinapatakbo ng Vercel. Tumatakbo sa kasamang host na pinangangasiwaan mo ang
lahat ng iba pa; kailangan ito.

## Katayuan sa release na ito <!--quire:status-in-this-release-->

Nakahanda na ang configuration (`apps/web/vercel.json`, ang `vercel` Nitro
preset, at mga startup check). Kailangan ng Vercel ang shared file storage
(`QUIRE_STORAGE_DRIVER=s3` o `azure`), realtime driver na gumagana sa iba't ibang
function instance (`QUIRE_REALTIME_DRIVER=sse` o `centrifugo`), at HTTP email
provider. Kapag wala ang mga ito, tatanggi ang web tier na magsimula at ililista
ng log ang bawat nawawalang setting.

## Mga bahagi <!--quire:the-pieces-->

| Bahagi | Saan tumatakbo |
| --- | --- |
| `web` | Vercel Functions, Bun runtime: mga pahina, REST, MCP, LTI, natanggap na webhook |
| `worker`, `scheduler`, `collab`, `content` | Kasamang host: Fly, Railway, ECS, o sarili mong Docker host na may `docker/compose.yaml` |
| Postgres | External, nasa likod ng transaction pooler: Neon, Supabase, o RDS na may PgBouncer |
| Files | S3 o R2. Walang persistent disk |
| Mga background job | Ipinipila sa loob ng transaction ng request gamit ang pg-boss at pinapatakbo ng kasamang worker. Kapag `QUIRE_QUEUE_DRIVER=vercel` sa companion worker, ipinadaraan sa Vercel Queues (`VERCEL_QUEUE_REGION`, `VERCEL_QUEUE_TOKEN`) ang magaang trabaho (walang pagkakasunod na notification at webhook delivery) upang hindi ito i-poll sa pooled Postgres |
| Mga paulit-ulit na trabaho | Ang scheduler ng kasamang host. Walang Vercel Cron route dahil nagti-time out ang cron na gumagawa ng trabaho sa function |
| Tracing | OpenTelemetry papunta sa collector mo, `OTEL_EXPORTER_OTLP_ENDPOINT` |

## Hindi kayang gawin ng target na ito <!--quire:what-this-target-cannot-do-->

Sinusuri ito ng web tier sa pagsisimula at tumatanggi, inililista ang lahat ng
problema, sa halip na pumalya sa unang email na hindi naipadala:

- **Walang SMTP.** Hinaharang ng Vercel ang palabas na SMTP. Itakda ang
  `QUIRE_EMAIL_PROVIDER_CONFIG` sa HTTP provider (Postmark, SES, Mailgun,
  SendGrid, o Resend). Tinatanggihan ang `QUIRE_SMTP_URL`.
- **Walang lokal na disk.** Tinatanggihan ang `QUIRE_STORAGE_DRIVER=local`.
- **Walang shared memory sa pagitan ng invocation.** Tinatanggihan ang
  `QUIRE_REALTIME_DRIVER=inprocess`. Nililimitahan ng timeout ng function ang
  server-sent event; muling kumokonekta ang client gamit ang cursor kaya walang
  nawawalang event, ngunit hindi available ang presence.
- **Mga walong pinned tenant database lang** dahil nagdaragdag ang bawat isa ng
  connection pool sa environment na hindi nakapaghahati ng pool.

## Pag-deploy <!--quire:deploying-->

1. Gumawa ng Vercel project mula sa repository at itakda ang **Root Directory**
   sa `apps/web`. Itinatakda ng `apps/web/vercel.json` ang install at build command
   (`NITRO_PRESET=vercel`) at sine-serve ang `/sw.js` nang walang cache.
2. Itakda ang mga environment variable. Mula sa `docker/.env.example`, kailangan
   man lang ang: `QUIRE_DEPLOY_TARGET=vercel`, `QUIRE_APP_ORIGIN`,
   `QUIRE_CONTENT_ORIGIN`, `QUIRE_PLATFORM_DOMAINS`, `QUIRE_SECRET_KEY`,
   `QUIRE_MASTER_KEY`, `DATABASE_URL` (address ng pooler),
   `QUIRE_REPORT_DATABASE_URL`, `QUIRE_AUDIT_DATABASE_URL`, `QUIRE_DATABASE_ID`,
   `QUIRE_EMAIL_PROVIDER_CONFIG`, `QUIRE_MAIL_FROM`, mga setting ng storage, at
   `QUIRE_COLLAB_URL` at `QUIRE_COLLAB_SIGNING_KEY` na nakaturo sa collab service
   ng kasamang host.
   Nakatali ang `QUIRE_REPORT_DATABASE_URL` sa pisikal na database na pinangalanan
   ng `DATABASE_URL`. Para sa bawat dagdag na rehistradong database,
   idagdag ang sarili nitong `quire_report` connection URL sa environment ng web at
   worker, saka irehistro sa platform console ang pangalan nito bilang `env:NAME`.
   Hihinto nang ligtas ang analytics kapag nawawala ang report URL ng database.
3. Sa kasamang host, patakbuhin ang `docker/compose.yaml` nang walang `web`
   service at gamit ang parehong `docker/.env`:
   ```sh
   docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
   ```
   Tumatakbo roon ang migration bago i-promote ang bawat Vercel deployment.
4. Mag-deploy. Kapag tinanggihan ang configuration, magsisimula ang function log
   sa “The web tier did not start on vercel” at ililista ang mga setting na dapat baguhin.

## Pag-upgrade <!--quire:upgrading-->

Mag-migrate muna mula sa kasamang host, saka i-promote ang bagong Vercel deployment
at i-roll ang mga worker ng kasama; nasa [upgrade.md](/fil/ops/upgrade/) ang pagkakasunod.
Ligtas sa loob ng isang release ang agarang rollback sa Vercel dahil code lang ito.

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