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éfaut10connexions en développement et3en production/serverless. La production utilise aussi par défaut un timeout de connexion de10secondes, un timeout d'inactivité de20secondes, une durée de vie maximale de300secondes, un timeout de requête de20secondes et les prepared statements désactivés pour la compatibilité avec les poolers. AugmentezDATABASE_POOL_MAXou les valeurs de cycle de vie seulement si la cible de déploiement supporte les connexions supplémentaires par runtime. BETTER_AUTH_SECRETdoit être un secret stable, server-only et à forte entropie en production et dans les runtimes auto-hébergés.DATABASE_STATEMENT_TIMEOUT_SECONDSapplique 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=trueactive l'ensemble complet de requêtes de publication et d'activité CMS sur/dashboard/content. Gardezfalsepar 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=180NEXT_BUILD_WORKERScontrôle le nombre de workers Next.js utilisés pendantnext build. Les builds Docker auto-hébergés utilisent1par défaut pour rester stables sur de petites machines.NEXT_STATIC_PAGE_GENERATION_TIMEOUTaugmente 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.appNEXT_PUBLIC_BASE_URLest 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_URLn'est pas lu par l'application.BETTER_AUTH_URLn'est pas requis par le runtime courant parce que Better Auth reçoitbaseURLdepuisNEXT_PUBLIC_BASE_URL. Si un ancien déploiement le définit encore, gardez-le aligné avechttps://yayaw.app.preview.yayaw.appest le domaine de prévisualisation adossé à la branche durablepreview.- Gardez
www.yayaw.appcomme redirection de domaine projet Vercel versyayaw.app; l'app normalise aussi les requêtes de pageswwwavant le routage i18n. - Gardez les hôtes
.euretirés uniquement comme redirections Vercel308vers leurs remplaçants.app, par exempleyayaw.euetwww.yayaw.euversyayaw.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 dansBETTER_AUTH_TRUSTED_ORIGINSparce 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_SECRETest utilisé par l'endpoint webhook du plugin Better Auth Stripe.STRIPE_ONE_TIME_WEBHOOK_SECRETest 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-accessaprè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 avecBILLING_CODE_ACCESS_GITHUB_REPOSITORY,BILLING_CODE_ACCESS_GITHUB_APP_IDetBILLING_CODE_ACCESS_GITHUB_APP_INSTALLATION_ID. - Gardez les secrets GitHub uniquement en variables d'environnement:
BILLING_CODE_ACCESS_GITHUB_APP_PRIVATE_KEYpour le provisioning GitHub App de production, ouBILLING_CODE_ACCESS_GITHUB_TOKENcomme 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_URLsur l'hôte production canonique. - Définissez le
NEXT_PUBLIC_BASE_URLde prévisualisation sur l'hôte branch-backed stable lorsqu'il est configuré. - Ne mélangez pas les hôtes
wwwet non-wwwpour les sessions authentifiées. - Gardez
BETTER_AUTH_TRUSTED_ORIGINSpour les hôtes preview/local requis. L'hôte canonique et sa variantewwwsont déjà dérivés deNEXT_PUBLIC_BASE_URL. - Pour les routes préfixées par locale, préférez
@/i18n/navigation(Link,useRouter,usePathname) ànext/linketnext/navigationdans 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=E-mail (Optionnel Mais Requis Pour Invitations/Reset/Magic Link)
RESEND_API_KEY=
EMAIL_SENDER=team@yayaw.app
EMAIL_SUPPORT=support@yayaw.app
EMAIL_USERNAME=Yayaw TeamEMAIL_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=trueSTORAGE_MEDIA_BUCKETvautmediapar défaut.STORAGE_PUBLIC_BASE_URLest requis pour le stockage compatible S3 et doit être une URL publique capable de servir/<bucket>/<object-key>.- Si
STORAGE_PUBLIC_BASE_URLutilise 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_URLetSUPABASE_SERVICE_ROLE_KEYpour 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=truepour MinIO et la plupart des endpoints compatibles S3 locaux. bun run seedtéléverse les ressources par défaut de variables globales de site dansSTORAGE_MEDIA_BUCKETlorsque 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_FALLBACKcontrôle les replis IA texte/objet des flux de component builder et page builder.OPENAI_IMAGE_GENERATION_ENABLEDcontrô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-enabledetmedia-image-generation-enabledsans 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.5par défaut, et sont stockées comme ressources médiawebpvia la médiathèque d'organisation. PAGE_AI_QUEUE_DRIVERcontrôle le transport de réveil durable Page AI:directen développement local,vercel-queuesur Vercel etdb-workerpour un processus worker long-lived. En production, le défaut estvercel-queueuniquement lorsque les variables runtime Vercel sont présentes; sinon c'estdb-worker.PAGE_AI_DEEP_REFINEMENTest un toggle qualité interne uniquement environnement, non exposé comme réglage de site admin.PAGE_AI_WORKER_POLL_MSetPAGE_AI_WORKER_IDsont utilisés uniquement parbun run worker:page-aiquandPAGE_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=1000Les 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_KEYest 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_IDest utilisé uniquement par le lanceur stdio local lorsqu'aucune clé API n'est fournie.- Les clients MCP production se connectent à
/api/mcpavecAuthorization: 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_PROVIDERpeut valoirvercel,staticoulocal. Laissez vide pour auto-détecter Vercel viaVERCEL/VERCEL_URL, les déploiements statiques viaDEPLOYMENT_URL, et le local sinon.DEPLOYMENT_URL,DEPLOYMENT_ENV,DEPLOYMENT_GIT_COMMIT_SHAetDEPLOYMENT_GIT_COMMIT_REFfournissent les métadonnées de déploiement dashboard/plan de contrôle pour Docker ou d'autres runtimes non Vercel.PUBLIC_DOMAIN_PROVIDERpeut valoirverceloumanual-dns. Quand il est vide, Vercel est sélectionné uniquement siVERCEL_PROJECT_IDetVERCEL_TOKENsont configurés; sinon la vérification DNS manuelle est utilisée.APP_MANAGED_HOSTSajoute 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_SUFFIXESajoute des suffixes, comme.preview.example, que les domaines publics personnalisés ne peuvent pas réclamer..vercel.appest toujours réservé.PUBLIC_DOMAIN_CNAME_TARGET,PUBLIC_DOMAIN_IPV4_TARGETSetPUBLIC_DOMAIN_TXT_PREFIXalimentent les indications du fournisseur DNS manuel et le challenge TXT de propriété.VERCEL_URLest 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_IDetVERCEL_TEAM_IDoptionnel 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:
- Utilisez les scripts safe avec timeout:
bun run docs:generate
bun run db:generate
bun run db:push- Si cela échoue encore, réinstallez les dépendances:
rm -rf node_modules
bun install- Réessayez la commande et vérifiez avec:
bun run check
bun run build