Aller à l'article
Aniq-UI

TicketoryVariables d'environnement

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

FichierLu parContient des secrets
back-end/.envL'API, avec yarn dev et dans Docker ComposeOui. Ne le versionnez jamais.
storefront/.envLe site : les valeurs NEXT_PUBLIC_* au moment du build, REVALIDATE_SECRET et API_INTERNAL_URL sur son serveurSeulement REVALIDATE_SECRET, qui n'atteint jamais le navigateur
admin-dashboard/.envLe tableau de bord organisateur, au moment du buildNon. Toutes les valeurs sont publiques.
.env à côté de docker-compose.ymlDocker Compose, pour le full stack, et le conteneur d'API, qui le lit avant back-end/.envREVALIDATE_SECRET sur un serveur ouvert à Internet, et OWNER_PASSWORD quand vous l'y mettez

Créez le fichier de chaque application à partir du .env.example situé à côté, qui documente chaque variable : cp .env.example .env. Les exemples fonctionnent tels quels pour un lancement local, et le démarrage avec Docker Compose n'a besoin d'aucun fichier.

Où se trouvent les paramètres

Un seul fichier, .env dans le dossier du site. Les valeurs NEXT_PUBLIC_* qu'il contient sont lues au build du site et sont publiques : elles ne contiennent donc jamais de secret. REVALIDATE_SECRET et API_INTERNAL_URL sont lus par le serveur du site lui-même à l'exécution et n'atteignent jamais le navigateur. Créez-le à partir de .env.example, qui pointe vers une API sur http://localhost:8000 : cp .env.example .env. Avec Docker, passez les valeurs NEXT_PUBLIC_* en --build-arg et les deux autres avec -e.

Où se trouvent les paramètres

Un seul fichier, .env dans le dossier du tableau de bord, lu lors du build du tableau de bord. Toutes ses valeurs sont publiques : il ne contient donc jamais de secret, les clés des fournisseurs se trouvent dans le .env de l'API. Créez-le à partir de .env.example, qui pointe vers une API sur http://localhost:8000 : cp .env.example .env. Avec Docker, passez les mêmes valeurs en --build-arg.

Où se trouvent les paramètres

Un seul fichier, .env dans le dossier de l'API, lu par l'API avec yarn dev, et par un conteneur quand vous ajoutez --env-file .env -e NODE_ENV=production à son docker run. Il contient des secrets : ne le versionnez jamais. Créez-le à partir de .env.example, qui documente chaque variable et fonctionne tel quel pour un lancement local : cp .env.example .env.

L'image Docker définit ses propres valeurs par défaut, si bien que docker run fonctionne sans fichier : SQLite sur /data/database.sqlite, fichiers envoyés dans /data/uploads, exports CSV dans /data/exports, CORS_ORIGIN pour les deux frontends locaux, FRONTEND_URL=http://localhost:3031, STOREFRONT_URL=http://localhost:3030, PUBLIC_API_URL=http://localhost:8000, PUBLIC_MEDIA_URL=http://localhost:8000/media et SEED_DEMO_DATA=false. Remplacez-en n'importe laquelle avec -e.

Paramètres essentiels de l'API

L'API vérifie JWT_SECRET et, en production, CORS_ORIGIN avant de démarrer. Si l'une manque ou est inutilisable, elle s'arrête avec une ligne qui indique quoi corriger.

VariableRôle
NODE_ENVdevelopment 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.
PORTLe port de l'API, 8000. Les deux frontends pointent vers lui.
DB_TYPEsqlite (la valeur par défaut si non défini) ou mysql.
SQLITE_DATABASEChemin du fichier SQLite, ./database.sqlite dans .env.example.
JWT_SECRETSigne chaque connexion, ainsi que les codes QR des billets tant que TICKET_SECRET n'est pas défini. Obligatoire. La valeur d'exemple n'est acceptée que hors production.
JWT_EXPIRATIONDurée d'une connexion, 7d si non défini.
CORS_ORIGINLes adresses du site et du tableau de bord, séparées par des virgules. Non défini, seuls http://localhost:3030 et http://localhost:3031 sont autorisés, jamais toutes les origines ; obligatoire en production.
FRONTEND_URLL'adresse du tableau de bord, la seule origine qu'acceptent ses connexions en direct (notifications et changements de permissions), http://localhost:3031 si non défini.
STOREFRONT_URLL'adresse du site : les pages de paiement y renvoient les acheteurs, les e-mails de billets y renvoient par un lien, et l'API actualise par elle les pages du site.
PUBLIC_API_URLL'adresse publique propre de l'API, utilisée dans les liens signés des PDF de billets, des fichiers de calendrier et des exports CSV, et dans l'adresse de retour de PayPal.
REVALIDATE_SECRETOptionnel. La même valeur que REVALIDATE_SECRET dans le .env du site. Avec elle, l'API demande au site de reconstruire une page d'événement, de lieu ou d'organisateur dès qu'elle est publiée, modifiée, annulée ou complète ; sans elle, ces pages s'actualisent d'elles-mêmes en moins d'une heure.
STOREFRONT_INTERNAL_URLOptionnel. L'endroit où l'API joint le site quand il diffère de STOREFRONT_URL, comme dans Docker (http://storefront:3030).
TICKET_SECRETOptionnel. Signe le code QR de chaque billet et les liens de téléchargement ; s'il n'est pas défini, JWT_SECRET est utilisé. Définissez-le une fois, avant de vendre : le changer plus tard invalide tous les codes QR déjà émis.
EXPORT_DIROptionnel. L'endroit où les exports CSV sont écrits avant d'être téléchargés, ./exports si non défini.
TRUST_PROXYOptionnel. Le nombre de reverse proxies devant l'API, pour que les limites de connexion, du formulaire de contact et du scan à l'entrée comptent le vrai visiteur.
RATE_LIMIT_LOGINOptionnel. Nombre de connexions échouées qu'une adresse peut faire en 15 minutes avant 429, 10 par défaut.
SEED_DEMO_DATALu uniquement par l'image Docker, sur un volume qui n'a pas encore de base : true la crée avec les quatre organisateurs d'exemple et leurs comptes, false avec les tables seulement, après quoi l'API crée votre propre espace de travail à partir des variables du propriétaire ci-dessous.

Générez votre propre JWT_SECRET avec :

Terminal
node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"

Chaque fonctionnalité optionnelle ci-dessous reste désactivée tant que ses lignes dans .env.example restent en commentaire.

Votre propre espace de travail et son propriétaire

Lues uniquement sur une base sans compte d'équipe ni espace de travail (les tables de yarn db:sync, ou un volume Docker démarré avec SEED_DEMO_DATA=false). Le premier démarrage de l'API crée alors, à partir d'elles, les rôles, les paramètres du site, les catégories d'événements, un espace de travail et son propriétaire, une seule fois. Dès qu'un compte d'équipe existe, elles sont ignorées.

Le .env de l'API
OWNER_EMAIL=you@your-domain.com
OWNER_PASSWORD=a-long-password-of-your-own
OWNER_NAME=Your Name
WORKSPACE_NAME=Your organisation
VariableRôle
OWNER_EMAILL'e-mail de connexion du propriétaire pour le tableau de bord.
OWNER_PASSWORDAu moins 10 caractères. Avec NODE_ENV=production, l'exemple de .env.example et le mot de passe des comptes d'exemple sont refusés. Jamais affiché, et sans risque à retirer une fois le propriétaire créé.
OWNER_NAMEOptionnel, Owner si non défini. Modifiable plus tard dans le profil du propriétaire.
WORKSPACE_NAMEOptionnel, Ticketory si non défini. Le nom de votre organisation, modifiable plus tard sous Paramètres, Général.

Dans le Docker Compose du Full Stack, elles peuvent aller dans le .env à côté de docker-compose.yml, avec SEED_DEMO_DATA=false : Compose transmet ce fichier à l'API en premier puis back-end/.env, dont la valeur l'emporte quand les deux en définissent une. Sans ces variables, l'API démarre et indique lesquelles définir.

Paiements

Le paiement envoie l'acheteur vers la page propre de Stripe ou de PayPal : les données de carte ne sont donc jamais saisies sur votre site. Chaque fournisseur est proposé dès que ses clés sont définies. Utilisez d'abord des clés de test : elles ne déplacent aucun argent.

Le .env de l'API
STRIPE_SECRET_KEY=sk_test_your_key
STRIPE_WEBHOOK_SECRET=whsec_your_secret
PAYPAL_CLIENT_ID=your-client-id
PAYPAL_CLIENT_SECRET=your-client-secret
PAYPAL_WEBHOOK_ID=your-webhook-id
PAYPAL_ENV=sandbox
VariableRôle
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRETLe Checkout hébergé de Stripe. Une clé commençant par sk_test_ ou rk_test_ est en mode test. Le webhook est https://<your-api>/api/webhooks/stripe, et envoie checkout.session.completed, checkout.session.async_payment_succeeded, checkout.session.async_payment_failed et refund.updated.
PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET, PAYPAL_WEBHOOK_IDPayPal. Le webhook est https://<your-api>/api/webhooks/paypal (PAYMENT.CAPTURE.COMPLETED, PAYMENT.CAPTURE.DENIED, PAYMENT.CAPTURE.REFUNDED), et son identifiant va dans PAYPAL_WEBHOOK_ID.
PAYPAL_ENVsandbox ou live. Non défini signifie sandbox.
PAYMENTS_SIMULATORLe paiement de test, qui règle une commande sans déplacer d'argent. auto (la valeur par défaut) le propose tant qu'aucune clé de production n'est définie, donc des clés de test le conservent ; on ou off remplace ce choix.

Les billets gratuits n'ont besoin de rien de tout cela : une commande sans rien à payer est confirmée au paiement, avec ou sans clés. Ticketory ne prélève aucune taxe lui-même : configurez la fiscalité de votre pays avant d'encaisser de vrais paiements.

E-mail

Les billets, codes d'inscription, réinitialisations de mot de passe, nouvelles de remboursement et rappels d'événement sont envoyés via Resend dès que les deux variables sont définies. D'ici là, chaque e-mail est écrit dans le journal de l'API, c'est là qu'on lit un code d'inscription sur une installation neuve (avec Docker : docker compose logs api).

Le .env de l'API
RESEND_API_KEY=re_your_key
MAIL_FROM=Ticketory <tickets@your-domain.com>
EVENT_REMINDER_HOURS=24

EVENT_REMINDER_HOURS est le délai avant un événement auquel part son rappel : 24 si non défini, au plus 168 (une semaine), et 0 désactive les rappels. Chaque e-mail concernant une commande (billets, remboursements, avis d'annulation et rappel) est rédigé dans la langue de la commande.

Utiliser MySQL au lieu de SQLite

Créez une base de données vide, puis définissez le pilote et la connexion dans le .env de l'API :

Le .env de l'API
DB_TYPE=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=
DB_DATABASE=ticketory

Lancez ensuite yarn seed pour les données d'exemple, ou yarn db:sync pour les tables sans données. L'API en marche ne crée et ne met à jour les tables d'elle-même que si NODE_ENV=development : avec NODE_ENV=production, l'une de ces commandes se lance donc avant le premier démarrage (yarn seed:prod ou yarn db:sync:prod après yarn build). L'image Docker le fait d'elle-même sur SQLite uniquement : sur MySQL, lancez-le une fois vous-même.

Images et fichiers envoyés

L'API sert elle-même les images d'exemple, depuis public/media/ticketory (les symboles de catégories, les logos de marque, l'emblème de l'assistant et les photos d'exemple du studio), sur /media/ticketory/…. Les fichiers envoyés depuis le tableau de bord (les photos de lieux vides pour le studio, les photos jointes à une question de l'assistant) et les concepts terminés du studio sont stockés sur le disque de l'API sous MEDIA_UPLOAD_DIR et servis sur /media/uploads/…, sauf si un bucket est défini.

Le .env de l'API
PUBLIC_MEDIA_URL=http://localhost:8000/media
MEDIA_UPLOAD_DIR=./public/media/uploads

PUBLIC_MEDIA_URL est l'adresse à laquelle /media est joint depuis un navigateur. Chaque adresse d'image en est construite, et l'API y ramène celles déjà enregistrées au démarrage : déplacer l'API conserve donc toutes les images. Sur un serveur, pointez MEDIA_UPLOAD_DIR vers un stockage persistant ; avec Docker, il est dans le volume de données.

Pour envoyer les fichiers vers Cloudflare R2, ou tout bucket compatible S3, définissez les cinq variables. Donnez aux deux frontends l'hôte public du bucket via NEXT_PUBLIC_MEDIA_HOSTNAME (avec Docker Compose, MEDIA_HOSTNAME) pour que Next.js redimensionne ces images.

Le .env de l'API
R2_ACCESS_KEY_ID=your-r2-access-key-id
R2_SECRET_ACCESS_KEY=your-r2-secret-access-key
R2_ENDPOINT=https://your-account-id.r2.cloudflarestorage.com
R2_BUCKET_NAME=your-bucket-name
R2_PUBLIC_URL=https://your-public-url.r2.dev

Les images sont réencodées en JPEG à l'envoi, sur 1 920 pixels de large au plus. Les vidéos sont acceptées en MP4, WebM, MOV ou M4V, jusqu'à 150 Mo.

Site et tableau de bord organisateur

Chaque valeur NEXT_PUBLIC_* est compilée dans le JavaScript que charge le navigateur, et toute personne qui ouvre la page peut la lire. N'y mettez jamais de secret, et reconstruisez (ou redémarrez yarn dev) après en avoir changé une.

VariableApplicationRôle
NEXT_PUBLIC_API_BASE_URLLes deuxL'adresse de l'API, /api compris, http://localhost:8000/api par défaut.
NEXT_PUBLIC_SITE_URLLes deuxL'adresse publique du site, http://localhost:3030 par défaut. Sur le site, les URL canoniques, les variantes de langue, les cartes de partage, robots.txt et le sitemap en sont construits ; dans le tableau de bord, le lien « View website » et les aperçus d'événement.
NEXT_PUBLIC_DASHBOARD_URLLes deuxL'adresse du tableau de bord. Sur le site, l'endroit où « Sell tickets » et les liens organisateur envoient un organisateur pour se connecter (http://localhost:3031). Dans le tableau de bord, la base de l'image affichée quand un lien du tableau de bord est partagé ; vide, elle utilise domain.url dans src/config/brand.config.ts.
NEXT_PUBLIC_MEDIA_HOSTNAMELes deuxOptionnel. Les hôtes https qui servent les images, séparés par des virgules : l'hôte public de votre bucket, comme pub-1234.r2.dev, le domaine de l'API, ou les deux. Les images de ces hôtes sont redimensionnées par Next.js ; toute autre image se charge telle quelle. Des hôtes seulement, sans https://. Laissez vide tant que l'API tourne sur localhost.
NEXT_PUBLIC_WEBSOCKET_BASE_URLTableau de bordL'adresse de l'API sans /api, pour les notifications en direct.
NEXT_PUBLIC_MAP_STYLE_LIGHT, NEXT_PUBLIC_MAP_STYLE_DARKTableau de bordStyles de tuiles de carte optionnels. Non définis, le thème clair affiche le style Positron d'OpenFreeMap et le thème sombre son style Dark, qui n'exigent aucune clé.
NEXT_PUBLIC_PLACE_SEARCH_URLTableau de bordLa recherche de lieux dans le sélecteur de carte de l'éditeur de lieux, https://photon.komoot.io/api si non défini. Tout géocodeur qui répond avec la même forme fonctionne.
REVALIDATE_SECRETSiteServeur uniquement, lu à l'exécution. Le secret que l'API envoie au POST /api/revalidate du site après un changement d'événement ; la même valeur que dans le .env de l'API. Vide, cette route refuse tous les appels et les pages s'actualisent en moins d'une heure.
API_INTERNAL_URLSiteOptionnel, serveur uniquement, lu à l'exécution. L'endroit où le serveur propre au site joint l'API (titres des pages d'événement, premier rendu des pages d'événement et de lieu, sitemap) quand l'adresse du navigateur ne fonctionne pas depuis l'intérieur, comme dans Docker (http://api:8000/api dans Docker Compose). Laissez non défini ailleurs.
BUILD_STANDALONELes deuxtrue fait produire à yarn build un serveur autonome, ce que les Dockerfiles définissent. Sinon, laissez-la non définie.

Les balises marketing du site sont aussi des valeurs NEXT_PUBLIC_* : Google Tag Manager (NEXT_PUBLIC_GTM_ID), GA4 (NEXT_PUBLIC_GA4_MEASUREMENT_ID), Meta, TikTok, Snapchat et Pinterest, chacune activée par un seul identifiant ; un identifiant vide ne charge aucun script. NEXT_PUBLIC_ANALYTICS_CURRENCY (USD par défaut) est la devise envoyée avec les prix des billets, et NEXT_PUBLIC_ANALYTICS_DEBUG=true consigne chaque événement suivi dans la console du navigateur.

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.

VariablePar défautRôle
SITE_PORT3030Le port du site sur votre ordinateur.
ADMIN_PORT3031Le port du tableau de bord sur votre ordinateur.
API_PORT8000Le port de l'API sur votre ordinateur.
SITE_URL, ADMIN_URL, API_URLLes adresses locales sur ces portsL'adresse à laquelle le navigateur joint chaque application. Définissez les trois lorsque vous servez la stack sur vos propres domaines.
MEDIA_HOSTNAMEVideLes hôtes https qui servent les images, séparés par des virgules : l'hôte public de votre bucket (avec les variables R2_* dans back-end/.env), le domaine propre de l'API, ou les deux.
REVALIDATE_SECRETUne valeur localeLe secret que l'API et le site partagent, pour qu'un changement fait dans le tableau de bord atteigne aussitôt les pages du site. Définissez votre propre longue valeur aléatoire sur un serveur ouvert à Internet.
SEED_DEMO_DATAtruefalse démarre avec des tables vides au lieu des quatre organisateurs d'exemple, et avec les variables du propriétaire définies, l'API crée alors votre propre espace de travail et son propriétaire. Cela ne compte que sur un nouveau volume.
OWNER_EMAIL, OWNER_PASSWORD, OWNER_NAME, WORKSPACE_NAMEVideLe propriétaire et le nom de votre espace de travail, lus uniquement sur une base sans compte d'équipe : voir Votre propre espace de travail et son propriétaire ci-dessus.
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_IDVideLes balises marketing du site, toutes optionnelles.
NEXT_PUBLIC_ANALYTICS_CURRENCY, NEXT_PUBLIC_ANALYTICS_DEBUGUSD, falseLa devise envoyée avec chaque prix suivi, et l'enregistrement de chaque événement dans la console du navigateur.
NEXT_PUBLIC_MAP_STYLE_LIGHT, NEXT_PUBLIC_MAP_STYLE_DARK, NEXT_PUBLIC_PLACE_SEARCH_URLVideLes tuiles de carte et la recherche de lieu du tableau de bord ; vide utilise OpenFreeMap et Photon.

Changez un port quand un autre programme l'utilise déjà, par exemple ADMIN_PORT=3041. Le CORS_ORIGIN, le FRONTEND_URL, le STOREFRONT_URL, le PUBLIC_API_URL et le PUBLIC_MEDIA_URL de l'API, ainsi que les adresses d'API, de site et de tableau de bord des frontends, sont tous construits à partir des ports et des trois adresses : ils suivent donc d'eux-mêmes.

Le conteneur de l'API lit d'abord ce .env puis back-end/.env s'il existe, dont la valeur l'emporte quand les deux en définissent une : les clés optionnelles se définissent donc à un seul endroit pour yarn dev et pour Docker. Le fichier compose l'emporte pour les valeurs qui diffèrent dans un conteneur : le chemin de la base, les dossiers des fichiers envoyés et des exports, le port, NODE_ENV=production et les adresses ci-dessus. La base, les fichiers envoyés et les exports CSV vivent dans le volume ticketory-data.

Fonctionnalités IA

Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.

Activer l'assistant IA d'événements et le studio IA de lieux : les clés des fournisseurs et le modèle d'image.

Le serveur MCP

Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.

Permettre aux agents de code et aux autres clients MCP d'utiliser les outils de l'assistant : la clé et l'endpoint.

Mode démo

Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.

Le réglage d'une démo publique, et pourquoi il reste désactivé pour un vrai organisateur.

Bloqué sur une étape ?

Trouvez une solution avant de tout recommencer.

Dépannage

Préférences des Cookies

Nous utilisons des cookies pour améliorer votre expérience de navigation, analyser le trafic du site et personnaliser le contenu. En cliquant sur "Accepter Tout", vous consentez à notre utilisation des cookies pour l'analyse et la publicité personnalisée.