Variables d'environnement
Le rôle de chaque paramètre des fichiers .env de l'API et des frontends, et ceux dont vous avez besoin.
Pour le pack Full Stack
Où se trouvent les paramètres
| Fichier | Lu par | Contient des secrets |
|---|---|---|
back-end/.env | L'API, avec yarn dev et dans Docker Compose | Oui. Ne le versionnez jamais. |
storefront/.env | La boutique, au moment du build | Non. Toutes les valeurs sont publiques. |
admin-dashboard/.env | Le tableau de bord admin, au moment du build | Non. Toutes les valeurs sont publiques. |
.env à côté de docker-compose.yml | Docker Compose, pour le pack Full Stack | Non |
Créez chaque fichier à partir du .env.example placé à côté, qui documente chaque variable : cp .env.example .env. Les exemples fonctionnent tels quels pour une exécution locale.
Où se trouvent les paramètres
Un seul fichier, storefront/.env, lu au moment du build de la boutique. Toutes ses valeurs sont publiques : il ne contient donc jamais de secret. Omettez-le pour fonctionner sur la boutique d'exemple ; créez-le à partir de .env.example quand vous connectez une API : cp .env.example .env.
Où se trouvent les paramètres
Un seul fichier, admin-dashboard/.env, lu au moment du build du tableau de bord. Toutes ses valeurs sont publiques : il ne contient donc jamais de secret. Omettez-le pour fonctionner sur la boutique d'exemple ; créez-le à partir de .env.example quand vous connectez une API : cp .env.example .env.
Où se trouvent les paramètres
Un seul fichier, back-end/.env, lu par l'API avec yarn dev, et par un conteneur quand vous le lui passez avec --env-file .env. Il contient des secrets : ne le committez jamais. Créez-le à partir de .env.example, qui documente chaque variable et fonctionne tel quel pour une exécution en local : cp .env.example .env.
Paramètres essentiels de l'API
L'API vérifie JWT_SECRET et CORS_ORIGIN avant de démarrer. Si l'une manque ou est inutilisable, elle s'arrête avec une ligne indiquant ce qu'il faut corriger.
| Variable | Rôle |
|---|---|
NODE_ENV | development en local, qui crée et met à jour les tables au démarrage. production sur un serveur en ligne, qui ne touche jamais aux tables. |
PORT | Le port de l'API, 8000. Les deux frontends pointent vers lui. |
DB_TYPE | sqlite (par défaut) ou mysql. |
SQLITE_DATABASE | Chemin du fichier SQLite, ./database.sqlite par défaut. |
JWT_SECRET | Signe chaque connexion. Obligatoire. La valeur d'exemple n'est acceptée qu'en développement. |
JWT_EXPIRATION | Durée d'une connexion, 7d par défaut. |
CORS_ORIGIN | Les adresses de la boutique et du tableau de bord admin, séparées par une virgule. Non définie, elle revient aux deux ports locaux ; obligatoire en production. |
FRONTEND_URL | L'adresse du tableau de bord admin, depuis laquelle ses notifications en direct se connectent. Obligatoire en production pour ces notifications. |
TRUST_PROXY | Optionnel. Jusqu'où l'API fait confiance à X-Forwarded-For pour compter les tentatives de connexion par visiteur. Non définie, elle ne le lit que depuis un proxy sur une adresse privée ; false, jamais ; un nombre fait confiance à exactement ce nombre de proxies. |
RESEED_REVIEWS | Optionnel. 1 fait réécrire par yarn seed les avis de démonstration. |
Générez votre propre JWT_SECRET avec :
node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"Tout identifiant ci-dessous qui garde exactement sa valeur de .env.example compte comme non défini : la fonctionnalité correspondante s'affiche alors comme désactivée au lieu d'échouer à son premier appel.
Utiliser MySQL au lieu de SQLite
Créez une base de données vide, puis définissez le pilote et la connexion dans back-end/.env :
DB_TYPE=mysql
DB_HOST=your-mysql-host
DB_PORT=3306
DB_USERNAME=your-mysql-username
DB_PASSWORD=your-mysql-password
DB_DATABASE=your-database-namePuis exécutez yarn seed pour la boutique de démonstration, ou yarn db:sync pour les tables sans données. L'API en fonctionnement ne crée et ne met à jour elle-même les tables qu'avec NODE_ENV=development : avec NODE_ENV=production, l'une de ces commandes doit donc tourner avant le premier démarrage (yarn db:sync:prod ou yarn seed:prod après yarn build).
Boutique et tableau de bord admin
Chaque valeur NEXT_PUBLIC_* est compilée dans le JavaScript chargé par le navigateur, et toute personne qui ouvre la page peut la lire. Ne mettez jamais de secret dans ces fichiers, et reconstruisez après en avoir modifié un.
| Variable | Application | Rôle |
|---|---|---|
NEXT_PUBLIC_API_BASE_URL | Les deux | L'adresse de l'API, /api compris, par exemple http://localhost:8000/api. C'est en la définissant que vous désactivez la boutique d'exemple ; vide ou absente, l'application fonctionne sur sa boutique d'exemple. |
NEXT_PUBLIC_MEDIA_HOSTNAME | Les deux | L'hôte public de votre bucket de médias, celui de R2_PUBLIC_URL, sans https:// ni barre oblique finale. Laissez-le vide tant que vous n'avez pas de bucket. |
NEXT_PUBLIC_SITE_URL | Boutique | L'adresse publique de la boutique, utilisée pour les liens canonical et hreflang, les cartes de partage, les données structurées, robots.txt et sitemap.xml. Réglez-la sur votre vrai domaine avant la mise en ligne. |
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY | Boutique | Une vraie clé pk_test_… ou pk_live_…. Vide, ou avec une valeur qui n'est pas une vraie clé, l'option carte du paiement est désactivée et les clients sont invités à choisir le paiement à la livraison. |
NEXT_PUBLIC_DEMO_CHECKOUT | Boutique | true préremplit le paiement avec un acheteur généré, pour les démos. Laissez false pour une vraie boutique. |
API_INTERNAL_URL | Les deux | Optionnel, côté serveur uniquement. L'adresse à laquelle le serveur de l'application joint l'API lorsqu'elle diffère de celle du navigateur, comme dans Docker Compose. Laissez-la vide ailleurs. |
NEXT_PUBLIC_WEBSOCKET_BASE_URL | Admin | L'adresse de l'API sans /api, pour les notifications en direct et les mises à jour de permissions. Optionnel : vide, elle est déduite de NEXT_PUBLIC_API_BASE_URL. |
NEXT_PUBLIC_STOREFRONT_URL | Admin | La destination du lien « Go to storefront » dans la barre de navigation du tableau de bord. |
BUILD_STANDALONE | Les deux | true fait produire à yarn build un serveur autonome, ce que les Dockerfiles définissent. Sinon, laissez-la non définie. |
Les balises marketing de la boutique sont aussi des valeurs NEXT_PUBLIC_*.
Options de Docker Compose
Rien n'est à définir pour une exécution en local. Pour changer quelque chose, placez-le dans un fichier .env à côté de docker-compose.yml et relancez docker compose up --build : les frontends intègrent ces valeurs à la compilation.
| Variable | Rôle |
|---|---|
SITE_PORT, ADMIN_PORT, API_PORT | Les ports de votre ordinateur : 3030, 3031 et 8000 par défaut. Définissez-en un quand un autre programme utilise déjà ce port, par exemple ADMIN_PORT=3041. Les adresses ci-dessous, CORS_ORIGIN et FRONTEND_URL les suivent. |
SITE_URL, ADMIN_URL, API_URL | L'adresse à laquelle le navigateur joint chaque application. Définissez les trois quand vous servez la stack sur vos propres domaines ; CORS_ORIGIN et FRONTEND_URL de l'API en sont déduits. |
MEDIA_HOSTNAME | L'hôte public de votre bucket, avec les variables R2_* dans back-end/.env. |
SEED_DEMO_DATA | false démarre avec des tables vides au lieu de la boutique de démonstration. |
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY | Le formulaire de carte de la boutique. |
NEXT_PUBLIC_GTM_ID, NEXT_PUBLIC_GA4_MEASUREMENT_ID, NEXT_PUBLIC_META_PIXEL_ID, NEXT_PUBLIC_TIKTOK_PIXEL_ID, NEXT_PUBLIC_SNAPCHAT_PIXEL_ID, NEXT_PUBLIC_PINTEREST_TAG_ID, NEXT_PUBLIC_ANALYTICS_CURRENCY | Les balises marketing de la boutique, toutes optionnelles. |
Le conteneur de l'API lit aussi back-end/.env lorsqu'il existe : les clés de paiement, de médias et d'IA se définissent donc à un seul endroit, pour yarn dev comme pour Docker. Le fichier compose l'emporte pour les quelques valeurs qui diffèrent dans un conteneur : le chemin de la base de données, le port, NODE_ENV=production, CORS_ORIGIN et FRONTEND_URL. Les données vivent dans le volume ecommerce-data.
Stockage des médias
Les photos de produits, les images de catégories, les avatars, les pièces jointes de conversation, les résultats du studio IA et les photos de la cabine d'essayage sont envoyés dans un bucket Cloudflare R2, ou n'importe quel bucket compatible S3. Définissez les cinq variables dans back-end/.env et donnez aux deux frontends l'hôte public du bucket via NEXT_PUBLIC_MEDIA_HOSTNAME (avec Docker Compose, MEDIA_HOSTNAME).
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_ENDPOINT=https://your-account-id.r2.cloudflarestorage.com
R2_BUCKET_NAME=
R2_PUBLIC_URL=https://your-public-url.r2.devSans bucket, yarn seed enregistre chaque image de produit et de catégorie sous forme de chemin /mock-media/…, et les deux frontends livrent ces 35 fichiers dans public/mock-media/ : le catalogue s'affiche donc sans aucun envoi. Seul l'envoi de nouvelles images cesse de fonctionner : il répond 503 tant que le bucket n'est pas configuré.
Avec un bucket, le seed y envoie les images de son catalogue. Gardez public/mock-media/ dans les deux frontends tant qu'un produit pointe encore dessus.
Paiements par carte
Les paiements par carte passent par Stripe : STRIPE_SECRET_KEY et STRIPE_WEBHOOK_SECRET dans back-end/.env, et NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY pour la boutique. Sans elles, aucun paiement par carte n'est encaissé, et le paiement à la livraison fonctionne normalement.
STRIPE_SECRET_KEY=sk_test_your-stripe-secret-key
STRIPE_WEBHOOK_SECRET=whsec_your-webhook-secretLe template ne fournit aucun transport d'e-mails : aucun message n'est donc jamais envoyé par e-mail. Hors production, le jeton de réinitialisation du mot de passe d'un client est écrit dans le journal de l'API à la place ; avec NODE_ENV=production, il n'est envoyé nulle part. Connectez votre propre service d'e-mails avant la mise en ligne : le point d'accroche est forgotPassword dans back-end/src/modules/customer-auth/customer-auth.controller.ts.
Fonctionnalités IA
Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.
Activer les fonctionnalités IA : les clés des fournisseurs, les modèles utilisés par chaque fonctionnalité et ce que chacune coûte.
La boutique d'exemple des frontends
Les deux frontends fonctionnent sans API. Démarré ou construit sans NEXT_PUBLIC_API_BASE_URL, chacun répond à chaque requête à partir d'une boutique d'exemple dans le navigateur et affiche une mention « Sample data ». C'est en définissant l'adresse que vous la désactivez.
- N'importe quel e-mail et mot de passe vous connectent en tant que client d'exemple sur la boutique. Dans le tableau de bord, n'importe quel e-mail valide avec un mot de passe d'au moins 6 caractères vous connecte en tant que Super Admin.
- Les écritures sont réelles et conservées dans le stockage du navigateur : elles survivent donc à un rechargement. Pour repartir de zéro, exécutez
localStorage.removeItem("mock_db_v1"); location.reload();dans la console du navigateur. - Le paiement sur la boutique aboutit sans appeler Stripe.
- Dans le tableau de bord, l'assistant IA et le studio IA restent indisponibles, car tous deux ont besoin des clés de l'API.
- Une fois votre API en ligne,
yarn remove:mockdans l'une ou l'autre application supprime la boutique d'exemple et sa mention. La commande laissepublic/mock-media/en place, car un backend rempli sans bucket y fait pointer ses images.
Comment fonctionne la boutique d'exemple
Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.
Comment les requêtes sont dirigées vers la boutique d'exemple, et comment la modifier ou l'étendre.
Mode démo
Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.
Faire tourner une démo publique : l'interrupteur de démo, les comptes par visiteur et ce que les visiteurs peuvent modifier.
Mise en ligne
Avant de déployer quelque part en public :
- Définissez
NODE_ENV=productionet unJWT_SECRETlong et aléatoire qui vous est propre dansback-end/.env. - Réglez
CORS_ORIGINsur les adresses de votre boutique et de votre tableau de bord admin, séparées par une virgule, etFRONTEND_URLsur l'adresse du tableau de bord admin. - Sur une base de données vide, exécutez
yarn build, puisyarn db:sync:produne fois (ouyarn seed:prodpour la boutique de démonstration), puisyarn start:prod. - Faites pointer le health check de votre hébergeur vers
/api/health. - Construisez chaque frontend avec
NEXT_PUBLIC_API_BASE_URLpointant vers votre API déployée et leNEXT_PUBLIC_SITE_URLde la boutique sur sa propre adresse. - Changez le mot de passe du Super Admin, ou partez de tables vides.
Pas pour une boutique avec de vraies commandes
yarn railway:setup construit, télécharge le modèle de suppression d'arrière-plan, supprime toutes les tables et remplit la base, à chaque exécution. La commande convient à un déploiement de démo, jamais à la commande de build d'une vraie boutique.