mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
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:
1 parent
f81b90018e
commit
16a4e2e30b
3 files changed
+201
-137
No files matched your search
+157
-102
@@ -1,130 +1,185 @@
|
||||
# Correction des Erreurs 502 - Production
|
||||
# Correction Erreur Production - "Une erreur s'est produite"
|
||||
|
||||
## Problème Identifié
|
||||
- Erreurs 502 (Bad Gateway) lors des appels API `/api/deliveries` et `/api/orders`
|
||||
- CMD-55 n'apparaît pas en gris dans le calendrier
|
||||
- Erreurs TypeScript dans le code du calendrier
|
||||
Votre serveur de production affiche une page d'erreur générique au lieu de l'application LogiFlow.
|
||||
|
||||
## Solutions
|
||||
|
||||
### 1. Vérification du Serveur Backend
|
||||
|
||||
Vérifiez que votre serveur Node.js fonctionne :
|
||||
## Diagnostic Immédiat
|
||||
|
||||
### 1. Vérifiez les Logs du Serveur
|
||||
```bash
|
||||
# Vérifier le processus
|
||||
ps aux | grep node
|
||||
# Si vous utilisez PM2
|
||||
pm2 logs your-app-name --lines 50
|
||||
|
||||
# Vérifier les logs du serveur
|
||||
tail -f /path/to/your/server/logs
|
||||
# Si vous utilisez systemctl
|
||||
sudo journalctl -u your-service-name -f --lines=50
|
||||
|
||||
# Vérifier si le port est écouté
|
||||
netstat -tlnp | grep :YOUR_PORT
|
||||
# Si vous utilisez Docker
|
||||
docker-compose logs -f --tail=50
|
||||
```
|
||||
|
||||
### 2. Redémarrage du Serveur
|
||||
|
||||
### 2. Vérifiez le Statut de l'Application
|
||||
```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 logs your-app-name
|
||||
|
||||
# Via systemctl
|
||||
sudo systemctl restart your-node-service
|
||||
sudo systemctl status your-node-service
|
||||
# systemctl
|
||||
sudo systemctl restart your-service-name
|
||||
|
||||
# Via Docker
|
||||
# Docker
|
||||
docker-compose restart
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### 3. Vérification de la Configuration Proxy/Nginx
|
||||
|
||||
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
|
||||
|
||||
### Solution 2 : Vérification des Ports
|
||||
```bash
|
||||
# Tester l'API orders
|
||||
curl -X GET "http://your-server.com/api/orders" \
|
||||
-H "Cookie: your-session-cookie"
|
||||
# Vérifiez quel processus utilise le port (généralement 5000 ou 3000)
|
||||
sudo netstat -tulpn | grep :5000
|
||||
sudo lsof -i :5000
|
||||
|
||||
# Tester l'API deliveries
|
||||
curl -X GET "http://your-server.com/api/deliveries" \
|
||||
-H "Cookie: your-session-cookie"
|
||||
# Si un autre processus occupe le port, le tuer
|
||||
sudo kill -9 <PID>
|
||||
```
|
||||
|
||||
## Actions Prioritaires
|
||||
|
||||
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 :
|
||||
|
||||
### Solution 3 : Reconstruction Complete
|
||||
```bash
|
||||
# Erreurs Node.js
|
||||
grep -i "error\|crash\|exception" /path/to/logs
|
||||
# Sauvegarder les modifications récentes
|
||||
cp -r client/src client/src.current
|
||||
|
||||
# Erreurs de base de données
|
||||
grep -i "database\|postgres\|connection" /path/to/logs
|
||||
# Reconstruction complète
|
||||
npm install
|
||||
npm run build
|
||||
|
||||
# Erreurs de mémoire
|
||||
grep -i "memory\|heap" /path/to/logs
|
||||
# Redémarrage
|
||||
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 :
|
||||
- Les API `/api/orders` et `/api/deliveries` répondent sans erreur 502
|
||||
- CMD-55 apparaît en gris dans le calendrier
|
||||
- Le bouton "Sync Status" fonctionne correctement
|
||||
# Si manquantes, les redéfinir
|
||||
export NODE_ENV=production
|
||||
export PORT=5000
|
||||
# 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
@@ -1,45 +1,54 @@
|
||||
#!/bin/bash
|
||||
echo "=== DIAGNOSTIC PRODUCTION LOGIFLOW ==="
|
||||
echo "Date: $(date)"
|
||||
echo ""
|
||||
|
||||
# Script de vérification de santé pour LogiFlow en production
|
||||
echo "🔍 Vérification de santé LogiFlow Production"
|
||||
echo "=============================================="
|
||||
|
||||
# Vérifier le status des containers
|
||||
echo "📊 Status des containers:"
|
||||
docker-compose ps
|
||||
echo "1. Status PM2:"
|
||||
pm2 status 2>/dev/null || echo "PM2 non disponible"
|
||||
|
||||
echo ""
|
||||
echo "🏥 Health checks:"
|
||||
docker-compose exec logiflow wget --spider -q http://localhost:3000/api/health
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Health check API OK"
|
||||
echo "2. Processes sur port 5000:"
|
||||
sudo lsof -i :5000 2>/dev/null || netstat -tulpn | grep :5000 2>/dev/null || echo "Aucun processus sur port 5000"
|
||||
|
||||
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
|
||||
echo "❌ Health check API FAILED"
|
||||
echo "Logs non trouvés"
|
||||
fi
|
||||
|
||||
# Vérifier les fichiers statiques
|
||||
echo ""
|
||||
echo "📁 Vérification des fichiers statiques:"
|
||||
docker-compose exec logiflow ls -la /app/dist/public/ | head -10
|
||||
|
||||
# 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 "6. Espace disque:"
|
||||
df -h /
|
||||
|
||||
echo ""
|
||||
echo "🔧 Si erreur 502 persistent:"
|
||||
echo " docker-compose restart logiflow"
|
||||
echo " docker-compose up --build -d # Rebuild complet"
|
||||
echo "7. Mémoire:"
|
||||
free -h
|
||||
|
||||
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 ==="
|
||||
Reference in new issue
Block a user