Dépannage
Les erreurs que vous pouvez rencontrer en installant le tableau de bord, la cause de chacune et comment la corriger.
Pour le pack Front + Back
Docker n'est pas lancé
failed to connect to the docker API at unix:///…/docker.sock; check if the path is correct and if the daemon is runningLes anciennes versions de Docker affichent plutôt « Cannot connect to the Docker daemon ». Dans les deux cas, le moteur Docker n'est pas démarré.
Ouvrez Docker Desktop
Lancez Docker Desktop et attendez qu'il indique que le moteur est en marche. Sous Linux, démarrez le service :
sudo systemctl start docker.Vérifiez que Docker répond
Terminaldocker infoRésultat attendu: Une section Server s'affiche au lieu d'une erreur.
Relancez votre commande de démarrage
docker compose up --buildpour le Full Stack, ou vosdocker buildetdocker runpour le pack Admin Dashboard.
Un port est déjà utilisé
ports are not available: exposing port TCP 0.0.0.0:3030 … bind: address already in use
Bind for 0.0.0.0:3030 failed: port is already allocated
Error: listen EADDRINUSE: address already in use :::3030Les deux premières lignes viennent de Docker, la dernière de yarn dev ou yarn start. Un autre programme écoute déjà sur 3030 ou 8000 : souvent un lancement précédent du tableau de bord, ou le serveur de développement d'un autre projet.
Trouvez ce qui occupe le port
Sous macOS ou Linux, avec le port indiqué dans le message :
Terminallsof -i :3030Sous Windows, dans PowerShell :
Terminalnetstat -ano | findstr :3030Arrêtez-le
Fermez ce programme, ou arrêtez le lancement précédent : Ctrl+C dans son terminal,
docker compose downdans son dossier, oudocker stoppour un conteneur lancé avecdocker run. Puis redémarrez le tableau de bord.Ou lancer le tableau de bord sur d'autres ports
Avec le Full Stack dans Docker, créez un fichier nommé
.envdans le dossierdashboard-2-full-stack, à côté dedocker-compose.yml, avec le port voulu.DASHBOARD_PORTdéplace le tableau de bord etAPI_PORTl'API ; les adresses que les applications utilisent,CORS_ORIGINcompris, suivent d'elles-mêmes.dashboard-2-full-stack/.envDASHBOARD_PORT=3040Relancez ensuite la même commande. Un démarrage qui a échoué reprend là où il s'était arrêté :
Terminaldansdashboard-2-full-stackdocker compose up --buildRésultat attendu: Le tableau de bord répond sur son nouveau port, ici localhost:3040Local.
- Pack Admin Dashboard dans Docker : changez le numéro à gauche de
-p, par exempledocker run -p 3040:3030 dashboard-2, et ouvrez localhost:3040Local. L'application dans le conteneur écoute toujours sur 3030. - Sans Docker : définissez
PORT=3040dans le.envdu tableau de bord (créez le fichier avec cette seule ligne si vous n'en avez pas), ou lancezPORT=3040 yarn devsous macOS et Linux. Avec une API, ajoutez aussi la nouvelle adresse àCORS_ORIGINetFRONTEND_URLde l'API. - L'API sans Docker : changez
PORTdansback-end/.env, ainsi queNEXT_PUBLIC_API_BASE_URLetNEXT_PUBLIC_WEBSOCKET_BASE_URLdans le.envdu tableau de bord, ensemble.
Le build Docker échoue
Le premier build télécharge les images de base, chaque dépendance et la police arabe du tableau de bord depuis Google Fonts, puis construit les images. Il s'arrête avec « failed to solve » et l'étape en échec quand quelque chose bloque.
- Pas de connexion ou délai dépassé : le build a besoin d'un accès à internet. Relancez la commande une fois en ligne ; les étapes terminées sont en cache.
- No space left on device : libérez de l'espace dans Docker Desktop, ou vérifiez ce que Docker occupe avec
docker system df. - L'échec survient toujours à la même étape : reconstruisez sans le cache, puis démarrez.
dashboard-2-full-stackdocker compose build --no-cache
docker compose upPour le pack Admin Dashboard, ajoutez --no-cache à votre commande docker build.
Un premier démarrage qui semble bloqué est généralement encore en train de remplir les données d'exemple. Le tableau de bord ne démarre que lorsque l'API se déclare en bonne santé, ce qui peut prendre jusqu'à une minute.
Yarn indique la version 1.22
This project's package.json defines "packageManager": "yarn@4.8.1…". However the current global version of Yarn is 1.22…Chaque application fixe Yarn 4 via Corepack. Ce message signifie que Corepack n'est pas encore activé, et que c'est donc l'ancien Yarn global qui a répondu.
corepack enablePuis relancez yarn install. Si votre Node.js n'a pas Corepack (Node.js 25 et plus récent), installez-le d'abord avec npm install -g corepack.
Le tableau de bord ne démarre pas sur un Node.js plus ancien
node: bad option: --env-file-if-exists=.envyarn dev et yarn start du tableau de bord lisent .env avec une option ajoutée à Node.js dans la version 22.9. Vérifiez la vôtre :
node -vSi elle affiche une version inférieure à 22.9, installez Node.js 22.9 ou plus récent, relancez corepack enable, supprimez le dossier node_modules de l'application et relancez yarn install. Avec Docker, rien de cela ne s'applique : les images apportent leur propre Node.js.
L'API s'arrête avant de démarrer
The API cannot start: JWT_SECRET is not set. Set it in back-end/.env to the output of: …
The API cannot start: JWT_SECRET is still the example value from .env.example, so anyone can sign a token for any account. …
The API cannot start: CORS_ORIGIN is not set. List the dashboard origin (comma separated if there are several), …L'API vérifie ses paramètres avant de démarrer et affiche une ligne par problème. Les causes :
- Il n'y a pas de fichier `.env`, ou `JWT_SECRET` est vide. Créez le fichier dans
back-endaveccp .env.example .env. - `JWT_SECRET` a encore la valeur d'exemple avec `NODE_ENV=production`. N'importe qui pourrait signer un jeton avec l'exemple public : un démarrage en production le refuse donc. Générez votre propre secret.
- `CORS_ORIGIN` est vide avec `NODE_ENV=production`. Définissez-le sur l'adresse du tableau de bord.
Générez un secret avec :
node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"Avec Docker, vous n'en avez pas besoin : un conteneur sans JWT_SECRET propre, ou avec celui de l'exemple, génère un secret et le conserve dans le volume de données.
La connexion échoue
- Vérifiez le compte. Le Super Admin est
admin@example.comavecAdmin@123; les autres admins d'exemple utilisentadmin123. - « That email and password combination didn't work. Please try again. » répond à un mauvais mot de passe comme à un e-mail inconnu, et aussi à une base sans comptes. Sans Docker, lancez
yarn seeddansback-end:yarn devcrée les tables tout seul, mais seul le seed ajoute les comptes. - « Too many failed sign-in attempts. Wait 15 minutes, then try again. » Une adresse a échoué
RATE_LIMIT_LOGINconnexions (10 par défaut) en 15 minutes. Attendez, ou redémarrez l'API : le compteur est gardé dans sa mémoire. - La page de connexion ne répond jamais. Le tableau de bord ne peut pas joindre l'API : voyez le problème suivant.
- Vous avez changé le mot de passe du Super Admin et vous ne l'avez plus : repartez de zéro avec des données d'exemple neuves, plus bas.
La connexion échoue
- Sur la fausse API, connectez-vous avec
admin@example.cometAdmin@123, ou avec un Viewer d'exemple commejohn.smith@admin.comavecadmin123. Ces comptes vivent dans votre navigateur : un mot de passe que vous y avez changé reste changé jusqu'à ce que vous effaciez les données du site. - Sur votre propre API, le compte doit y exister. Sur l'API de ce template, le seed ajoute les mêmes comptes. Si aucun compte ne fonctionne, le tableau de bord ne joint peut-être pas l'API : voyez le problème suivant.
Les pages restent vides et le navigateur signale une erreur CORS
Access to XMLHttpRequest at 'http://localhost:8000/api/auth/login' from origin 'http://localhost:3040' has been blocked by CORS policyLa console du navigateur affiche cette ligne quand le tableau de bord tourne sur une adresse que l'API n'accepte pas. L'API ne répond aux navigateurs que depuis les adresses de CORS_ORIGIN, qui vaut http://localhost:3030 par défaut.
CORS_ORIGIN=http://localhost:3040
FRONTEND_URL=http://localhost:3040- Écrivez chaque adresse exactement comme le navigateur l'affiche, avec le schéma et le port et sans barre oblique finale, séparées par des virgules s'il y en a plusieurs. Puis redémarrez l'API.
FRONTEND_URLest la seule adresse que les mises à jour des permissions en direct acceptent. Déplacez-la avec le tableau de bord.- Avec le Full Stack dans Docker, vous ne les modifiez pas :
DASHBOARD_PORTetDASHBOARD_URLdans le.envà côté dedocker-compose.ymlles définissent. - Un tableau de bord qui ne peut pas du tout joindre l'API, parce qu'elle est arrêtée ou à une autre adresse, échoue de la même façon sans la ligne CORS. Vérifiez que localhost:8000/
api/ healthLocal répond, et que NEXT_PUBLIC_API_BASE_URLdu tableau de bord nomme cette API.
Le tableau de bord affiche des données d'exemple au lieu de mon API
Sample data
No API is connected (NEXT_PUBLIC_API_BASE_URL is empty), so the dashboard runs on built-in sample data. …Le tableau de bord a été construit sans adresse d'API, il fonctionne donc sur sa fausse API intégrée. Cela arrive sans fichier .env, avec NEXT_PUBLIC_API_BASE_URL= vide, ou avec une image Docker construite sans le --build-arg.
- Sans Docker :
cp .env.example .envdans le dossier du tableau de bord, vérifiezNEXT_PUBLIC_API_BASE_URL, puis redémarrezyarn dev, ou relancezyarn buildpour un build de production. - Docker, pack Admin Dashboard : reconstruisez l'image avec
--build-arg NEXT_PUBLIC_API_BASE_URL=…, comme dans le guide d'installation. - Docker Compose : le fichier compose construit toujours le tableau de bord avec l'adresse de l'API, donc cet avis n'y apparaît pas.
Une modification du .env du tableau de bord n'a aucun effet
Chaque valeur NEXT_PUBLIC_* est compilée dans le JavaScript chargé par le navigateur au moment du build de l'application. Modifier le fichier ne change rien tant que l'application n'est pas reconstruite.
| Comment vous la lancez | Après avoir modifié une valeur |
|---|---|
yarn dev | Arrêtez-la et relancez yarn dev. |
yarn build et yarn start | Relancez yarn build, puis yarn start. |
| Docker Compose | Lancez docker compose up --build. Définissez la valeur dans le .env à côté de docker-compose.yml, pas dans front-end. |
docker build pour le tableau de bord | Reconstruisez l'image avec la valeur passée en --build-arg. |
Un changement de rôle n'atteint le tableau de bord qu'après un rechargement
Quand les permissions d'un rôle changent, l'API le signale par WebSocket au tableau de bord de chaque admin connecté, et les menus et boutons suivent sans rechargement. Le tableau de bord se connecte à NEXT_PUBLIC_WEBSOCKET_BASE_URL, l'adresse de l'API sans /api, et l'API n'accepte la connexion que depuis FRONTEND_URL, l'adresse du tableau de bord lui-même.
- Réglez les deux sur l'endroit où les applications tournent vraiment, puis redémarrez l'API et reconstruisez le tableau de bord.
- Un
FRONTEND_URLnon défini n'accepte quehttp://localhost:3030. - Le tableau de bord relit aussi les permissions à chaque page qu'il ouvre, donc rien ne reste périmé longtemps.
L'assistant IA demande une clé d'API
The server has no key for this model's provider. Add your own API key to keep going.L'API n'a pas de clé pour le fournisseur du modèle que vous avez choisi. Collez votre propre clé dans la boîte de dialogue, elle reste dans votre navigateur, ou ajoutez la clé du fournisseur à back-end/.env et redémarrez l'API (avec Docker Compose, relancez docker compose up).
gemini-3.6-flash has no requests left on this API key right now. Pick a different model from the list above the chat, or try again in a few minutes.Le fournisseur a refusé la requête parce que le quota de la clé est épuisé, ce qui est courant avec une clé gratuite. Choisissez un autre modèle dans le sélecteur, ou réessayez plus tard.
Une photo ne peut pas être envoyée
Image uploads are not set up on this server yet. Add the Cloudflare R2 settings to the API environment to turn them on.Les photos de profil et les images jointes de l'assistant sont stockées dans un bucket Cloudflare R2. Définissez les cinq variables R2_* dans back-end/.env et redémarrez l'API. Tout le reste fonctionne sans elles.
Le message d'accueil n'affiche pas la météo
La météo du message d'accueil de la vue d'ensemble demande une clé WeatherAPI.com dans WEATHER_API_KEY, lue par le serveur propre au tableau de bord. Sans elle, le message s'affiche sans la météo et rien d'autre ne change.
- Sans Docker, dans le
.envdu tableau de bord, puis redémarrez. - Avec Docker Compose, dans le
.envà côté dedocker-compose.yml, puis relancezdocker compose up. - Avec l'image du tableau de bord, sur
docker run:-e WEATHER_API_KEY=....
MySQL refuse de démarrer ou de remplir la base
L'API crée ses tables dans une base qui existe déjà ; elle ne crée pas la base elle-même. Créez d'abord une base vide, donnez son nom à DB_DATABASE dans back-end/.env, puis lancez yarn seed.
- Vérifiez les cinq valeurs de connexion
DB_*et queDB_TYPE=mysql. - Avec
NODE_ENV=production, l'API en cours d'exécution ne crée jamais de tables :yarn seed:proddoit donc être lancé une fois aprèsyarn build, avant le premier démarrage. - L'image Docker ne crée la base elle-même que sur SQLite. Sur MySQL, lancez vous-même
node dist/database/seeder.jsune fois dans le conteneur.
Le conteneur de l'API ne trouve pas son point d'entrée
exec /usr/local/bin/docker-entrypoint.sh: no such file or directoryLe script a des fins de ligne Windows, qu'un éditeur ou Git sous Windows peut ajouter. Le Dockerfile de l'API fourni les retire pendant le build, donc cela n'apparaît qu'avec une image construite à partir d'un Dockerfile modifié. Gardez sa ligne sed -i 's/\r$//', ou enregistrez le script avec des fins de ligne LF, puis reconstruisez sans le cache.
Le dossier ne correspond pas
Exécutez les commandes dans le dossier où le ZIP est extrait. Si la commande unzip est absente, extrayez-le plutôt avec votre gestionnaire de fichiers ; certains outils ajoutent un dossier supplémentaire portant le nom du ZIP : placez-vous alors dans le dossier intérieur.
| Pack | Dossier | Contenu |
|---|---|---|
| Full Stack | dashboard-2-full-stack | back-end, front-end, docker-compose.yml, README.md, QUICKSTART.md |
| Tableau de bord admin | dashboard-2-front-end | Dockerfile, package.json, .env.example, messages, public, src |
Repartir de zéro avec des données d'exemple neuves
Cette opération supprime vos données
Tout ce que vous avez créé en local est supprimé, et les données d'exemple reviennent.
Avec le Full Stack dans Docker, depuis le dossier dashboard-2-full-stack :
dashboard-2-full-stackdocker compose down -v
docker compose upSans Docker, arrêtez l'API, puis dans back-end :
back-endrm -f database.sqlite* && yarn seedDans PowerShell :
back-endRemove-Item database.sqlite*; yarn seedRéinitialiser les données d'exemple de la fausse API
Sur la fausse API intégrée, les données d'exemple et tout ce que vous avez modifié vivent dans votre navigateur. Effacez les données du site pour l'adresse du tableau de bord dans les paramètres de votre navigateur et rechargez : les exemples reviennent tels qu'ils étaient livrés.