VPS – Problème, Diagnostic, Nettoyage et Vérification -Scripts-

01:30:54

Problème Détecté

  • Espace disque critique : 85% d’utilisation (40GB/48GB)
  • Application risquait de planter
  • Site web potentiellement inaccessible
  • VPS Ubuntu 24 avec Docker

Diagnostic

Étape 1 : Vérification de l’espace disque

# Vérifier l'utilisation globale
df -h

# Analyser les plus gros répertoires
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20

# Vérifier spécifiquement Docker
docker system df

 

Étape 2 : Localisation des gros consommateurs

Scripts d’Analyse

Script 1 : Analyse des Sauvegardes

# Créer le script d'analyse
cat > analyze-backups.sh << 'EOF'
#!/bin/bash

echo " ANALYSE DES SAUVEGARDES EXISTANTES"
echo "====================================="

echo " FICHIERS DE SAUVEGARDE PAR TAILLE (plus gros en premier):"
echo "============================================================"
find / -type f \( -name "*backup*" -o -name "*.tar.gz" -o -name "*.zip" -o -name "*dump*.sql" \) -exec ls -lh {} \; 2>/dev/null | sort -k5 -hr | head -20

echo ""
echo " FICHIERS DE SAUVEGARDE PAR DATE (plus anciens en premier):"
echo "=============================================================="
find / -type f \( -name "*backup*" -o -name "*.tar.gz" -o -name "*.zip" -o -name "*dump*.sql" \) -exec ls -lt {} \; 2>/dev/null | sort -k6,7 | head -20

echo ""
echo " TAILLE TOTALE DES SAUVEGARDES PAR DOSSIER:"
echo "=============================================="
find / -name "*backup*" -type d 2>/dev/null | while read dir; do
    if [ -d "$dir" ]; then
        size=$(du -sh "$dir" 2>/dev/null | cut -f1)
        echo "$size - $dir"
    fi
done | sort -hr

echo ""
echo " STATISTIQUES GLOBALES:"
echo "========================="
backup_files=$(find / -type f \( -name "*backup*" -o -name "*.tar.gz" -o -name "*.zip" -o -name "*dump*.sql" \) 2>/dev/null | wc -l)
backup_size=$(find / -type f \( -name "*backup*" -o -name "*.tar.gz" -o -name "*.zip" -o -name "*dump*.sql" \) -exec du -ch {} + 2>/dev/null | tail -n1 | cut -f1)

echo "Nombre total de fichiers de sauvegarde: $backup_files"
echo "Taille totale des sauvegardes: $backup_size"
EOF

chmod +x analyze-backups.sh

 

Script 2 : Exploration Complète du VPS

 

cat > explore-vps.sh << 'EOF'
#!/bin/bash

echo " EXPLORATION DU VPS TEMPOSWIM"
echo "==============================="

echo ""
echo " INFORMATIONS SYSTÈME"
echo "======================="
echo "Utilisateur courant: $(whoami)"
echo "Répertoire courant: $(pwd)"
echo "Nom du serveur: $(hostname)"
echo "OS: $(lsb_release -d 2>/dev/null | cut -f2 || echo "Ubuntu")"
echo "Uptime: $(uptime)"

echo ""
echo " ESPACE DISQUE"
echo "==============="
df -h

echo ""
echo " DOCKER"
echo "=========="
if command -v docker &> /dev/null; then
    echo "Docker installé "
    echo "Conteneurs en cours:"
    docker ps
    echo ""
    echo "Espace Docker:"
    docker system df
else
    echo "Docker non installé "
fi

echo ""
echo "📂 RÉPERTOIRES IMPORTANTS"
echo "========================="
echo "/var/www (Sites web):"
ls -la /var/www/ 2>/dev/null | head -10 || echo "Répertoire non accessible"

echo ""
echo "/opt (Applications):"
ls -la /opt/ 2>/dev/null | head -10 || echo "Répertoire non accessible"

echo ""
echo "🔧 PROCESSUS ACTIFS"
echo "==================="
ps aux | grep -E "(node|php|nginx|apache|mysql)" | head -10

echo ""
echo " PORTS OUVERTS"
echo "================="
ss -tlnp | grep -E "(80|443|3000|8000|8080)" | head -10
EOF

chmod +x explore-vps.sh

 

Procédure de Nettoyage

Étape 1 : Nettoyage Docker (PRINCIPAL)

 

# Nettoyage Docker ciblé (libère 25+ GB)
echo "🐳 NETTOYAGE DOCKER CIBLÉ"
echo "========================"

# Voir l'espace avant
echo "📊 Espace Docker AVANT:"
docker system df
df -h / | grep sda1

# Arrêter temporairement les conteneurs
echo "⏸️ Arrêt temporaire des conteneurs..."
docker stop $(docker ps -q)

# Nettoyage agressif
echo "🗑️ Suppression de TOUS les éléments Docker inutilisés..."
docker system prune -a -f --volumes

# Redémarrer les conteneurs
echo "▶️ Redémarrage des conteneurs..."
cd /opt/temposwim
docker-compose up -d

# Vérifier l'espace après
echo "📊 Espace Docker APRÈS:"
docker system df
df -h / | grep sda1

 

Étape 2 : Nettoyage des Logs

 

# Nettoyage des logs système
echo "📋 NETTOYAGE DES LOGS"
echo "===================="

# Logs système
echo "Taille journald avant:"
journalctl --disk-usage

# Nettoyer agressivement
journalctl --vacuum-time=7d    # Garder seulement 7 jours
journalctl --vacuum-size=100M  # Limiter à 100MB

echo "Taille journald après:"
journalctl --disk-usage

# Vider les logs anciens
find /var/log -name "*.log" -size +10M -mtime +7 -delete 2>/dev/null
find /var/log -name "*.log.*" -delete 2>/dev/null
find /var/log -name "*.gz" -delete 2>/dev/null

echo "✅ Logs nettoyés"

 

Étape 3 : Nettoyage APT

 

# Nettoyage du cache APT
echo "📦 NETTOYAGE APT"
echo "==============="

apt clean
apt autoremove -y
apt autoclean

echo "✅ APT nettoyé"

 

Étape 4 : Nettoyage Fichiers Temporaires

 

# Nettoyage /tmp et fichiers temporaires
echo "🗂️ NETTOYAGE FICHIERS TEMPORAIRES"
echo "================================"

# Nettoyer /tmp
find /tmp -type f -atime +1 -delete 2>/dev/null
find /tmp -type d -empty -delete 2>/dev/null

# Nettoyer les core dumps
find / -name "core.*" -delete 2>/dev/null

echo "✅ Fichiers temporaires nettoyés"

 

Scripts de Prévention

1. Nettoyage Automatique Hebdomadaire

 

# Créer un script de nettoyage automatique
cat > /usr/local/bin/docker-auto-cleanup.sh << 'EOF'
#!/bin/bash

LOG_FILE="/var/log/docker-cleanup.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

echo "[$DATE] 🐳 Nettoyage Docker automatique démarré" >> $LOG_FILE

# Vérifier l'espace avant
BEFORE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
echo "[$DATE] Espace disque avant: ${BEFORE}%" >> $LOG_FILE

# Nettoyage Docker
docker system prune -f --volumes >> $LOG_FILE 2>&1

# Vérifier l'espace après
AFTER=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
echo "[$DATE] Espace disque après: ${AFTER}%" >> $LOG_FILE

# Alertes si nécessaire
if [ $AFTER -gt 70 ]; then
    echo "[$DATE] ⚠️ ALERTE: Disque encore à ${AFTER}% après nettoyage" >> $LOG_FILE
fi

echo "[$DATE]  Nettoyage terminé" >> $LOG_FILE
echo "----------------------------------------" >> $LOG_FILE
EOF

chmod +x /usr/local/bin/docker-auto-cleanup.sh

# Ajouter au crontab (tous les dimanches à 2h du matin)
echo "0 2 * * 0 /usr/local/bin/docker-auto-cleanup.sh" | crontab -

 

2. Surveillance de l’Espace Disque

 

# Script de monitoring quotidien
cat > /usr/local/bin/disk-monitor.sh << 'EOF'
#!/bin/bash

THRESHOLD=70
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
DATE=$(date '+%Y-%m-%d %H:%M:%S')
LOG_FILE="/var/log/disk-monitor.log"

echo "[$DATE] Utilisation disque: ${USAGE}%" >> $LOG_FILE

if [ $USAGE -gt $THRESHOLD ]; then
    echo "[$DATE] ⚠️ ALERTE: Disque à ${USAGE}% d'utilisation!" >> $LOG_FILE
    echo "[$DATE] Détails Docker:" >> $LOG_FILE
    docker system df >> $LOG_FILE 2>&1
    
    # Envoyer une alerte (optionnel)
    # mail -s "Alerte VPS: Disque ${USAGE}%"  < $LOG_FILE
fi
EOF

chmod +x /usr/local/bin/disk-monitor.sh

# Surveillance quotidienne à 8h
echo "0 8 * * * /usr/local/bin/disk-monitor.sh" | crontab -

 

3. Nettoyage d’Urgence

 

# Script de nettoyage d'urgence (>80% d'utilisation)
cat > /usr/local/bin/emergency-cleanup.sh << 'EOF'
#!/bin/bash

echo "🚨 NETTOYAGE D'URGENCE VPS"
echo "========================="

USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
echo "Utilisation actuelle: ${USAGE}%"

if [ $USAGE -lt 80 ]; then
    echo "❌ Pas d'urgence (< 80%)"
    exit 0
fi

echo "🧹 Démarrage du nettoyage d'urgence..."

# 1. Docker
echo "1. Nettoyage Docker..."
docker system prune -a -f --volumes

# 2. Logs
echo "2. Nettoyage logs..."
journalctl --vacuum-time=3d
journalctl --vacuum-size=50M

# 3. APT
echo "3. Nettoyage APT..."
apt clean
apt autoremove -y

# 4. Tmp
echo "4. Nettoyage /tmp..."
find /tmp -type f -mtime +1 -delete 2>/dev/null

# 5. Core dumps
echo "5. Nettoyage core dumps..."
find / -name "core.*" -delete 2>/dev/null

FINAL_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
echo "✅ Nettoyage terminé: ${USAGE}%  ${FINAL_USAGE}%"

if [ $FINAL_USAGE -gt 70 ]; then
    echo "⚠️ Attention: Utilisation encore élevée (${FINAL_USAGE}%)"
    echo "Analyse manuelle requise"
fi
EOF

chmod +x /usr/local/bin/emergency-cleanup.sh

 

Bonnes Pratiques

1. Optimisation Dockerfile

 

# Dans vos Dockerfiles Laravel
FROM php:8.1-fpm

# Installer les dépendances et nettoyer en une seule couche
RUN apt-get update && apt-get install -y \
    git unzip curl \
    && rm -rf /var/lib/apt/lists/*

# Optimiser Composer
RUN composer install --no-dev --optimize-autoloader \
    && composer clear-cache \
    && rm -rf /root/.composer/cache

# Nettoyer après installation
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

 

2. Fichier .dockerignore

 

# .dockerignore pour éviter les fichiers inutiles
node_modules/
vendor/
.git/
.gitignore
*.log
*.tmp
.env.local
.env.development
.DS_Store
Thumbs.db

 

3. Configuration Docker Compose

 

# Utiliser des volumes nommés au lieu de bind mounts quand possible
version: '3.8'
services:
  app:
    image: your-app
    volumes:
      - app_data:/var/www/html
      # Éviter: - ./:/var/www/html (bind mount)

volumes:
  app_data:

 

4. Rotation des Logs

 

# Configuration dans /etc/logrotate.d/docker
/var/log/docker/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0644 root root
}

 

Surveillance Continue

1. Dashboard de Monitoring

 

# Script de rapport quotidien
cat > /usr/local/bin/daily-report.sh << 'EOF'
#!/bin/bash

echo "📊 RAPPORT QUOTIDIEN VPS TEMPOSWIM - $(date)"
echo "============================================="

echo ""
echo "💾 ESPACE DISQUE:"
df -h | grep -E "(Filesystem|/dev/sda1)"

echo ""
echo "🐳 DOCKER:"
docker system df

echo ""
echo "📈 TOP 10 PROCESSUS (CPU):"
ps aux --sort=-%cpu | head -11

echo ""
echo "📊 TOP 10 PROCESSUS (MÉMOIRE):"
ps aux --sort=-%mem | head -11

echo ""
echo "🌐 STATUT CONTENEURS:"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

echo ""
echo "📋 LOGS RÉCENTS (Erreurs):"
docker-compose -f /opt/temposwim/docker-compose.yml logs --tail=5 | grep -i error || echo "Aucune erreur récente"

echo ""
echo "✅ Rapport généré le $(date)"
EOF

chmod +x /usr/local/bin/daily-report.sh

# Rapport quotidien à 9h
echo "0 9 * * * /usr/local/bin/daily-report.sh > /var/log/daily-report.log" | crontab -

 

2. Alertes Proactives

 

# Script d'alertes intelligentes
cat > /usr/local/bin/smart-alerts.sh << 'EOF'
#!/bin/bash

LOG_FILE="/var/log/smart-alerts.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

# Vérifications multiples
DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
MEMORY_USAGE=$(free | awk 'NR==2{printf "%.0f", $3*100/$2}')
LOAD_AVG=$(uptime | awk -F'[a-z]:' '{print $2}' | awk '{print $1}' | sed 's/,//')

# Vérifier les conteneurs
CONTAINERS_DOWN=$(docker ps -f "status=exited" -q | wc -l)

echo "[$DATE] Vérifications: Disque=${DISK_USAGE}% RAM=${MEMORY_USAGE}% Load=${LOAD_AVG} Containers_down=${CONTAINERS_DOWN}" >> $LOG_FILE

# Alertes conditionnelles
if [ $DISK_USAGE -gt 80 ]; then
    echo "[$DATE] 🚨 ALERTE CRITIQUE: Disque à ${DISK_USAGE}%" >> $LOG_FILE
elif [ $DISK_USAGE -gt 70 ]; then
    echo "[$DATE] ⚠️ ATTENTION: Disque à ${DISK_USAGE}%" >> $LOG_FILE
fi

if [ $CONTAINERS_DOWN -gt 0 ]; then
    echo "[$DATE] 🚨 ALERTE: ${CONTAINERS_DOWN} conteneur(s) arrêté(s)" >> $LOG_FILE
fi

if (( $(echo "$LOAD_AVG > 4.0" | bc -l) )); then
    echo "[$DATE] ⚠️ CHARGE ÉLEVÉE: Load average ${LOAD_AVG}" >> $LOG_FILE
fi
EOF

chmod +x /usr/local/bin/smart-alerts.sh

# Vérifications toutes les heures
echo "0 * * * * /usr/local/bin/smart-alerts.sh" | crontab -

 

Checklist de Maintenance

Quotidien

  • Vérifier l’espace disque (df -h)
    Vérifier les conteneurs (docker ps)
    Consulter les logs d’erreur

Hebdomadaire

  • Nettoyage Docker automatique (script)
    Vérifier les logs de surveillance
    Analyser les performances

Mensuel

  • Nettoyer les logs anciens manuellement
    Vérifier les sauvegardes
    Optimiser les images Docker
    Mettre à jour le système (apt update && apt upgrade)

En cas d’urgence (>80% disque)

  • Exécuter /usr/local/bin/emergency-cleanup.sh
    Analyser les gros consommateurs
    Nettoyer manuellement si nécessaire
    Redémarrer les services

 

Ressources Utiles

Commandes de Dépannage Rapide

 

# Espace disque
df -h
du -sh /* 2>/dev/null | sort -hr

# Docker
docker system df
docker system prune -a -f --volumes

# Logs
journalctl --disk-usage
journalctl --vacuum-time=7d

# Processus
htop
ps aux --sort=-%cpu | head -20

# Réseau
ss -tlnp
curl -I https://temposwim.com

 

Liens de Documentation

Optimisez la performance et la stabilité de votre Serveur Privé Virtuel (VPS) ! Ce guide pratique vous montrera comment effectuer un nettoyage en profondeur et une vérification complète de votre système, en mettant l’accent sur les bonnes pratiques avec Docker.

Découvrez des techniques essentielles pour :

  • Libérer de l’espace disque : Supprimez les images, conteneurs et volumes Docker inutilisés qui encombrent votre VPS.
  • Optimiser les ressources : Identifiez et gérez les processus gourmands, qu’ils soient liés à Docker ou non.
  • Assurer l’intégrité de votre système : Vérifiez l’état de santé de vos conteneurs Docker et de votre VPS en général.
  • Automatiser la maintenance : Mettez en place des scripts simples pour des nettoyages réguliers.
  • Que vous soyez développeur, administrateur système ou simplement soucieux de la performance de votre serveur, cet exemple concret avec Docker vous aidera à maintenir un VPS propre, rapide et fiable.