Vai al contenuto

Il livello web su Vercel

Esegui il livello web di Quire su Vercel con un worker companion.

Il progetto è nella sezione 5 di docs/architecture/23-ops.md. Vercel esegue solo il livello web. Tutto il resto gira su un host companion gestito da te, e non è facoltativo.

Stato in questa release

La configurazione è pronta (apps/web/vercel.json, il preset Nitro vercel e i controlli di avvio). Vercel richiede storage file condiviso (QUIRE_STORAGE_DRIVER=s3 oppure azure), un driver realtime che funzioni tra istanze di funzione (QUIRE_REALTIME_DRIVER=sse oppure centrifugo) e un provider email HTTP. Senza di essi il livello web rifiuta di avviarsi e il suo registro nomina ciascuna impostazione mancante.

I componenti

Componente Dove gira
web Funzioni Vercel, runtime Node: pagine, REST, MCP, LTI, webhook ricevuti
worker, scheduler, collab, content Un host companion: Fly, Railway, ECS oppure il tuo host Docker con docker/compose.yaml
Postgres Esterno, dietro un pooler di transazioni: Neon, Supabase oppure RDS con PgBouncer
File S3 o R2. Non c’è disco persistente
Job in background Accodati con pg-boss dentro la transazione della richiesta, eseguiti dal worker companion. Con QUIRE_QUEUE_DRIVER=vercel sul worker companion, i job leggeri (consegne non ordinate di notifiche e webhook) passano per Vercel Queues (VERCEL_QUEUE_REGION, VERCEL_QUEUE_TOKEN), così il Postgres in pool non viene interrogato per essi
Job ricorrenti Lo scheduler companion. Non c’è rotta Vercel Cron, perché un cron che lavora dentro una funzione va in timeout
Tracciamento OpenTelemetry verso il tuo collector, OTEL_EXPORTER_OTLP_ENDPOINT

Cosa questo target non può fare

Il livello web verifica questi punti all’avvio e rifiuta, nominando ogni problema, anziché fallire in seguito alla prima email mai inviata:

  • Niente SMTP. Vercel blocca l’SMTP in uscita. Imposta QUIRE_EMAIL_PROVIDER_CONFIG su un provider HTTP (Postmark, SES, Mailgun, SendGrid o Resend). QUIRE_SMTP_URL viene rifiutato.
  • Niente disco locale. QUIRE_STORAGE_DRIVER=local viene rifiutato.
  • Niente memoria condivisa tra invocazioni. QUIRE_REALTIME_DRIVER=inprocess viene rifiutato. Gli eventi server-sent sono limitati al timeout della funzione; il client si riconnette con un cursore, così nessun evento va perso, ma la presenza non è disponibile.
  • I database tenant fissati sono limitati a circa otto, perché ciascuno è un altro pool di connessioni in un ambiente che non può condividerli.

Distribuzione

  1. Crea un progetto Vercel dal repository con Directory radice apps/web. apps/web/vercel.json imposta i comandi di installazione e build (NITRO_PRESET=vercel) e serve /sw.js senza cache.
  2. Imposta le variabili d’ambiente. Da docker/.env.example, almeno: QUIRE_DEPLOY_TARGET=vercel, QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, QUIRE_PLATFORM_DOMAINS, QUIRE_SECRET_KEY, QUIRE_MASTER_KEY, DATABASE_URL (l’indirizzo del pooler), QUIRE_REPORT_DATABASE_URL, QUIRE_AUDIT_DATABASE_URL, QUIRE_DATABASE_ID, QUIRE_EMAIL_PROVIDER_CONFIG, QUIRE_MAIL_FROM, le impostazioni di storage, e QUIRE_COLLAB_URL e QUIRE_COLLAB_SIGNING_KEY che puntano al servizio collab del companion. QUIRE_REPORT_DATABASE_URL appartiene al database fisico nominato da DATABASE_URL. Per ciascun database registrato aggiuntivo, aggiungi il suo URL di connessione quire_report agli ambienti sia web sia worker, poi registra il nome della sua variabile d’ambiente come env:NAME nella console della piattaforma. Le analisi falliscono in modo chiuso se manca l’URL report di quel database.
  3. Sull’host companion, esegui docker/compose.yaml senza il servizio web, con lo stesso docker/.env:
    docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
    Le migrazioni girano lì, prima che ogni distribuzione Vercel venga promossa.
  4. Distribuisci. Con una configurazione rifiutata il registro della funzione inizia con “The web tier did not start on vercel” ed elenca ciascuna impostazione da cambiare.

Aggiornamento

Migra prima dall’host companion, poi promuovi la nuova distribuzione Vercel, poi fai rolling dei worker del companion: l’ordine in upgrade.md. Un rollback istantaneo Vercel è un rollback di codice ed è sempre sicuro all’interno di una release.

Navigazione

Digita per cercare…

↑↓ per spostarti↵ per selezionareEsc per chiudere