For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /fr/docs/web/provider-keys.md (or send Accept: text/markdown).
Récupérer les clés de fournisseur restantes
Courts parcours pour les services restants : fournisseurs d'IA, Trigger.dev, stockage S3, Sentry ou PostHog, Turnstile et votre domaine.
Comment utiliser cette page
Chaque section ci-dessous est un parcours de configuration complet : créer le compte, trouver la clé, renseigner les noms d'env, vérifier. Ne prenez que les sections des services que votre produit livre — un site sans fonctions d'IA n'aura jamais besoin de la première, et le kit continue de tourner même si vous sautez toutes les sections d'ici.
Les mêmes règles de secrets que partout : les clés d'API et les secrets de webhook restent côté serveur, seules les valeurs préfixées NEXT_PUBLIC_/EXPO_PUBLIC_ peuvent atteindre le client, les secrets de production vivent dans le coffre de secrets de l'hébergeur, et le serveur de dev ne relit l'env qu'au redémarrage.
Clés de fournisseurs d'IA
L'AI_PROVIDER du kit accepte openai, anthropic, openai-compatible et openrouter — plus fake, le remplaçant local par défaut. Choisissez-en un ; la clé du fournisseur est le seul compte nécessaire, car les ids de modèles et les prix viennent du catalogue en base de données du kit, pas de variables env.
OpenAI : platform.openai.com → API keys → Create new secret key → copiez sk-… → OPENAI_API_KEY. Anthropic : console.anthropic.com → API Keys → Create Key → sk-ant-… → ANTHROPIC_API_KEY. Les deux facturent au token — quelques dollars de crédit couvrent le développement.
OpenRouter achemine chaque modèle du catalogue via une seule clé : openrouter.ai → Keys → Create Key → sk-or-… → AI_PROVIDER=openrouter plus OPENROUTER_API_KEY ; les optionnels OPENROUTER_APP_NAME/OPENROUTER_SITE_URL envoient des en-têtes d'attribution. openai-compatible couvre tout endpoint de forme OpenAI : OPENAI_COMPATIBLE_API_KEY plus OPENAI_COMPATIBLE_BASE_URL.
Vérifiez : redémarrez, lancez une tâche d'IA et attendez une vraie réponse de modèle au lieu du fake déterministe. Une erreur de démarrage qui nomme la clé signifie que le flag du fournisseur est actif sans sa clé. Une vraie réponse a aussi besoin de JOB_PROVIDER=trigger de la section Trigger.dev ci-dessous plus un modèle activé dans le catalogue du kit — Configurer l'IA couvre ce montage.
# apps/web/.env.local — pick ONE provider
AI_PROVIDER=openai
OPENAI_API_KEY=sk-…
# or AI_PROVIDER=anthropic
# ANTHROPIC_API_KEY=sk-ant-…
# or AI_PROVIDER=openrouter
# OPENROUTER_API_KEY=sk-or-…
# or AI_PROVIDER=openai-compatible
# OPENAI_COMPATIBLE_API_KEY=…
# OPENAI_COMPATIBLE_BASE_URL=https://your-endpoint/v1Trigger.dev
À sauter sauf si le produit a besoin de vraies exécutions de jobs en arrière-plan — JOB_PROVIDER=local met les jobs en file en mémoire sans les exécuter, ce qui convient au développement.
1. Ouvrez app.trigger.dev → Sign up → créez un projet.
2. Copiez deux valeurs : le project ref proj_… depuis les paramètres du projet ou l'URL du tableau de bord → TRIGGER_PROJECT_REF, et la secret key de la page API keys du projet (tr_dev_… pour l'environnement dev, tr_prod_… pour la production) → TRIGGER_SECRET_KEY. Les deux restent côté serveur.
3. Les tâches du kit vivent déjà dans apps/web/trigger et apps/web/trigger.config.ts lit TRIGGER_PROJECT_REF. Depuis apps/web, lancez npx trigger.dev@latest dev — il enregistre les tâches auprès de votre projet et les exécute en local avec la clé dev.
Vérifiez : la commande dev consigne les tâches enregistrées ; mettez-en une en file dans l'app et regardez-la s'exécuter dans la liste Runs du tableau de bord. Les environnements déployés lancent corepack pnpm --filter @supastack/web trigger:deploy pour publier l'ensemble des tâches.
# apps/web/.env.local
JOB_PROVIDER=trigger
TRIGGER_PROJECT_REF=proj_…
TRIGGER_SECRET_KEY=tr_dev_… # tr_prod_… in production
# run the worker alongside the app, from apps/web:
cd apps/web
npx trigger.dev@latest devStockage compatible S3 (Cloudflare R2)
À sauter sauf si le produit stocke des fichiers — STORAGE_PROVIDER=memory garde les uploads dans le processus pour le développement.
Tout bucket compatible S3 convient ; Cloudflare R2 est le choix le plus favorable au niveau gratuit. 1. Ouvrez dash.cloudflare.com → R2 Object Storage → Create bucket, nommez-le et gardez l'indication d'emplacement par défaut.
2. De retour sur la vue d'ensemble R2, ouvrez Manage R2 API Tokens → Create API token → permission Object Read & Write, limitée à ce bucket → Create. Copiez l'Access Key ID, la Secret Access Key et l'endpoint S3 affiché — https://<account-id>.r2.cloudflarestorage.com.
3. Renseignez les noms d'env ci-dessous. STORAGE_REGION=auto est la convention de R2 — le kit met us-east-1 par défaut, que R2 accepte aussi. STORAGE_FORCE_PATH_STYLE est déjà activé par défaut pour les endpoints personnalisés, ce que veut R2. Servir des fichiers publics exige en plus STORAGE_PUBLIC_BASE_URL ou un câblage CDN ; les fichiers privés n'ont besoin de rien d'autre.
Vérifiez : redémarrez et uploadez via l'app — l'objet apparaît dans le navigateur du bucket R2. Une erreur de signature ou un 403 signifie qu'il manque au token la lecture/écriture d'objets sur ce bucket ; créez un token frais avec la bonne portée.
# apps/web/.env.local
STORAGE_PROVIDER=s3
STORAGE_ENDPOINT=https://<account-id>.r2.cloudflarestorage.com
STORAGE_REGION=auto
STORAGE_BUCKET=your-bucket
STORAGE_ACCESS_KEY_ID=… # server-only
STORAGE_SECRET_ACCESS_KEY=… # server-only
# STORAGE_PUBLIC_BASE_URL= # optional public-URL baseSentry ou PostHog (optionnel)
Entièrement optionnel : chaque valeur d'observabilité est vide par défaut et le kit tourne très bien sans — ajoutez ceci quand vous voulez des rapports d'erreurs et de l'analytique en production.
Sentry pour les erreurs : sentry.io → créez un projet → choisissez la plateforme Next.js → l'écran de configuration affiche le DSN https://…@….ingest.sentry.io/… → SENTRY_DSN. Les exceptions arrivent alors dans Sentry étiquetées avec des ids de corrélation ; le niveau gratuit suffit pour démarrer.
PostHog pour l'analytique produit à la place : posthog.com → créez un projet → copiez la clé d'API du projet phc_… → NEXT_PUBLIC_POSTHOG_KEY plus NEXT_PUBLIC_POSTHOG_HOST (https://us.i.posthog.com, ou votre hôte UE). Ces deux-là sont des valeurs publiques de navigateur par conception ; SENTRY_DSN reste côté serveur. ALERT_WEBHOOK_URL poste en option des alertes d'échec vers un endpoint compatible Slack.
Vérifiez : redémarrez, levez une exception de test (ou rejouez l'événement d'exemple de Sentry) et confirmez qu'elle atterrit dans la liste Issues du projet.
# apps/web/.env.local — all optional
SENTRY_DSN=https://…@….ingest.sentry.io/…
NEXT_PUBLIC_POSTHOG_KEY=phc_…
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
# ALERT_WEBHOOK_URL=https://hooks.slack.com/services/…Cloudflare Turnstile
Protection anti-bots pour les formulaires publics et les endpoints d'identifiants — CAPTCHA_PROVIDER=off par défaut, donc ajoutez-le avant d'ouvrir l'inscription à des inconnus. Gratuit.
1. Ouvrez dash.cloudflare.com → Turnstile → Add widget → nommez-le et listez les hostnames : localhost pour le développement plus votre vrai domaine → Create.
2. Copiez les deux valeurs : la Site Key — publique par conception, elle se rend dans le widget → NEXT_PUBLIC_TURNSTILE_SITE_KEY — et la Secret Key, que le serveur utilise pour vérifier → TURNSTILE_SECRET_KEY.
3. CAPTCHA_PROVIDER=turnstile l'active ; le démarrage échoue en nommant la clé qui manque. Le guide captcha liste exactement les surfaces que le widget protège.
Vérifiez : ouvrez /auth ou le formulaire de contact — le widget se rend ; les soumissions sans défi résolu sont rejetées. Si le widget ne se charge jamais, le hostname que vous visitez n'est pas dans la liste du widget.
# apps/web/.env.local
CAPTCHA_PROVIDER=turnstile
NEXT_PUBLIC_TURNSTILE_SITE_KEY=0x… # public by design
TURNSTILE_SECRET_KEY=0x… # server-onlyUn domaine à vous
Un achat chez n'importe quel registrar — Cloudflare Registrar, Porkbun, Namecheap conviennent tous. Rien de tout cela ne se copie dans l'env ; le domaine apparaît dans le Services ID, le DNS de Resend, les hostnames de Turnstile et les return URL d'OAuth que vous avez configurées en chemin.
Deux façons de le pointer vers l'app : pour Cloud Run, utilisez le mapping de domaine du guide de déploiement — quelques clics de console plus les enregistrements DNS que Google liste. Ou déplacez le DNS vers les nameservers de Cloudflare (le registrar échange deux enregistrements) — optionnel, mais c'est aussi la façon propre de gérer les buckets publics R2 et les hostnames Turnstile au même endroit.
Pour poursuivre la configuration, consultez Configurer la base de données.