Dépannage
Cette page couvre les problèmes courants que vous pourriez rencontrer en auto-hébergeant solyto, et comment les résoudre.
Consulter les journaux
Section intitulée « Consulter les journaux »La première étape pour déboguer un problème est de consulter les journaux des conteneurs :
# Tous les servicesdocker compose logs
# Un service spécifiquedocker compose logs apidocker compose logs appdocker compose logs nginx
# Suivre les journaux en temps réeldocker compose logs -f apiLes journaux sont votre meilleur allié. La plupart des erreurs sont expliquées dans la sortie.
Le conteneur ne démarre pas
Section intitulée « Le conteneur ne démarre pas »Symptômes : docker compose ps affiche un service en redémarrage ou arrêté.
Vérifications :
- Consultez les journaux du service en échec :
docker compose logs <service> - Vérifiez que
.envcontient toutes les variables requises — consultez Configuration - Vérifiez que tous les fichiers de secrets requis existent dans
./secrets/— consultez Secrets Docker - Vérifiez que Docker dispose de ressources suffisantes (mémoire, espace disque)
Cause fréquente : un fichier de secret manquant ou vide. Vérifiez avec :
ls -la secrets/Erreurs de connexion à la base de données
Section intitulée « Erreurs de connexion à la base de données »Symptômes : l’API renvoie des erreurs 500, les journaux affichent SQLSTATE ou Connection refused.
Vérifications :
- La base de données est-elle en cours d’exécution ?
docker compose ps mariadbetdocker compose ps postgres - Vérifiez que les identifiants correspondent entre
.envet les fichiers de secrets :Fenêtre de terminal cat secrets/db_usercat secrets/db_password - Assurez-vous que
DB_HOST=mariadbetDAV_DB_HOST=postgres(noms de service Docker) - Attendez — MariaDB et PostgreSQL peuvent prendre quelques secondes pour être prêts au premier démarrage. Le conteneur API réessaiera automatiquement.
Réinitialiser les identifiants de la base de données (en cas de corruption) :
# Régénérer le fichier de secretopenssl rand -hex 32 > secrets/db_passworddocker compose up -d mariadb# Attendez que MariaDB démarre, puis redémarrez l'APIdocker compose restart api queueProblèmes de certificat TLS
Section intitulée « Problèmes de certificat TLS »Symptômes : le navigateur affiche un avertissement de sécurité, erreurs de certificat Traefik.
Vérifications :
- Vérifiez que vos domaines pointent vers l’IP du serveur :
dig api.example.com - Assurez-vous que les ports 80 et 443 sont ouverts et non bloqués par un pare-feu
- Vérifiez que
ACME_EMAILest défini dans.env - Vérifiez que le volume
traefik_acmeexiste et est accessible en écriture
Forcer le renouvellement du certificat :
docker compose downdocker volume rm <project>_traefik_acmedocker compose up -dRemplacez <project> par votre PROJECT_NAME. Traefik demandera de nouveaux certificats au démarrage.
Problèmes de permissions avec storage/
Section intitulée « Problèmes de permissions avec storage/ »Symptômes : les téléversements de fichiers échouent, les journaux affichent Permission denied dans storage/.
Correction :
chown -R www-data:www-data storage/chmod -R 775 storage/Le répertoire storage/ est partagé entre api, dav, queue, nginx et imgproxy via un montage bind. Tous ces services ont besoin d’un accès en écriture.
CalDAV/CardDAV ne fonctionne pas
Section intitulée « CalDAV/CardDAV ne fonctionne pas »Symptômes : la synchronisation du calendrier ou des contacts échoue dans les applications externes (DAVx5, Apple Calendar, etc.).
Vérifications :
- Vérifiez que le service
davest en cours d’exécution :docker compose ps dav - Assurez-vous que
DAV_DOMAINest défini et résout correctement - Vérifiez que l’URL CalDAV/CardDAV utilisée par votre application externe correspond à
https://dav.example.com - Consultez les journaux du service
dav:docker compose logs dav - Vérifiez que PostgreSQL est en cours d’exécution :
docker compose ps postgres - Assurez-vous que les secrets
dav_db_useretdav_db_passwordsont corrects
Problème courant : le domaine DAV doit être différent du domaine de l’API. Ils fonctionnent comme des services séparés derrière Traefik.
La file d’attente ne traite rien
Section intitulée « La file d’attente ne traite rien »Symptômes : les tâches asynchrones ne se terminent pas (notifications, tâches en arrière-plan).
Vérifications :
- Le worker de file d’attente est-il en cours d’exécution ?
docker compose ps queue - Consultez les journaux de la file d’attente :
docker compose logs queue - Vérifiez que Redis est en cours d’exécution :
docker compose ps redis - Vérifiez la connectivité Redis :
docker compose exec api so tinkerpuis essayez une commande Redis
Redémarrer le worker de file d’attente :
docker compose restart queueLes images ne se chargent pas
Section intitulée « Les images ne se chargent pas »Symptômes : les photos de profil téléversées ou autres médias renvoient une erreur 404 ou sont cassés.
Vérifications :
- Si vous utilisez
IMAGE_DRIVER=intervention(par défaut), aucun service supplémentaire n’est nécessaire - Si vous utilisez
IMAGE_DRIVER=imgproxy, assurez-vous que le serviceimgproxyest en cours d’exécution et que les secretsimgproxy_key/imgproxy_saltsont définis - Vérifiez que
storage/app/public/existe et est accessible en écriture - Consultez les journaux nginx :
docker compose logs nginx
Échecs de contrôle de santé
Section intitulée « Échecs de contrôle de santé »Le service nginx dispose d’un contrôle de santé sur /api/v1/health. En cas d’échec :
- Testez manuellement :
curl -s https://api.example.com/api/v1/health - Si l’API ne répond pas, consultez les journaux du conteneur
api - Si la base de données est indisponible, le contrôle de santé échouera — résolvez d’abord le problème de base de données
Obtenir de l’aide
Section intitulée « Obtenir de l’aide »Si vous ne parvenez pas à résoudre un problème :
- Recherchez dans les tickets existants du dépôt selfhosted
- Soumettez un nouveau ticket avec vos journaux (en supprimant d’abord tout secret)
- Consultez le tableau Dev Requests si vous utilisez solyto.app