Le problème : – Après un nettoyage du VPS, les images ne se chargent plus car les fichiers physiques ont probablement été supprimés du serveur alors que les références en base de données existent encore.
Table des matières : [Masquer]
Diagnostic rapide en local :
Vérifier la structure de stockage
ls -la back/storage/app/public/
ls -la back/public/storage/
# Vérifier le lien symbolique
php artisan storage:link
Diagnostic en production via Docker
1. Vérifier l’état du stockage dans le conteneur API
# Entrer dans le conteneur API Laravel
docker exec -it api bash
# Vérifier la structure du stockage
ls -la storage/app/public/
ls -la storage/app/public/uploads/
# Vérifier le lien symbolique
ls -la public/storage/
# Sortir du conteneur
exit
2. Vérifier les logs des conteneurs
# Logs du conteneur API (Laravel)
docker logs api --tail=50
# Logs du conteneur frontend
docker logs frontend --tail=50
# Logs Traefik (proxy)
docker logs traefik --tail=50
Tester l’accès direct aux images
# Dans le conteneur API, tester si une image existe
docker exec -it api bash
curl -I http://localhost/storage/uploads/V40dVl1jPzXqrJzbfmocdEQPBsZHCxiOqGFle6va.jpg
exit
4. Vérifier la configuration Laravel dans le conteneur
# Entrer dans le conteneur API
docker exec -it api bash
# Vérifier la configuration
php artisan config:show filesystems
php artisan route:list | grep storage
# Recréer le lien symbolique si nécessaire
php artisan storage:link
# Vérifier les permissions
ls -la storage/
ls -la public/
exit
Solution immédiate
# Dans le conteneur API
docker exec -it api bash
# Créer le lien symbolique manquant
php artisan storage:link
# Vérifier que le lien est créé
ls -la public/storage/
# Tester l'accès à une image
curl -I http://localhost/storage/uploads/V40dVl1jPzXqrJzbfmocdEQPBsZHCxiOqGFle6va.jpg
exit
Après avoir créé le lien, testez directement dans votre navigateur : https://api.xxx.com/storage/uploads/V40dVl1jPzXqrJzbfmocdEQPBsZHCxiOqGFle6va.jpg
Pour éviter le problème à l’avenir
Option 1 : Modifier le Dockerfile du backend
Fichier : back/Dockerfile dockerfile/**
/**
* 🇬🇧 Add storage link creation in the Docker build
* 🇫🇷 Ajouter la création du lien de stockage dans le build Docker
*/
# Après l'installation des dépendances, ajouter :
RUN php artisan storage:link
Option 2 : Modifier le script de déploiement
Fichier : deploy/deploy.sh
#!/bin/bash
/**
* 🇬🇧 Ensure storage link exists after deployment
* 🇫🇷 S'assurer que le lien de stockage existe après le déploiement
*/
# Ajouter après le démarrage des conteneurs :
docker exec api php artisan storage:link