Table des matières : [Masquer]
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}%" admin@temposwim.com < $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.