YYayaw

Variables d'environnement

Variables de configuration runtime utilisées par l'application.

Cette page liste les variables runtime consommées par l'application. Utilisez Configuration de l'environnement de déploiement pour le runbook opérationnel qui explique où récupérer chaque valeur, comment borner les environnements de fournisseurs hébergés et comment valider un environnement avant promotion.

Noyau

NODE_ENV=development
NEXT_PUBLIC_BASE_URL=http://localhost:3080
DATABASE_URL=postgresql://user:password@localhost:5432/yayaw
DATABASE_POOL_MAX=
DATABASE_IDLE_TIMEOUT_SECONDS=
DATABASE_MAX_LIFETIME_SECONDS=
DATABASE_CONNECT_TIMEOUT_SECONDS=
DATABASE_STATEMENT_TIMEOUT_SECONDS=
DATABASE_PREPARE_STATEMENTS=
CMS_DASHBOARD_FULL_METRICS=false
BETTER_AUTH_SECRET=
BETTER_AUTH_TRUSTED_ORIGINS=http://localhost:3080
  • Les réglages de pool DATABASE_* sont optionnels. Les pools runtime de base de données utilisent par défaut 10 connexions en développement et 3 en production/serverless. La production utilise aussi par défaut un timeout de connexion de 10 secondes, un timeout d'inactivité de 20 secondes, une durée de vie maximale de 300 secondes, un timeout de requête de 20 secondes et les prepared statements désactivés pour la compatibilité avec les poolers. Augmentez DATABASE_POOL_MAX ou les valeurs de cycle de vie seulement si la cible de déploiement supporte les connexions supplémentaires par runtime.
  • BETTER_AUTH_SECRET doit être un secret stable, server-only et à forte entropie en production et dans les runtimes auto-hébergés.
  • DATABASE_STATEMENT_TIMEOUT_SECONDS applique un timeout par requête lorsque le client base de données ouvre une connexion. Laissez vide sauf si le fournisseur Postgres ou la base auto-hébergée a besoin d'un garde-fou explicite.
  • CMS_DASHBOARD_FULL_METRICS=true active l'ensemble complet de requêtes de publication et d'activité CMS sur /dashboard/content. Gardez false par défaut pour utiliser les compteurs rapides indexés et éviter que le shell du tableau de bord dépende de lectures agrégées coûteuses.

Réglages De Build

NEXT_BUILD_WORKERS=1
NEXT_STATIC_PAGE_GENERATION_TIMEOUT=180
  • NEXT_BUILD_WORKERS contrôle le nombre de workers Next.js utilisés pendant next build. Les builds Docker auto-hébergés utilisent 1 par défaut pour rester stables sur de petites machines.
  • NEXT_STATIC_PAGE_GENERATION_TIMEOUT augmente le timeout de génération statique Next.js pour les builders lents. Augmentez-le seulement lorsque des pages statiques légitimes expirent.

Hôte Production

Yayaw production utilise https://yayaw.app comme origine publique canonique. Les déploiements de prévisualisation utilisent https://preview.yayaw.app pour le domaine adossé à la branche preview.

NEXT_PUBLIC_BASE_URL=https://yayaw.app
BETTER_AUTH_TRUSTED_ORIGINS=https://*.yayaw.app,https://*.vercel.app
  • NEXT_PUBLIC_BASE_URL est la source de vérité applicative pour les URL canoniques, l'URL de base Better Auth, les métadonnées OAuth, les liens sitemap/robots et les URL absolues de ressources générées.
  • NEXT_PUBLIC_SITE_URL n'est pas lu par l'application.
  • BETTER_AUTH_URL n'est pas requis par le runtime courant parce que Better Auth reçoit baseURL depuis NEXT_PUBLIC_BASE_URL. Si un ancien déploiement le définit encore, gardez-le aligné avec https://yayaw.app.
  • preview.yayaw.app est le domaine de prévisualisation adossé à la branche durable preview.
  • Gardez www.yayaw.app comme redirection de domaine projet Vercel vers yayaw.app; l'app normalise aussi les requêtes de pages www avant le routage i18n.
  • Gardez les hôtes .eu retirés uniquement comme redirections Vercel 308 vers leurs remplaçants .app, par exemple yayaw.eu et www.yayaw.eu vers yayaw.app. Ne les ajoutez pas à BETTER_AUTH_TRUSTED_ORIGINS.
  • Les domaines publics d'organisation sont séparés de l'hôte applicatif canonique. Ils sont vérifiés via le fournisseur de domaines publics configuré puis mappés dans organization_public_domains; ils ne doivent pas figurer dans BETTER_AUTH_TRUSTED_ORIGINS parce que dashboard/auth ne sont pas servis depuis ces hôtes.

Facturation Et Stripe

STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
STRIPE_ONE_TIME_WEBHOOK_SECRET=
BILLING_GRACE_PERIOD_DAYS=7
BILLING_PRO_SEAT_LIMIT=10
BILLING_BUSINESS_SEAT_LIMIT=100
BILLING_CODE_ACCESS_REPOSITORY_URL=
BILLING_CODE_ACCESS_DOWNLOAD_URL=
BILLING_CODE_ACCESS_DOCUMENTATION_URL=
BILLING_CODE_ACCESS_SUPPORT_URL=
BILLING_CODE_ACCESS_GITHUB_REPOSITORY=
BILLING_CODE_ACCESS_GITHUB_APP_ID=
BILLING_CODE_ACCESS_GITHUB_APP_INSTALLATION_ID=
BILLING_CODE_ACCESS_GITHUB_APP_PRIVATE_KEY=
BILLING_CODE_ACCESS_GITHUB_TOKEN=
  • STRIPE_WEBHOOK_SECRET est utilisé par l'endpoint webhook du plugin Better Auth Stripe.
  • STRIPE_ONE_TIME_WEBHOOK_SECRET est utilisé par l'endpoint webhook custom des achats ponctuels.
  • Les prix des produits de facturation sont gérés depuis l'admin ou MCP et synchronisés vers Stripe; les Stripe Price IDs résultants sont stockés en interne dans billing_products.
  • Les URL BILLING_CODE_ACCESS_* sont des liens non secrets optionnels affichés sur /dashboard/organization/code-access après un achat éligible ou un abonnement actif. Laissez une valeur vide lorsqu'un livrable nécessite une provision manuelle.
  • L'accès dépôt GitHub pour l'accès au code payant est configuré depuis /dashboard/admin/billing-settings. Les valeurs non secrètes peuvent aussi être fournies en repli avec BILLING_CODE_ACCESS_GITHUB_REPOSITORY, BILLING_CODE_ACCESS_GITHUB_APP_ID et BILLING_CODE_ACCESS_GITHUB_APP_INSTALLATION_ID.
  • Gardez les secrets GitHub uniquement en variables d'environnement: BILLING_CODE_ACCESS_GITHUB_APP_PRIVATE_KEY pour le provisioning GitHub App de production, ou BILLING_CODE_ACCESS_GITHUB_TOKEN comme repli local/staging optionnel.
  • Voir Configuration de l'environnement de déploiement pour la création de GitHub App, l'ID d'installation, la clé privée et le chemin de repli token.

Hôte Canonique Et Sessions Auth

  • Définissez NEXT_PUBLIC_BASE_URL sur l'hôte production canonique.
  • Définissez le NEXT_PUBLIC_BASE_URL de prévisualisation sur l'hôte branch-backed stable lorsqu'il est configuré.
  • Ne mélangez pas les hôtes www et non-www pour les sessions authentifiées.
  • Gardez BETTER_AUTH_TRUSTED_ORIGINS pour les hôtes preview/local requis. L'hôte canonique et sa variante www sont déjà dérivés de NEXT_PUBLIC_BASE_URL.
  • Pour les routes préfixées par locale, préférez @/i18n/navigation (Link, useRouter, usePathname) à next/link et next/navigation dans les composants de navigation applicative.

OAuth (Optionnel)

GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
FACEBOOK_CLIENT_ID=
FACEBOOK_CLIENT_SECRET=
RESEND_API_KEY=
EMAIL_SENDER=team@yayaw.app
EMAIL_SUPPORT=support@yayaw.app
EMAIL_USERNAME=Yayaw Team

EMAIL_SENDER est l'adresse expéditrice vérifiée Resend utilisée dans les en-têtes From. EMAIL_SUPPORT apparaît dans les modèles et contenus support. EMAIL_USERNAME est le nom affiché avec l'adresse d'envoi. Ces variables sont des valeurs bootstrap et de repli; les valeurs runtime enregistrées dans Admin > Site Settings > Email sont prioritaires après setup.

Stockage (Optionnel Pour Les Fonctionnalités Média)

Le stockage média est adossé à un fournisseur. STORAGE_PROVIDER=supabase conserve le chemin Supabase hébergé. STORAGE_PROVIDER=s3 utilise une API compatible S3 comme MinIO, AWS S3 ou R2. Quand STORAGE_PROVIDER est vide, le runtime sélectionne Supabase si les variables Supabase sont présentes, ou S3 si l'ensemble de variables S3 est complet.

STORAGE_PROVIDER=
STORAGE_MEDIA_BUCKET=media
STORAGE_PUBLIC_BASE_URL=
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
S3_ENDPOINT=
S3_REGION=us-east-1
S3_ACCESS_KEY_ID=
S3_SECRET_ACCESS_KEY=
S3_FORCE_PATH_STYLE=true
  • STORAGE_MEDIA_BUCKET vaut media par défaut.
  • STORAGE_PUBLIC_BASE_URL est requis pour le stockage compatible S3 et doit être une URL publique capable de servir /<bucket>/<object-key>.
  • Si STORAGE_PUBLIC_BASE_URL utilise l'origine app ou CDN, routez chaque préfixe de bucket public vers le stockage objet avant le repli vers l'app. Les préfixes publics intégrés sont /media/* et /organization-logos/*.
  • Le stockage Supabase requiert NEXT_PUBLIC_SUPABASE_URL et SUPABASE_SERVICE_ROLE_KEY pour les écritures serveur. La clé anon reste disponible pour les intégrations client mais n'est pas l'identifiant d'écriture serveur.
  • Le stockage compatible S3 requiert endpoint, région, access key, secret key et URL publique de base. Gardez S3_FORCE_PATH_STYLE=true pour MinIO et la plupart des endpoints compatibles S3 locaux.
  • bun run seed téléverse les ressources par défaut de variables globales de site dans STORAGE_MEDIA_BUCKET lorsque le stockage est configuré. Sans identifiants de stockage, le seed conserve des ressources publiques locales de repli pour que le setup local se termine.
  • Les lignes média existantes stockent des URL publiques absolues; changer de fournisseur plus tard requiert soit de garder les anciennes URL joignables, soit de lancer une migration volontaire d'URL média.

OpenAI (Optionnel Pour Les Builders IA)

OPENAI_API_KEY=
OPENAI_COMPONENTS_AI_FALLBACK=true
OPENAI_IMAGE_GENERATION_ENABLED=true
OPENAI_IMAGE_MODEL=gpt-image-1.5
PAGE_AI_QUEUE_DRIVER=direct
PAGE_AI_DEEP_REFINEMENT=false
PAGE_AI_WORKER_POLL_MS=1500
PAGE_AI_WORKER_ID=
  • OPENAI_COMPONENTS_AI_FALLBACK contrôle les replis IA texte/objet des flux de component builder et page builder.
  • OPENAI_IMAGE_GENERATION_ENABLED contrôle la génération d'images du page builder.
  • Les réglages runtime de site peuvent aussi désactiver ces fonctions IA via ai-components-enabled et media-image-generation-enabled sans changer les variables d'environnement.
  • Les images générées par le page builder utilisent le modèle image OpenAI configuré, gpt-image-1.5 par défaut, et sont stockées comme ressources média webp via la médiathèque d'organisation.
  • PAGE_AI_QUEUE_DRIVER contrôle le transport de réveil durable Page AI: direct en développement local, vercel-queue sur Vercel et db-worker pour un processus worker long-lived. En production, le défaut est vercel-queue uniquement lorsque les variables runtime Vercel sont présentes; sinon c'est db-worker.
  • PAGE_AI_DEEP_REFINEMENT est un toggle qualité interne uniquement environnement, non exposé comme réglage de site admin.
  • PAGE_AI_WORKER_POLL_MS et PAGE_AI_WORKER_ID sont utilisés uniquement par bun run worker:page-ai quand PAGE_AI_QUEUE_DRIVER=db-worker.

PostHog (Optionnel Pour Analytics Et Flags)

NEXT_PUBLIC_ANALYTICS_PROVIDER=posthog
NEXT_PUBLIC_ANALYTICS_CAPTURE_MODE=hybrid
NEXT_PUBLIC_POSTHOG_KEY=
NEXT_PUBLIC_POSTHOG_HOST=https://eu.i.posthog.com
NEXT_PUBLIC_POSTHOG_ENABLE_LOCAL=false
POSTHOG_PERSONAL_API_KEY=
POSTHOG_PROJECT_ID=
POSTHOG_API_HOST=https://eu.posthog.com
POSTHOG_ORG_ID_PROPERTY=organization_id
POSTHOG_FLAG_LOOKUP_TIMEOUT_MS=

Les valeurs NEXT_PUBLIC_POSTHOG_* servent à la capture, aux feature flags et à l'identification client. POSTHOG_PERSONAL_API_KEY, POSTHOG_PROJECT_ID et POSTHOG_API_HOST sont des valeurs privées server-only utilisées par les analytics de /dashboard pour interroger PostHog via l'API Query privée. POSTHOG_ORG_ID_PROPERTY vaut organization_id par défaut et doit correspondre à la propriété d'événement enregistrée pour les métriques dashboard bornées à l'organisation. POSTHOG_FLAG_LOOKUP_TIMEOUT_MS ajuste optionnellement le timeout de lookup des feature flags PostHog côté serveur; il vaut 1500 par défaut.

NEXT_PUBLIC_ANALYTICS_CAPTURE_MODE contrôle où les événements sont capturés: hybrid garde l'analytics navigateur pour le comportement produit et envoie les événements facturation/auth côté serveur, server désactive les scripts analytics navigateur et suit les vues CMS plus les conversions depuis le serveur, et client conserve l'ancienne capture uniquement navigateur. Les événements de facturation côté serveur incluent des propriétés de conversion comme revenue, value, currency, plan, product_key et les IDs Stripe.

Umami (Fournisseur Analytics Optionnel)

NEXT_PUBLIC_ANALYTICS_PROVIDER=umami
NEXT_PUBLIC_ANALYTICS_CAPTURE_MODE=hybrid
NEXT_PUBLIC_UMAMI_HOST_URL=
NEXT_PUBLIC_UMAMI_SCRIPT_URL=
NEXT_PUBLIC_UMAMI_WEBSITE_ID=
NEXT_PUBLIC_UMAMI_DOMAINS=
NEXT_PUBLIC_UMAMI_AUTO_TRACK=true
UMAMI_API_URL=
UMAMI_WEBSITE_ID=
UMAMI_API_TOKEN=
UMAMI_API_KEY=
UMAMI_USERNAME=
UMAMI_PASSWORD=
UMAMI_CMS_EVENT_PAGE_SIZE=1000

Les valeurs NEXT_PUBLIC_UMAMI_* configurent le script de tracking navigateur et sont intégrées au bundle client au build time. UMAMI_API_URL, UMAMI_WEBSITE_ID, et soit UMAMI_API_TOKEN (ou l'alias legacy UMAMI_API_KEY), soit UMAMI_USERNAME plus UMAMI_PASSWORD, sont des valeurs server-only utilisées par les fournisseurs de données analytics dashboard.

Pour une configuration sans analytics navigateur, définissez NEXT_PUBLIC_ANALYTICS_CAPTURE_MODE=server. L'app ne rendra pas le script Umami, et les événements serveur seront envoyés directement vers Umami /api/send avec un User-Agent serveur. Cela améliore la confidentialité et évite les cookies client, mais la qualité session, visiteur unique, appareil et référent est moins précise que la capture navigateur.

Plan De Contrôle MCP (Optionnel)

YAYAW_MCP_API_KEY=
YAYAW_MCP_LOCAL_USER_ID=
  • YAYAW_MCP_API_KEY est utilisé par le lanceur MCP stdio local lorsque le développement local doit vérifier une vraie clé API Better Auth.
  • YAYAW_MCP_LOCAL_USER_ID est utilisé uniquement par le lanceur stdio local lorsqu'aucune clé API n'est fournie.
  • Les clients MCP production se connectent à /api/mcp avec Authorization: Bearer <Yayaw API key or OAuth access token> et doivent stocker les secrets hors du dépôt.
  • Les métadonnées OAuth MCP sont dérivées de NEXT_PUBLIC_BASE_URL; les clients ChatGPT/App production ont besoin que cette valeur soit l'origine HTTPS publique afin que l'issuer, la ressource, JWKS et les redirections soient stables.

Mode Maintenance (Optionnel)

MAINTENANCE_MODE=false
MAINTENANCE_MODE_END_DATE=

Runtime De Déploiement

DEPLOYMENT_PROVIDER=
DEPLOYMENT_URL=
DEPLOYMENT_ENV=
DEPLOYMENT_GIT_COMMIT_SHA=
DEPLOYMENT_GIT_COMMIT_REF=
PUBLIC_DOMAIN_PROVIDER=
APP_MANAGED_HOSTS=
RESERVED_PUBLIC_DOMAIN_SUFFIXES=
PUBLIC_DOMAIN_CNAME_TARGET=
PUBLIC_DOMAIN_IPV4_TARGETS=
PUBLIC_DOMAIN_TXT_PREFIX=_yayaw
VERCEL_URL=
VERCEL_TOKEN=
VERCEL_PROJECT_ID=
VERCEL_TEAM_ID=
  • DEPLOYMENT_PROVIDER peut valoir vercel, static ou local. Laissez vide pour auto-détecter Vercel via VERCEL/VERCEL_URL, les déploiements statiques via DEPLOYMENT_URL, et le local sinon.
  • DEPLOYMENT_URL, DEPLOYMENT_ENV, DEPLOYMENT_GIT_COMMIT_SHA et DEPLOYMENT_GIT_COMMIT_REF fournissent les métadonnées de déploiement dashboard/plan de contrôle pour Docker ou d'autres runtimes non Vercel.
  • PUBLIC_DOMAIN_PROVIDER peut valoir vercel ou manual-dns. Quand il est vide, Vercel est sélectionné uniquement si VERCEL_PROJECT_ID et VERCEL_TOKEN sont configurés; sinon la vérification DNS manuelle est utilisée.
  • APP_MANAGED_HOSTS ajoute des hôtes possédés par l'app, séparés par des virgules, que les domaines publics d'organisation ne peuvent pas réclamer.
  • RESERVED_PUBLIC_DOMAIN_SUFFIXES ajoute des suffixes, comme .preview.example, que les domaines publics personnalisés ne peuvent pas réclamer. .vercel.app est toujours réservé.
  • PUBLIC_DOMAIN_CNAME_TARGET, PUBLIC_DOMAIN_IPV4_TARGETS et PUBLIC_DOMAIN_TXT_PREFIX alimentent les indications du fournisseur DNS manuel et le challenge TXT de propriété.
  • VERCEL_URL est fourni par Vercel et permet à l'app de reconnaître les hôtes de déploiement comme des hôtes applicatifs managés.
  • VERCEL_TOKEN, VERCEL_PROJECT_ID et VERCEL_TEAM_ID optionnel sont des valeurs server-only utilisées pour ajouter, inspecter et vérifier les domaines publics d'organisation via l'API de domaines projet Vercel.

Source De Vérité

Gardez .env.example synchronisé avec l'usage réel du code lorsque vous ajoutez ou supprimez des variables. Documentez les étapes de récupération dans Configuration de l'environnement de déploiement chaque fois qu'un opérateur doit collecter une valeur depuis un fournisseur externe.

Dépannage De L'Outillage Local

Certaines machines locales peuvent rencontrer un blocage du service esbuild lors de l'exécution des générateurs Drizzle ou docs.

Si une commande semble bloquée:

  1. Utilisez les scripts safe avec timeout:
bun run docs:generate
bun run db:generate
bun run db:push
  1. Si cela échoue encore, réinstallez les dépendances:
rm -rf node_modules
bun install
  1. Réessayez la commande et vérifiez avec:
bun run check
bun run build