---
title: "Couche Web sur Vercel"
description: "Exécuter la couche Web de Quire sur Vercel avec un processus de travail compagnon."
image: "https://docs.quirelms.com/og.png"
---

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

# Couche Web sur Vercel

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

La conception est décrite à la section 5 de `docs/architecture/23-ops.md`. Vercel exécute uniquement la couche Web. Tout le reste fonctionne sur un hôte compagnon que vous exploitez; celui-ci est obligatoire.

## État de cette version <!--quire:status-in-this-release-->

La configuration est en place (`apps/web/vercel.json`, le préréglage Nitro `vercel` et les vérifications au démarrage). Vercel exige un stockage de fichiers partagé (`QUIRE_STORAGE_DRIVER=s3` ou `azure`), un pilote temps réel fonctionnant entre les instances de fonctions (`QUIRE_REALTIME_DRIVER=sse` ou `centrifugo`) et un fournisseur de courriel HTTP. Sans ces éléments, la couche Web refuse de démarrer et son journal indique chaque paramètre manquant.

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

| Composant | Exécution |
| --- | --- |
| `web` | Fonctions Vercel, environnement Node : pages, REST, MCP, LTI et webhooks reçus |
| `worker`, `scheduler`, `collab`, `content` | Hôte compagnon : Fly, Railway, ECS ou votre propre hôte Docker avec `docker/compose.yaml` |
| Postgres | Externe, derrière un répartiteur de connexions transactionnel : Neon, Supabase ou RDS avec PgBouncer |
| Fichiers | S3 ou R2. Aucun disque persistant |
| Tâches en arrière-plan | Ajoutées à pg-boss dans la transaction de la requête et exécutées par le processus compagnon. Avec `QUIRE_QUEUE_DRIVER=vercel` sur celui-ci, les tâches légères (livraisons non ordonnées de notifications et de webhooks) passent par Vercel Queues (`VERCEL_QUEUE_REGION`, `VERCEL_QUEUE_TOKEN`), évitant l’interrogation de Postgres |
| Tâches récurrentes | Planificateur compagnon. Aucun itinéraire Vercel Cron, car un travail exécuté dans une fonction par une tâche planifiée expire |
| Traces | OpenTelemetry vers votre collecteur, `OTEL_EXPORTER_OTLP_ENDPOINT` |

## Limites de cette cible <!--quire:what-this-target-cannot-do-->

La couche Web vérifie les éléments suivants au démarrage et refuse de démarrer en nommant tous les problèmes, plutôt que d’échouer plus tard au premier courriel qui ne peut être envoyé :

- **Pas de SMTP.** Vercel bloque le SMTP sortant. Définissez `QUIRE_EMAIL_PROVIDER_CONFIG` sur un fournisseur HTTP (Postmark, SES, Mailgun, SendGrid ou Resend). `QUIRE_SMTP_URL` est refusé.
- **Pas de disque local.** `QUIRE_STORAGE_DRIVER=local` est refusé.
- **Pas de mémoire partagée entre les invocations.** `QUIRE_REALTIME_DRIVER=inprocess` est refusé. Les événements envoyés par le serveur sont limités par le délai d’expiration de la fonction; le client se reconnecte avec un curseur, aucun événement n’est perdu, mais la présence est indisponible.
- **Nombre limité de bases de données de locataires rattachées** à environ huit, car chacune ajoute un bassin de connexions dans un environnement qui ne peut pas les partager.

## Déploiement <!--quire:deploying-->

1. Créez un projet Vercel à partir du dépôt, avec **Répertoire racine** défini sur `apps/web`. `apps/web/vercel.json` configure les commandes d’installation et de compilation (`NITRO_PRESET=vercel`) et évite la mise en cache de `/sw.js`.
2. Définissez les variables d’environnement. À partir de `docker/.env.example`, définissez au minimum : `QUIRE_DEPLOY_TARGET=vercel`, `QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN`, `QUIRE_PLATFORM_DOMAINS`, `QUIRE_SECRET_KEY`, `QUIRE_MASTER_KEY`, `DATABASE_URL` (adresse du répartiteur), `QUIRE_REPORT_DATABASE_URL`, `QUIRE_AUDIT_DATABASE_URL`, `QUIRE_DATABASE_ID`, `QUIRE_EMAIL_PROVIDER_CONFIG`, `QUIRE_MAIL_FROM`, les paramètres de stockage, ainsi que `QUIRE_COLLAB_URL` et `QUIRE_COLLAB_SIGNING_KEY` pointant vers le service collab de l’hôte compagnon.
   `QUIRE_REPORT_DATABASE_URL` appartient à la base physique indiquée par `DATABASE_URL`. Pour chaque autre base enregistrée, ajoutez sa propre URL de connexion `quire_report` aux environnements Web et de travail, puis enregistrez son nom de variable d’environnement sous la forme `env:NAME` dans la console de la plateforme. L’analyse échoue par défaut si l’URL de rapport de cette base est absente.
3. Sur l’hôte compagnon, exécutez `docker/compose.yaml` sans le service `web` et avec le même fichier `docker/.env` :
   ```sh
   docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
   ```
   Les migrations y sont exécutées avant la promotion de chaque déploiement Vercel.
4. Déployez. Si la configuration est refusée, le journal de la fonction commence par « The web tier did not start on vercel » et répertorie chaque paramètre à modifier.

## Mise à niveau <!--quire:upgrading-->

Exécutez d’abord la migration sur l’hôte compagnon, promouvez ensuite le nouveau déploiement Vercel, puis mettez à niveau les processus de travail de l’hôte compagnon, dans l’ordre indiqué dans [le guide de mise à niveau](/fr-CA/ops/upgrade/). Le retour instantané à une version précédente sur Vercel est un retour du code et reste toujours sûr dans une même version.

Source: https://docs.quirelms.com/fr-CA/ops/vercel/index.mdx
