T ToutadminTài liệu

Trang này chưa được dịch sang ngôn ngữ của bạn: đang hiển thị bằng tiếng Pháp.

Dépannage

Les pannes réelles, par symptôme, avec la cause la plus fréquente d'abord. Chaque entrée dit aussi pourquoi le produit se comporte ainsi : la moitié des « bogues » rapportés sont des protections qui font leur travail.

Connexion#

« Identifiants incorrects » avec le bon mot de passe#

Après plusieurs échecs, le compte est verrouillé temporairement. Le message ne le dit pas : annoncer « ce compte est verrouillé » confirmerait à un inconnu que l'adresse existe. Attendez, ou déverrouillez depuis Sécurité → Sessions.

Autre cause : le compte a été désactivé, à la main ou par une date de fin de contrat atteinte. Le message reste le même, pour la même raison.

Personne ne peut se connecter, depuis un seul bureau#

Le plafond de requêtes est par adresse IP. Derrière un partage de connexion, tout le bureau compte pour une seule adresse et le plafond tombe d'un coup. Augmentez global_rate_limit, ou — si un proxy de confiance vous transmet la vraie adresse — passez trust_proxy à vrai.

Jamais trust_proxy sans proxy

Cette option fait croire le serveur sur parole quant à l'adresse d'origine. Sans proxy devant, n'importe qui annonce l'adresse de son choix et contourne aussi bien le plafond de connexion que celui des requêtes.

J'ai perdu mon téléphone et mes codes de secours#

Un autre administrateur retire la double authentification depuis Sécurité. S'il n'y a pas d'autre administrateur, il n'y a pas de porte dérobée : le secret est en base, chiffré, et rien dans le produit ne le contourne. C'est la raison pour laquelle deux comptes d'administration valent mieux qu'un.

La page de connexion boucle#

Le cookie de session n'est pas conservé. Trois causes, dans cet ordre : l'instance est servie en http alors que le cookie est marqué « sécurisé » ; l'horloge du serveur est décalée et la session expire aussitôt ; le navigateur bloque les cookies pour ce domaine.

Édition PHP#

Page blanche, aucun message#

# ce que PHP a vraiment dit
tail -50 /var/log/php8.3-fpm.log
tail -50 <votre-dossier>/data/error.log

Neuf fois sur dix : data/ n'est pas inscriptible par l'utilisateur du serveur web. SQLite écrit des fichiers voisins (-wal, -shm) : c'est le dossier qui doit l'être, pas seulement la base.

sudo chown -R vous:www-data /var/www/toutadmin/data
sudo chmod 770 /var/www/toutadmin/data

« database is locked »#

Deux processus écrivent en même temps et le mode WAL n'est pas actif — souvent parce que data/ est sur un partage réseau (NFS, SMB), où le verrouillage de SQLite ne fonctionne pas. Placez la base sur un disque local. C'est la seule solution ; aucun réglage ne rattrape un verrouillage qui ment.

Tout est en 404 sauf l'accueil#

La réécriture d'adresses n'est pas active. Apache : AllowOverride All sur le dossier, et mod_rewrite chargé. Nginx : la directive try_files $uri $uri/ /index.php$is_args$args; manque.

Je peux télécharger data/app.sqlite depuis le web#

Arrêtez tout de suite. La racine web est le dossier du produit au lieu de public/. Toute la base — comptes, empreintes de mots de passe, coffre-fort — est publique. Corrigez la racine, puis considérez l'instance comme compromise : changez le secret d'instance et faites changer tous les mots de passe.

Les sauvegardes ne se font pas, les webhooks restent en attente#

Le cron n'est pas installé, ou il n'est pas exécuté. Vérifiez :

crontab -l
/usr/bin/php /var/www/toutadmin/tools/cron.php     # à la main, pour voir la sortie

Si l'exécution manuelle fonctionne mais pas le cron, c'est presque toujours le chemin de PHP : le cron n'a pas votre PATH. Écrivez le chemin absolu.

Les dates ne s'écrivent pas comme dans l'édition Node#

L'extension intl manque. La date reste juste et traduite — les noms viennent alors des dictionnaires — mais l'ordre des éléments peut différer dans quelques langues. sudo apt install php8.3-intl, puis rechargez PHP-FPM.

Édition Node#

Le service ne démarre pas#

systemctl status toutadmin
journalctl -u toutadmin -n 50 --no-pager

Les deux causes habituelles : le port est déjà pris (EADDRINUSE), ou l'utilisateur du service ne peut pas écrire dans data/.

Le service redémarre en boucle#

Une erreur au démarrage, pas pendant. Regardez la première ligne d'erreur du journal, pas la dernière : les suivantes ne sont que la conséquence.

Fichiers et dépôts#

« Type de fichier non accepté » pour un fichier manifestement valide#

Le type est déduit du contenu, pas de l'extension. Un fichier renommé en .pdf qui n'en est pas un est refusé, et c'est voulu : l'extension est déclarée par celui qui dépose, le contenu non.

Le dépôt échoue au-delà d'une certaine taille#

Le plafond du serveur web arrive avant celui du produit. Nginx : client_max_body_size. PHP : upload_max_filesize et post_max_size — les deux, la seconde doit être la plus grande.

Un fichier déposé est introuvable#

Les fichiers ne sont jamais servis directement par le serveur web : ils passent par une route qui vérifie la session et l'empreinte. Une adresse directe vers data/ ne doit pas fonctionner — si elle fonctionne, voyez plus haut.

Sauvegarde et restauration#

L'externalisation échoue#

L'écran Sauvegardes affiche le motif exact. Les plus fréquents : identifiants FTPS changés, certificat du serveur distant expiré, quota atteint, jeton Google Drive révoqué. Un webhook sauvegarde.echec peut vous en prévenir sans que vous ayez à regarder.

La restauration refuse l'archive#

Chaque fichier porte son empreinte SHA-256, vérifiée au moment de restaurer. Un refus signifie que l'archive a été modifiée ou tronquée — souvent un transfert FTP en mode texte au lieu de binaire. N'insistez pas : reprenez une archive saine.

Une archive plus petite que prévu#

Elle doit contenir la base et cinq dossiers de fichiers : photos, CV, coffre-fort, parapheur, pièces reçues. Vérifiez la taille dans la liste : une archive réduite à la seule base se remarque à ce qu'elle pèse quelques mégaoctets.

Courriel#

Aucun courriel ne part#

Vérifiez les réglages SMTP du compte concerné — ils sont par membre, et modifiables par l'administration seule. Beaucoup d'hébergeurs mutualisés bloquent le port 25 sortant : utilisez 587 avec STARTTLS.

La relève comptable ne relève rien#

Trois causes : le module n'est pas activé ; le cron ne tourne pas ; le fournisseur exige un mot de passe d'application au lieu du mot de passe du compte — c'est le cas de Gmail et d'Outlook.

Affichage et traductions#

Une clé de traduction s'affiche à l'écran#

Une chaîne comme prj.showArchives visible dans l'interface signale une clé absente du dictionnaire. Cela ne devrait pas arriver : un contrôle vérifie que chaque clé employée par un écran existe dans les 16 langues.

php tools/check-keys.php                    # édition PHP
node --test tests/traductions.test.js      # édition Node

Une partie de l'interface reste en français#

Du texte écrit en dur dans un gabarit au lieu de passer par une clé. C'est un défaut : signalez-le. Le contrôle ci-dessus ne le voit pas — il vérifie que les clés employées existent, pas que tout texte passe par une clé.

Un bouton ne réagit pas#

Aucun écran n'a besoin de JavaScript pour fonctionner : chaque contrôle a un bouton d'envoi. Si un bouton semble inerte, regardez la console du navigateur — une ressource bloquée par la politique de sécurité de contenu s'y affiche explicitement.

Performance#

Tout devient lent#

Regardez d'abord la taille de app.sqlite. Un journal d'audit conservé indéfiniment finit par peser plus que le reste de la base. Réduisez la durée de conservation depuis Sécurité : la purge se fait au balayage suivant.

Une page particulière est lente#

Presque toujours un écran avec un filtre sur une longue période et beaucoup de lignes. Restreignez la période. Si la lenteur persiste sur une base modeste, c'est un défaut : signalez-le avec l'adresse exacte de la page et les filtres employés.

Avant de signaler un problème#

  1. Reproduisez-le : les mêmes gestes, dans le même ordre, donnent-ils le même résultat ?
  2. Notez l'adresse exacte de la page et le rôle du compte employé.
  3. Relevez la ligne d'erreur du serveur — la première, pas la dernière.
  4. Lancez la suite de tests : php tests/run.php ou npm test. Si elle passe, le défaut est propre à votre instance ; si elle échoue, il est dans le produit.
  5. Notez l'édition et sa version (fichier VERSION).

Ces cinq éléments suffisent presque toujours à trouver la cause sans accès à vos données.

Tài liệu Toutadmin — dựng ngày 2026-09-13. Trang độc lập, tách rời phần mềm.