Problèmes connus
Chatbotaurus, comme tout système complexe, peut rencontrer des problèmes
occasionnels. Ce guide fournit des solutions pour les cas courants.
Les noms de conteneurs sont ceux des fichiers podman-compose.yml (plan
backend, services forge-*) et podman-compose.vps2.yml (plan client,
services mcp-*).
Astuce : un problème qui n'est pas listé ici ?
Écrivez à support@chatbotaurus.com en suivant la marche décrite dans Diagnostics et signalement.
Par symptôme
| Vous constatez | Section |
|---|---|
| Un conteneur ne démarre pas, un réseau ou un volume est introuvable | Un conteneur ne démarre pas |
| Les services ne repartent pas après un redémarrage de l'hôte | Les services Quadlet ne redémarrent pas après un redémarrage de l'hôte |
| Un port est déjà utilisé | Conflit de port |
| Les conteneurs ne se joignent pas par leur nom | Résolution DNS entre conteneurs |
| Des données disparaissent après un redémarrage | Volumes et persistance des données |
| Une modification n'apparaît pas en production | Ma modification n'apparaît pas en production |
| Ollama est tué ou ne répond plus | Ollama à court de mémoire (OOM) |
| Ollama répond « model not found » | Modèle introuvable |
| Les réponses du modèle sont lentes | Latence élevée des réponses |
| Erreur 503 sur la lecture d'un secret | OpenBao scellé |
| Un service ne reçoit pas ses secrets | Un service ne reçoit pas ses secrets |
| « session expired or unknown » ou « missing Mcp-Session-Id » | Erreur de session Streamable HTTP |
| Un connecteur ne répond pas (TIMEOUT, SERVICE_UNAVAILABLE, RATE_LIMITED, SSRF_BLOCKED) | Un connecteur échoue |
connector rejected by registry au démarrage | Un connecteur est rejeté au démarrage |
Erreur CIRCUIT_OPEN (503) | Erreur CIRCUIT_OPEN (503) |
| PostgreSQL refuse la connexion | PostgreSQL : connexion refusée |
| Qdrant renvoie des erreurs de lecture | Qdrant : index corrompu |
| Le stockage objet répond 403 à tout | Le stockage objet S3 refuse toutes les requêtes |
| Le wasm ne compile pas | Erreur de compilation du wasm |
dx serve ne recharge plus | dx serve ne recharge plus |
| Un réglage du frontend est sans effet | La configuration du frontend est ignorée |
| 403 sur les POST, PUT ou DELETE | Le CSRF rejette les requêtes |
| Tous les utilisateurs sont déconnectés après un redémarrage du backend | Le JWT est invalide après un redémarrage du backend |
| La connexion SSO échoue | Connexion impossible |
Infrastructure Podman
Un conteneur ne démarre pas
- Lisez les journaux du conteneur :
podman logs forge-postgres - Vérifiez que les deux réseaux existent (les fichiers compose les
déclarent externes et ne les créent pas) :
podman network ls | grep -E "chatbotaurus-vps1|mgaas-vps2" - S'ils manquent, créez-les :
podman network create chatbotaurus-vps1 podman network create mgaas-vps2 - Pour un service sous Quadlet, regardez l'unité systemd :
systemctl --user status forge-api.service journalctl --user -u forge-api.service -n 100
Les services Quadlet ne redémarrent pas après un redémarrage de l'hôte
Les unités Quadlet tournent sous un compte de déploiement non privilégié (rootless). Sans le
mode « linger » de systemd, elles s'arrêtent à la déconnexion et ne
repartent pas au démarrage. Le script containers/scripts/enable-linger.sh
l'active, une fois, par hôte. Il se lance en root, après la création du compte de
déploiement, en lui passant le nom de ce compte : bash containers/scripts/enable-linger.sh <compte-deploiement> (le compte doit exister, sinon le script s'arrête et dit de le
créer). Résultat attendu : des lignes [OK], dont lingering enabled, puis la
vérification du répertoire d'exécution et du socket Podman de ce compte.
Conflit de port
Si un port est déjà utilisé :
ss -tlnp | grep <port>
Sous Windows (développement local) :
netstat -ano | Select-String "5432"
Ports publiés par défaut en développement : 5432 (PostgreSQL), 6380 (Valkey, pour ne pas entrer en collision avec un Redis local sur 6379), 6333 (Qdrant), 11434 (Ollama), 9000 (Authentik), 8200 (OpenBao).
Résolution DNS entre conteneurs
Si les conteneurs ne se résolvent pas entre eux par leur nom :
- Vérifiez qu'ils sont sur le même réseau :
podman inspect forge-api --format '{{json .NetworkSettings.Networks}}' - Vérifiez le moteur réseau de Podman (netavark attendu) :
podman info | grep -i networkBackend - Rechargez les réseaux :
podman network reload --all - En dernier recours, recréez les conteneurs (les volumes sont conservés).
Rappel : PostgreSQL et Valkey portent les alias postgres et valkey sur
mgaas-vps2. Un service du plan client doit utiliser ces alias, pas
forge-postgres.
Volumes et persistance des données
Si des données disparaissent après un redémarrage :
- Vérifiez les volumes montés :
podman inspect forge-postgres --format '{{json .Mounts}}' podman volume ls - Utilisez les volumes nommés des fichiers compose (noms logiques
forge-pgdata,forge-valkey-data,forge-qdrant-data, entre autres) plutôt que des montages temporaires. Ces volumes sontexternal: leur nom réel est la cléname:du blocvolumes:(grep -n "name:" podman-compose.yml) et compose ne crée pas un volume externe absent. La création est décrite dans Déploiement avec Podman.
Déploiement
Ma modification n'apparaît pas en production
Le déploiement est tiré par l'hôte, toutes les 2 minutes, et seulement si la branche principale a avancé. Vérifiez dans l'ordre :
- le champ
shade/api/v1/healthzcorrespond-il à votre commit ?curl -s https://app.<domaine>/api/v1/healthz | jq . - où en est le déploiement du front (ce script ne lit pas l'état du backend : l'étape 1
le prouve) ?
bash scripts/deploy/suivre-autodeploy.sh - un commit qui ne touche que la documentation ne reconstruit pas l'image backend : c'est normal ;
- si le service ne répond pas après un redémarrage, le script du backend revient à l'image précédente et l'indique dans son état.
Après un déploiement du front, rechargez la page en vidant le cache du navigateur : l'ancien wasm peut rester en cache.
Ollama et modèles IA
Ollama à court de mémoire (OOM)
Si Ollama est tué par le noyau :
- Vérifiez la mémoire disponible :
free -h - Vérifiez les limites du conteneur (fixées dans le plan compose) :
podman inspect forge-ollama | grep -i memory - Solutions :
- augmentez la limite mémoire si l'hôte le permet ;
- réduisez le nombre de modèles chargés simultanément ;
- choisissez un modèle plus petit (variable
OLLAMA_MODEL).
Modèle introuvable
Si Ollama répond « model not found » :
# Modèles disponibles
podman exec forge-ollama ollama list
# Télécharger le modèle manquant
podman exec forge-ollama ollama pull <nom-du-modèle>
Le nom doit correspondre à celui que le backend demande
(OLLAMA_MODEL).
Latence élevée des réponses
Si les réponses du LLM sont lentes :
- Vérifiez l'utilisation CPU (
podman stats --no-stream). - Vérifiez qu'un seul modèle est chargé : passer d'un modèle à l'autre est coûteux.
- Le code prévoit une dégradation par paliers au-delà de 10 s de latence moyenne (voir Gestion des erreurs), mais les moteurs qu'elle coupe n'ont pas d'appelant de production : ne comptez pas dessus pour réduire la latence (voir Supervision).
OpenBao (gestion des secrets)
OpenBao scellé
OpenBao se scelle au redémarrage. Symptôme : erreur 503 sur les appels qui lisent un secret.
- Vérifiez l'état (code de sortie 2 = scellé) :
podman exec forge-openbao bao status - Descellez avec le seuil de clés défini à l'initialisation. La commande
demande la clé à la saisie :
Répétez avec des clés distinctes jusqu'àpodman exec -it forge-openbao bao operator unsealSealed: false.
Attention
Les clés de descellement se conservent séparément et en lieu sûr. Ne les commitez jamais dans le dépôt. La topologie de descellement est décrite dans le guide d'exploitation du coffre, hors de ce livre.
Un service ne reçoit pas ses secrets
- Vérifiez qu'OpenBao est descellé (voir la section « OpenBao scellé » ci-dessus).
- Vérifiez les permissions du jeton utilisé par le backend.
- Consultez les journaux du backend :
podman logs --tail 100 forge-api
Passerelle MCP
Erreur de session Streamable HTTP
Si vous recevez une erreur « session expired or unknown » (code JSON-RPC -32600) ou « missing Mcp-Session-Id » :
- Vérifiez que l'en-tête
Mcp-Session-Idest présent dans la requête ; - les sessions expirent après 30 minutes d'inactivité ;
- ouvrez une nouvelle session par une requête
initializesurPOST /api/v1/mcp.
Un connecteur échoue
Si un connecteur (Odoo, n8n, Matomo, entre autres) ne répond pas :
- Identifiez le code d'erreur renvoyé :
TIMEOUT(504) : le service tiers est trop lent (voirtimeout_msdu connecteur) ;SERVICE_UNAVAILABLE(503) : connexion impossible ;RATE_LIMITED(429) : limite de l'amont atteinte, respectezRetry-After;ForbiddenavecSSRF_BLOCKED: l'URL de base fournie par le locataire vise le réseau interne, elle est refusée.
- Vérifiez que le conteneur du service tourne :
podman ps --filter name=mcp- - Vérifiez les identifiants du connecteur (variable
token_envoukey_envdu YAML, ou identifiants du locataire). - Lisez les logs du service concerné (
podman logs mcp-n8n, par exemple).
Un connecteur est rejeté au démarrage
Au démarrage, forge-api journalise connector rejected by registry (EU compliance?) pour un connecteur dont gdpr_compliant vaut false ou dont
la résidence des données n'est pas européenne. Corrigez le bloc
compliance du YAML : voir
Conception des connecteurs MCP.
Erreur CIRCUIT_OPEN (503)
Le disjoncteur d'un agent s'est ouvert après plusieurs échecs consécutifs. Il
laisse repasser un essai après un court délai. Cherchez la cause des échecs
dans les journaux de forge-api (modèle indisponible, connecteur en erreur),
puis attendez le délai ou corrigez la cause.
Base de données et stockage
PostgreSQL : connexion refusée
- Vérifiez que le conteneur tourne :
podman ps | grep forge-postgres - Vérifiez les journaux :
podman logs forge-postgres - Vérifiez que le port 5432 n'est pas pris par une autre instance PostgreSQL locale.
Qdrant : index corrompu
Si Qdrant renvoie des erreurs de lecture :
- Lisez les journaux :
podman logs forge-qdrant - Restaurez d'abord l'instantané de la collection (voir Sauvegarde et restauration).
- En dernier recours, supprimez la collection (les embeddings devront
être régénérés) :
curl -X DELETE http://localhost:6333/collections/<collection>
Le stockage objet S3 refuse toutes les requêtes
Le service forge-seaweedfs est fermé par défaut : si les variables
SEAWEEDFS_S3_* référencées par son fichier d'identités sont absentes ou vides, toute requête est
refusée (403). Renseignez ces variables dans l'environnement du compose
puis recréez le service : podman-compose -p chatbotaurus-vps1 up -d --force-recreate seaweedfs. Résultat attendu : une requête signée avec ces clés aboutit, une requête
anonyme reçoit toujours 403.
Interface (Dioxus wasm)
Erreur de compilation du wasm
La commande de référence est :
cargo build -p forge-ui --target wasm32-unknown-unknown --bin chatbotaurus
Quatre causes reviennent souvent :
La cible wasm peut ne pas être installée. Installez-la :
rustup target add wasm32-unknown-unknown
Un cache cargo corrompu après une interruption brutale peut laisser des artefacts incohérents :
cargo clean -p forge-ui
cargo build -p forge-ui --target wasm32-unknown-unknown --bin chatbotaurus
Les erreurs de compilation Rust se diagnostiquent plus vite avec
cargo check, qui s'arrête avant l'édition de liens :
cargo check -p forge-ui --target wasm32-unknown-unknown
Enfin, une Dioxus CLI obsolète se manifeste par des erreurs opaques à l'édition de liens ou à l'empaquetage. Réinstallez la dernière version 0.7 :
cargo install dioxus-cli --force
Le paquet de production se construit avec :
dx build --release --platform web --package forge-ui
Sous Windows, l'optimiseur wasm-opt peut planter et dx rend pourtant
un code de sortie 0 : une ligne ERROR dans sa sortie suffit à refuser le
paquet. La construction de production se fait sous Linux.
dx serve ne recharge plus
Il arrive que l'observateur de fichiers se désynchronise (montage croisé
Windows/WSL). Arrêtez dx serve, puis relancez-le :
dx serve --package forge-ui --bin chatbotaurus --port 8080
La configuration du frontend est ignorée
Le frontend wasm ne lit pas les variables d'environnement système à l'exécution (il s'exécute dans le navigateur). Sa configuration est compilée :
- la marque, les liens et les offres affichés viennent de
crates/forge-ui/src/config/site.rs; - l'adresse de l'API vient de
crates/forge-ui/src/config/api.rs: en web, le chemin relatif/api/v1du même domaine ; sur les cibles natives, la valeur deAPI_URLfixée à la compilation (défauthttp://localhost:3000/api/v1).
Pour appliquer un changement : éditez le fichier, reconstruisez le wasm ;
dx serve recharge automatiquement.
Le CSRF rejette les requêtes
Symptôme : 403 sur les POST, PUT ou DELETE.
Vérifiez :
- que le cookie
csrf-tokenest présent (outils du navigateur, onglet Application, Cookies) ; - que l'en-tête
x-csrf-tokenest envoyé avec la même valeur que le cookie ; - que l'origine du frontend figure dans
CORS_ORIGINScôté backend.
Le JWT est invalide après un redémarrage du backend
La valeur de JWT_SECRET doit rester stable d'un démarrage à l'autre. Si
elle change (par exemple générée au hasard à chaque lancement), tous les
jetons émis avant deviennent invalides. Fixez JWT_SECRET dans votre
fichier d'environnement et chargez-le à chaque démarrage.
Authentik (authentification)
Connexion impossible
- Vérifiez qu'Authentik répond (port 9000 en développement) :
podman ps --filter name=authentik - Lisez les journaux (en développement
forge-authentik, en productionforge-authentik-serveretforge-authentik-worker) :podman logs forge-authentik - Vérifiez l'application et le fournisseur OIDC dans la console d'administration.
Performance et surveillance
Seuils de dégradation
Le code prévoit de réduire les techniques d'IA quand l'un de ces seuils est
franchi (crates/forge-core/src/mgaas/types.rs). Cette cascade est livrée mais
non branchée (voir Supervision).
Les seuils (mémoire, processeur, latence) sont fixés dans le code et ne sont pas publiés ici.
VictoriaMetrics (forge-victoriametrics, port 8428) et VictoriaLogs
(forge-victorialogs, port 9428) existent dans le compose de développement.
Rien ne les alimente par défaut et aucune unité Quadlet ne les déploie : voir
Supervision.
Besoin d'aide supplémentaire ?
- Consultez les diagnostics intégrés pour rassembler les informations utiles.
- Écrivez à support@chatbotaurus.com.
Voir aussi
- Diagnostics et signalement — rassembler santé, journaux et identifiant de requête avant d'écrire au support
- Gestion des conteneurs — commandes du quotidien : journaux, redémarrage, inspection, ressources
- Déploiement avec Podman — créer réseaux et volumes, suivre le déploiement tiré par l'hôte
- Variables d'environnement — chaque variable citée dans ces solutions, avec son défaut
- Gestion des erreurs — signification de chaque code d'erreur renvoyé par l'API