Improve production error troubleshooting and diagnostics

Update documentation and scripts to provide more detailed steps for diagnosing and resolving production errors, including checking logs, process status, and network connectivity.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: a8a78c07-e900-425c-a577-5b4c5894379d
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/a8a78c07-e900-425c-a577-5b4c5894379d/CRhacll
This commit is contained in:
michaelschal committed 2025-08-11 21:13:55 +00:00
1 parent f81b90018e
commit 16a4e2e30b
3 files changed
+201 -137

No files matched your search

+157 -102
View File
@@ -1,130 +1,185 @@
# Correction des Erreurs 502 - Production # Correction Erreur Production - "Une erreur s'est produite"
## Problème Identifié ## Problème Identifié
- Erreurs 502 (Bad Gateway) lors des appels API `/api/deliveries` et `/api/orders` Votre serveur de production affiche une page d'erreur générique au lieu de l'application LogiFlow.
- CMD-55 n'apparaît pas en gris dans le calendrier
- Erreurs TypeScript dans le code du calendrier
## Solutions ## Diagnostic Immédiat
### 1. Vérification du Serveur Backend
Vérifiez que votre serveur Node.js fonctionne :
### 1. Vérifiez les Logs du Serveur
```bash ```bash
# Vérifier le processus # Si vous utilisez PM2
ps aux | grep node pm2 logs your-app-name --lines 50
# Vérifier les logs du serveur # Si vous utilisez systemctl
tail -f /path/to/your/server/logs sudo journalctl -u your-service-name -f --lines=50
# Vérifier si le port est écouté # Si vous utilisez Docker
netstat -tlnp | grep :YOUR_PORT docker-compose logs -f --tail=50
``` ```
### 2. Redémarrage du Serveur ### 2. Vérifiez le Statut de l'Application
```bash ```bash
# Via PM2 # PM2
pm2 status
pm2 info your-app-name
# systemctl
sudo systemctl status your-service-name
# Docker
docker-compose ps
```
## Solutions par Ordre de Priorité
### Solution 1 : Redémarrage Simple
```bash
# PM2
pm2 restart your-app-name pm2 restart your-app-name
pm2 logs your-app-name
# Via systemctl # systemctl
sudo systemctl restart your-node-service sudo systemctl restart your-service-name
sudo systemctl status your-node-service
# Via Docker # Docker
docker-compose restart docker-compose restart
docker-compose logs -f
``` ```
### 3. Vérification de la Configuration Proxy/Nginx ### Solution 2 : Vérification des Ports
Si vous utilisez un proxy inverse (Nginx), vérifiez la configuration :
```nginx
location /api/ {
proxy_pass http://localhost:YOUR_NODE_PORT/api/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 86400;
}
```
### 4. Correction SQL Directe pour CMD-55
Pendant que vous résolvez les erreurs 502, corrigez CMD-55 directement :
```sql
-- Connexion à votre base
psql -h your-host -U your-user -d your-database
-- Correction CMD-55
UPDATE orders
SET status = 'delivered'
WHERE id = 55
AND status != 'delivered'
AND EXISTS (
SELECT 1 FROM deliveries d
WHERE d."orderId" = 55
AND d.status = 'delivered'
);
-- Vérifier le résultat
SELECT o.id, o.status, COUNT(d.id) as deliveries,
COUNT(CASE WHEN d.status = 'delivered' THEN 1 END) as delivered_deliveries
FROM orders o
LEFT JOIN deliveries d ON o.id = d."orderId"
WHERE o.id = 55
GROUP BY o.id, o.status;
```
### 5. Test des API manuellement
```bash ```bash
# Tester l'API orders # Vérifiez quel processus utilise le port (généralement 5000 ou 3000)
curl -X GET "http://your-server.com/api/orders" \ sudo netstat -tulpn | grep :5000
-H "Cookie: your-session-cookie" sudo lsof -i :5000
# Tester l'API deliveries # Si un autre processus occupe le port, le tuer
curl -X GET "http://your-server.com/api/deliveries" \ sudo kill -9 <PID>
-H "Cookie: your-session-cookie"
``` ```
## Actions Prioritaires ### Solution 3 : Reconstruction Complete
1. **Immédiat** : Exécuter la correction SQL pour CMD-55
2. **Urgent** : Redémarrer votre serveur Node.js
3. **Important** : Vérifier les logs pour identifier la cause des 502
## Diagnostic des Logs
Recherchez dans vos logs :
```bash ```bash
# Erreurs Node.js # Sauvegarder les modifications récentes
grep -i "error\|crash\|exception" /path/to/logs cp -r client/src client/src.current
# Erreurs de base de données # Reconstruction complète
grep -i "database\|postgres\|connection" /path/to/logs npm install
npm run build
# Erreurs de mémoire # Redémarrage
grep -i "memory\|heap" /path/to/logs pm2 restart your-app-name --update-env
``` ```
## Résultat Attendu ### Solution 4 : Vérification des Variables d'Environnement
```bash
# Vérifiez que les variables essentielles sont définies
echo $NODE_ENV
echo $DATABASE_URL
echo $PORT
Après correction : # Si manquantes, les redéfinir
- Les API `/api/orders` et `/api/deliveries` répondent sans erreur 502 export NODE_ENV=production
- CMD-55 apparaît en gris dans le calendrier export PORT=5000
- Le bouton "Sync Status" fonctionne correctement # etc...
```
--- ### Solution 5 : Vérification de la Base de Données
```bash
# Test de connexion PostgreSQL
psql $DATABASE_URL -c "SELECT 1;"
**Note** : La correction SQL de CMD-55 peut être appliquée immédiatement, indépendamment de la résolution des erreurs 502. # Si la connexion échoue, vérifiez les credentials
```
## Scripts de Diagnostic Automatique
### Script de Santé Générale
```bash
#!/bin/bash
echo "=== DIAGNOSTIC PRODUCTION ==="
echo "Date: $(date)"
echo ""
echo "1. Status PM2:"
pm2 status
echo ""
echo "2. Processes sur port 5000:"
sudo lsof -i :5000
echo ""
echo "3. Logs récents (10 dernières lignes):"
pm2 logs your-app-name --lines 10 --nostream
echo ""
echo "4. Espace disque:"
df -h
echo ""
echo "5. Mémoire:"
free -h
echo ""
echo "6. Variables d'environnement critiques:"
echo "NODE_ENV: $NODE_ENV"
echo "PORT: $PORT"
echo "DATABASE_URL: ${DATABASE_URL:0:20}..." # Masque les credentials
```
Sauvegardez ce script sous `production-health-check.sh` et exécutez-le :
```bash
chmod +x production-health-check.sh
./production-health-check.sh
```
## Correction Spécifique selon l'Erreur
### Si l'erreur est "EADDRINUSE" (Port occupé)
```bash
sudo lsof -i :5000
sudo kill -9 <PID_du_processus>
pm2 restart your-app-name
```
### Si l'erreur est "Database connection failed"
```bash
# Testez la connexion DB
psql $DATABASE_URL -c "\dt"
# Redémarrez les services de DB si nécessaire
sudo systemctl restart postgresql
```
### Si l'erreur est "Module not found"
```bash
# Réinstallation complète
rm -rf node_modules package-lock.json
npm install
npm run build
pm2 restart your-app-name
```
## Prévention Future
### 1. Monitoring Automatique
Ajoutez cette ligne à votre crontab :
```bash
crontab -e
# Ajouter cette ligne pour vérifier chaque minute
* * * * * curl -f http://localhost:5000/api/health || pm2 restart your-app-name
```
### 2. Sauvegarde Automatique
```bash
# Script de sauvegarde quotidienne
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
tar -czf /backup/logiflow_$DATE.tar.gz /path/to/your/app
find /backup -name "logiflow_*.tar.gz" -mtime +7 -delete
```
## Actions Immédiates Recommandées
1. **Exécutez** le script de diagnostic ci-dessus
2. **Copiez-collez** les résultats pour analyse
3. **Tentez** un redémarrage simple en premier
4. **Si le problème persiste**, reconstruisez l'application
Une fois que vous aurez exécuté ces commandes, envoyez-moi les logs d'erreur pour un diagnostic plus précis.
Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

Executable → Regular
+44 -35
View File
@@ -1,45 +1,54 @@
#!/bin/bash #!/bin/bash
echo "=== DIAGNOSTIC PRODUCTION LOGIFLOW ==="
echo "Date: $(date)"
echo ""
# Script de vérification de santé pour LogiFlow en production echo "1. Status PM2:"
echo "🔍 Vérification de santé LogiFlow Production" pm2 status 2>/dev/null || echo "PM2 non disponible"
echo "=============================================="
# Vérifier le status des containers
echo "📊 Status des containers:"
docker-compose ps
echo "" echo ""
echo "🏥 Health checks:" echo "2. Processes sur port 5000:"
docker-compose exec logiflow wget --spider -q http://localhost:3000/api/health sudo lsof -i :5000 2>/dev/null || netstat -tulpn | grep :5000 2>/dev/null || echo "Aucun processus sur port 5000"
if [ $? -eq 0 ]; then
echo "✅ Health check API OK" echo ""
echo "3. Status systemctl (si applicable):"
sudo systemctl status logiflow 2>/dev/null || echo "Service systemctl non trouvé"
echo ""
echo "4. Status Docker (si applicable):"
docker-compose ps 2>/dev/null || echo "Docker non utilisé"
echo ""
echo "5. Logs récents application:"
if command -v pm2 &> /dev/null; then
pm2 logs --lines 10 --nostream 2>/dev/null
elif [ -f /var/log/logiflow.log ]; then
tail -10 /var/log/logiflow.log
else else
echo "❌ Health check API FAILED" echo "Logs non trouvés"
fi fi
# Vérifier les fichiers statiques
echo "" echo ""
echo "📁 Vérification des fichiers statiques:" echo "6. Espace disque:"
docker-compose exec logiflow ls -la /app/dist/public/ | head -10 df -h /
# Test des endpoints critiques
echo ""
echo "🌐 Test des endpoints:"
echo "Health:"
curl -s -o /dev/null -w "Status: %{http_code}\n" https://logiflow.ffnancy.fr/api/health
echo "Root:"
curl -s -o /dev/null -w "Status: %{http_code}\n" https://logiflow.ffnancy.fr/
echo "SAV:"
curl -s -o /dev/null -w "Status: %{http_code}\n" https://logiflow.ffnancy.fr/sav
# Dernières logs
echo ""
echo "📋 Dernières logs (10 lignes):"
docker-compose logs --tail=10 logiflow
echo "" echo ""
echo "🔧 Si erreur 502 persistent:" echo "7. Mémoire:"
echo " docker-compose restart logiflow" free -h
echo " docker-compose up --build -d # Rebuild complet"
echo ""
echo "8. Variables d'environnement critiques:"
echo "NODE_ENV: ${NODE_ENV:-'NON_DEFINI'}"
echo "PORT: ${PORT:-'NON_DEFINI'}"
echo "DATABASE_URL: ${DATABASE_URL:+DEFINI}"
echo ""
echo "9. Test de connectivité localhost:"
curl -s -o /dev/null -w "%{http_code}" http://localhost:5000/api/health || echo "Service non accessible"
echo ""
echo "10. Processus Node.js actifs:"
ps aux | grep node | grep -v grep || echo "Aucun processus Node.js"
echo ""
echo "=== FIN DIAGNOSTIC ==="