---
title: "Web tier di Vercel"
description: "Jalankan web tier Quire di Vercel dengan worker pendamping."
image: "https://docs.quirelms.com/og.png"
---

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

# Web tier di Vercel

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

Desainnya ada di `docs/architecture/23-ops.md`, bagian 5. Vercel hanya menjalankan web tier. Semua bagian lain berjalan di host pendamping yang Anda operasikan; host ini wajib tersedia.

## Status rilis ini <!--quire:status-in-this-release-->

Konfigurasi sudah tersedia (`apps/web/vercel.json`, preset Nitro `vercel`, dan pemeriksaan saat mulai). Vercel memerlukan penyimpanan berkas bersama (`QUIRE_STORAGE_DRIVER=s3` atau `azure`), driver realtime yang bekerja lintas instans fungsi (`QUIRE_REALTIME_DRIVER=sse` atau `centrifugo`), dan penyedia email HTTP. Tanpanya, web tier menolak mulai dan log menyebut setiap pengaturan yang belum tersedia.

## Komponen <!--quire:the-pieces-->

| Komponen | Tempat berjalan |
| --- | --- |
| `web` | Vercel Functions, runtime Node: halaman, REST, MCP, LTI, webhook masuk |
| `worker`, `scheduler`, `collab`, `content` | Host pendamping: Fly, Railway, ECS, atau host Docker Anda dengan `docker/compose.yaml` |
| Postgres | Eksternal, di balik pooler transaksi: Neon, Supabase, atau RDS dengan PgBouncer |
| Berkas | S3 atau R2. Tidak ada disk persisten |
| Pekerjaan latar belakang | Dimasukkan ke antrean pg-boss dalam transaksi permintaan, lalu dijalankan worker pendamping. Jika worker pendamping menggunakan `QUIRE_QUEUE_DRIVER=vercel`, pekerjaan ringan (notifikasi tanpa urutan dan pengiriman webhook) melewati Vercel Queues (`VERCEL_QUEUE_REGION`, `VERCEL_QUEUE_TOKEN`), sehingga Postgres yang dipool tidak disurvei untuk pekerjaan tersebut |
| Pekerjaan berulang | Scheduler pendamping. Tidak ada route Vercel Cron karena cron yang bekerja di dalam fungsi akan kehabisan waktu |
| Pelacakan | OpenTelemetry menuju collector Anda, `OTEL_EXPORTER_OTLP_ENDPOINT` |

## Hal yang tidak dapat dilakukan target ini <!--quire:what-this-target-cannot-do-->

Web tier memeriksa hal berikut saat mulai dan menolak konfigurasi sambil menyebut semua masalah, alih-alih baru gagal saat email pertama tidak terkirim:

- **Tidak ada SMTP.** Vercel memblokir SMTP keluar. Atur `QUIRE_EMAIL_PROVIDER_CONFIG` ke penyedia HTTP (Postmark, SES, Mailgun, SendGrid, atau Resend). `QUIRE_SMTP_URL` ditolak.
- **Tidak ada disk lokal.** `QUIRE_STORAGE_DRIVER=local` ditolak.
- **Tidak ada memori bersama antar-pemanggilan.** `QUIRE_REALTIME_DRIVER=inprocess` ditolak. Server-sent events dibatasi oleh timeout fungsi; klien tersambung ulang menggunakan cursor sehingga tidak ada peristiwa hilang, tetapi informasi kehadiran tidak tersedia.
- **Jumlah basis data tenant tetap terbatas** sekitar delapan, karena setiap basis data menambah pool koneksi di lingkungan yang tidak dapat berbagi pool.

## Deployment <!--quire:deploying-->

1. Buat proyek Vercel dari repositori dengan **Root Directory** `apps/web`. `apps/web/vercel.json` menetapkan perintah instalasi dan build (`NITRO_PRESET=vercel`) serta menyajikan `/sw.js` tanpa cache.
2. Atur variabel lingkungan. Dari `docker/.env.example`, setidaknya: `QUIRE_DEPLOY_TARGET=vercel`, `QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN`, `QUIRE_PLATFORM_DOMAINS`, `QUIRE_SECRET_KEY`, `QUIRE_MASTER_KEY`, `DATABASE_URL` (alamat pooler), `QUIRE_REPORT_DATABASE_URL`, `QUIRE_AUDIT_DATABASE_URL`, `QUIRE_DATABASE_ID`, `QUIRE_EMAIL_PROVIDER_CONFIG`, `QUIRE_MAIL_FROM`, pengaturan penyimpanan, serta `QUIRE_COLLAB_URL` dan `QUIRE_COLLAB_SIGNING_KEY` yang menunjuk ke layanan collab host pendamping.
   `QUIRE_REPORT_DATABASE_URL` harus milik basis data fisik yang ditentukan `DATABASE_URL`. Untuk setiap basis data terdaftar tambahan, tambahkan URL koneksi `quire_report` miliknya ke lingkungan web dan worker, lalu daftarkan nama variabel lingkungannya sebagai `env:NAME` di konsol platform. Analytics berhenti dengan aman jika URL laporan basis data itu tidak tersedia.
3. Di host pendamping, jalankan `docker/compose.yaml` tanpa layanan `web` dan gunakan `docker/.env` yang sama:
   ```sh
   docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
   ```
   Migration dijalankan di sana sebelum setiap deployment Vercel diaktifkan.
4. Deploy. Jika konfigurasi ditolak, log fungsi diawali "The web tier did not start on vercel" dan mencantumkan setiap pengaturan yang perlu diubah.

## Peningkatan <!--quire:upgrading-->

Jalankan migration dari host pendamping terlebih dahulu, lalu aktifkan deployment Vercel baru, kemudian gilir worker host pendamping: urutannya dijelaskan di [upgrade.md](/id/ops/upgrade/). Rollback instan Vercel adalah rollback kode dan selalu aman dalam satu rilis.

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