---
title: "Веб-слојот на Vercel"
description: "Извршете го веб-слојот на Quire на Vercel со придружен работник."
image: "https://docs.quirelms.com/og.png"
---

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

# Веб-слојот на Vercel

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

Дизајнот е `docs/architecture/23-ops.md` оддел 5. Vercel го извршува само веб-слојот. Сето друго работи на придружен домаќин што го водите, и тоа не е изборно.

## Состојба во ова издание <!--quire:status-in-this-release-->

Конфигурацијата е поставена (`apps/web/vercel.json`, претходната поставка `vercel` на Nitro и проверките при стартување). Vercel бара споделено складирање датотеки (`QUIRE_STORAGE_DRIVER=s3` или `azure`), драјвер во реално време што работи низ инстанци на функции (`QUIRE_REALTIME_DRIVER=sse` или `centrifugo`) и давател за е-пошта преку HTTP. Без нив веб-слојот одбива да стартува и неговиот дневник го наведува секоја поставка што недостасува.

## Делови <!--quire:the-pieces-->

| Дел | Каде работи |
| --- | --- |
| `web` | Vercel Functions, Bun runtime: страници, REST, MCP, LTI, примени веб-куки |
| `worker`, `scheduler`, `collab`, `content` | Придружен домаќин: Fly, Railway, ECS или вашиот сопствен Docker-домаќин со `docker/compose.yaml` |
| Postgres | Надворешен, зад собирник за трансакции: Neon, Supabase или RDS со PgBouncer |
| Датотеки | S3 или R2. Нема постојан диск |
| Позадински работи | Наредени со pg-boss внатре во трансакцијата на барањето, извршени од придружениот работник. Со `QUIRE_QUEUE_DRIVER=vercel` на придружениот работник, лесните работи (неизредени известувања и испораки на веб-куки) минуваат низ Vercel Queues (`VERCEL_QUEUE_REGION`, `VERCEL_QUEUE_TOKEN`), така што собраниот Postgres не се допирува постојано за нив |
| Повторувачки работи | Придружениот распоредувач. Нема Vercel Cron-патека, бидејќи cron што врши работа внатре во функција истечува |
| Следење | OpenTelemetry кон вашиот колектор, `OTEL_EXPORTER_OTLP_ENDPOINT` |

## Што оваа цел не може да прави <!--quire:what-this-target-cannot-do-->

Веб-слојот ги проверува овие при стартување и одбива, наведувајќи секој проблем, наместо да не успее подоцна кај првата е-пошта што никогаш не се испраќа:

- **Нема SMTP.** Vercel го блокира излезниот SMTP. Поставете `QUIRE_EMAIL_PROVIDER_CONFIG` на давател преку HTTP (Postmark, SES, Mailgun, SendGrid или Resend). `QUIRE_SMTP_URL` е одбиен.
- **Нема локален диск.** `QUIRE_STORAGE_DRIVER=local` е одбиен.
- **Нема споделена меморија меѓу повиците.** `QUIRE_REALTIME_DRIVER=inprocess` е одбиен. Настани испратени од серверот се ограничени на временскиот лимит на функцијата; клиентот се поврзува повторно со курсор, така што ниеден настан не се губи, но присуството не е достапно.
- **Врзаните бази на податоци на закупец се ограничени** на околу осум, бидејќи секоја од нив е уште еден базен за поврзување во средина што не може да ги споделува базените.

## Деплојување <!--quire:deploying-->

1. Создадете Vercel-проект од репозиториумот со **Root Directory** `apps/web`. `apps/web/vercel.json` ги поставува командите за инсталирање и изградба (`NITRO_PRESET=vercel`) и ја служи `/sw.js` без кеширање.
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` (адресата на собирникот), `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` и во веб- и во работничката средина, па регистирајте го името на нејзината променлива на средината како `env:NAME` во конзолата на платформата. Аналитиката не успева ако URL-то за извештаи на таа база недостасува.
3. На придружениот домаќин, извршете ја `docker/compose.yaml` без услугата `web`, со истиот `docker/.env`:
   ```sh
   docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
   ```
   Миграциите се извршуваат таму, пред секоја Vercel-дистрибуција да биде промовирана.
4. Деплојувајте. Кај одбиена конфигурација, дневникот на функцијата започнува со „The web tier did not start on vercel“ и го наведува секоја поставка што треба да се промени.

## Надградба <!--quire:upgrading-->

Прво мигрирајте од придружениот домаќин, потоа промовирајте ја новата Vercel-дистрибуција, па тркалајте ги работниците на придружениот домаќин: редоследот е во [upgrade.md](/mk/ops/upgrade/). Итното враќање назад на Vercel е враќање на кодот и секогаш е безбедно во рамките на изданието.

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