---
title: "Lapisan web pada Vercel"
description: "Jalankan lapisan web Quire pada Vercel dengan satu pekerja pasangan."
image: "https://docs.quirelms.com/og.png"
---

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

# Lapisan web pada Vercel

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

Reka bentuknya ialah `docs/architecture/23-ops.md` seksyen 5. Vercel menjalankan
lapisan web sahaja. Segala-galanya berjalan pada hos pasangan yang anda kendalikan,
dan ia bukan pilihan.

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

Konfigurasi telah sedia (`apps/web/vercel.json`, pratetap Nitro `vercel` dan
semakan permulaan). Vercel memerlukan storan fail dikongsi
(`QUIRE_STORAGE_DRIVER=s3` atau `azure`), satu pemandu masa nyata yang berfungsi
merentas instans fungsi (`QUIRE_REALTIME_DRIVER=sse` atau `centrifugo`) dan satu
pembekal e-mel HTTP. Tanpanya, lapisan web enggan bermula dan lognya menamakan
setiap tetapan yang hilang.

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

| Komponen | Di mana ia berjalan |
| --- | --- |
| `web` | Vercel Functions, masa laksana Node: halaman, REST, MCP, LTI, webhook yang diterima |
| `worker`, `scheduler`, `collab`, `content` | Hos pasangan: Fly, Railway, ECS, atau hos Docker anda sendiri dengan `docker/compose.yaml` |
| Postgres | Luar, di belakang satu pengumpul transaksi: Neon, Supabase, atau RDS dengan PgBouncer |
| Fail | S3 atau R2. Tiada cakera berterusan |
| Tugas latar belakang | Dijadualkan dengan pg-boss di dalam transaksi permintaan, dijalankan oleh pekerja pasangan. Dengan `QUIRE_QUEUE_DRIVER=vercel` pada pekerja pasangan, tugas ringan (penghantaran notis dan webhook tanpa pesanan) melalui Vercel Queues (`VERCEL_QUEUE_REGION`, `VERCEL_QUEUE_TOKEN`), jadi Postgres terkumpul tidak dikerjakan untuknya |
| Tugas berulang | Perancang pasangan. Tiada laluan Vercel Cron, kerana satu cron yang melakukan kerja dalam fungsi akan tamat masa |
| Penjejakan | OpenTelemetry ke pengumpul anda, `OTEL_EXPORTER_OTLP_ENDPOINT` |

## Apa yang sasaran ini tidak boleh lakukan <!--quire:what-this-target-cannot-do-->

Lapisan web menyemak perkara ini semasa ia bermula dan menolak, dengan menamakan
setiap masalah, daripada gagal kemudian pada e-mel pertama yang tidak pernah
dihantar:

- **Tiada SMTP.** Vercel menghalang SMTP keluar. Tetapkan
  `QUIRE_EMAIL_PROVIDER_CONFIG` kepada satu pembekal HTTP (Postmark, SES,
  Mailgun, SendGrid atau Resend). `QUIRE_SMTP_URL` ditolak.
- **Tiada cakera setempat.** `QUIRE_STORAGE_DRIVER=local` ditolak.
- **Tiada perkongsian memori antara panggilan.**
  `QUIRE_REALTIME_DRIVER=inprocess` ditolak. Peristiwa server-sent dihadkan pada
  tamat masa fungsi; pelanggan menyambung semula dengan satu kursor, jadi tiada
  peristiwa hilang, tetapi kehadiran tidak tersedia.
- **Pangkalan data penyewa yang disemat** dihadkan kepada kira-kira lapan, kerana
  setiap satu ialah satu lagi kumpulan sambungan dalam persekitaran yang tidak
  dapat berkongsi kumpulan.

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

1. Cipta satu projek Vercel daripada repositori dengan **Root Directory**
   `apps/web`. `apps/web/vercel.json` menetapkan arahan pemasangan dan binaan
   (`NITRO_PRESET=vercel`) dan menyajikan `/sw.js` tanpa cache.
2. Tetapkan pemboleh ubah persekitaran. Daripada `docker/.env.example`, sekurang-
   kurangnya: `QUIRE_DEPLOY_TARGET=vercel`, `QUIRE_APP_ORIGIN`,
   `QUIRE_CONTENT_ORIGIN`, `QUIRE_PLATFORM_DOMAINS`, `QUIRE_SECRET_KEY`,
   `QUIRE_MASTER_KEY`, `DATABASE_URL` (alamat pengumpul),
   `QUIRE_REPORT_DATABASE_URL`, `QUIRE_AUDIT_DATABASE_URL`,
   `QUIRE_DATABASE_ID`, `QUIRE_EMAIL_PROVIDER_CONFIG`, `QUIRE_MAIL_FROM`,
   tetapan storan, serta `QUIRE_COLLAB_URL` dan `QUIRE_COLLAB_SIGNING_KEY`
   yang menunjuk kepada perkhidmatan collab pasangan.
   `QUIRE_REPORT_DATABASE_URL` adalah milik pangkalan data fizikal yang dinamakan
   oleh `DATABASE_URL`. Bagi setiap pangkalan data berdaftar tambahan, tambahkan
   URL sambungan `quire_report`nya sendiri kepada persekitaran web dan worker,
   kemudian namakan pemboleh ubah persekitarannya sebagai `env:NAME` dalam
   konsol platform. Analitik gagal tertutup jika URL laporan pangkalan data itu
   hilang.
3. Pada hos pasangan, jalankan `docker/compose.yaml` tanpa perkhidmatan `web`,
   dengan `docker/.env` yang sama:
   ```sh
   docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
   ```
   Migrasi berjalan di sana, sebelum setiap pelepasan Vercel dinaikkan.
4. Lepaskan. Pada satu konfigurasi yang ditolak, log fungsi bermula dengan "The
   web tier did not start on vercel" dan menyenaraikan setiap tetapan yang perlu
   diubah.

## Naik taraf <!--quire:upgrading-->

Migrate daripada hos pasangan terlebih dahulu, kemudian naikkan pelepasan Vercel
yang baharu, kemudian kemas kini berperingkat pada pekerja pasangan: urutannya dalam
[upgrade.md](/ms/ops/upgrade/). Satu rollback segera Vercel ialah satu rollback kod dan
sentiasa selamat dalam sesebuah keluaran.

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