Exercice 07 : Projet Capstone - Déployer et Surveiller un Serveur Web Nginx
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Installer et vérifier des logiciels avec
apt - ✅ Appliquer des permissions de répertoire web (
chmod/chown) - ✅ Vérifier qu'un processus tourne avec
pset surveiller les ressources avecfree/df - ✅ Configurer des variables d'environnement et des alias dans
.bashrc - ✅ Diagnostiquer la connectivité avec
ip addr,ss,curl - ✅ Analyser les logs d'accès avec des chaînes de pipes
Durée estimée : 45 minutes
Difficulté : ⭐⭐⭐⭐☆ (Avancé)
Prérequis :
- Avoir complété les exercices 01 à 05
- Avoir suivi le module Linux Intermédiaire (permissions, processus, APT, réseau)
- Un système Ubuntu/Debian avec accès
sudo
📖 Contexte
Cet exercice mobilise toutes les compétences du module Linux Intermédiaire :
- Gestion des paquets APT
- Permissions et propriété des fichiers
- Surveillance des processus et des ressources
- Variables d'environnement et configuration
.bashrc - Commandes réseau et analyse de logs avec des pipes
📋 Énoncé
Vous êtes chargé de déployer un mini-site web sur Nginx, de vérifier que tout fonctionne, de configurer votre environnement de travail, et de produire une analyse des logs d'accès.
🧭 Déroulement de l'exercice
Tâche 1 : Installer les outils nécessaires
Installez nginx, htop et curl via APT. Vérifiez que l'installation s'est bien déroulée en affichant la version de Nginx.
Indice : Avant d'installer, mettez toujours à jour la liste des paquets avec
apt update. Pour vérifier la version après installation :nginx -v.
Vérification : nginx -v doit afficher une version (ex : nginx/1.24.0).
Tâche 2 : Déployer un mini-site web
Créez un répertoire /var/www/mon-site/ et déployez-y une page index.html. Configurez les permissions pour que le serveur Nginx (qui tourne sous l'utilisateur www-data) puisse lire les fichiers.
Indice : Le répertoire doit appartenir à
www-data(chown -R www-data:www-data /var/www/mon-site). Les fichiers HTML doivent être en644(lisibles par tous) et le répertoire en755(navigable par tous).
Vérification : ls -la /var/www/mon-site/index.html doit afficher -rw-r--r-- 1 www-data www-data.
Tâche 3 : Vérifier les processus et les ressources
Sans utiliser systemctl, vérifiez que Nginx tourne en utilisant uniquement ps et grep. Affichez ensuite l'état des ressources système.
Indice :
ps aux | grep nginxliste les processus Nginx actifs.free -haffiche la RAM,df -hl'espace disque,uptimedepuis combien de temps le système tourne.
Vérification : ps aux | grep nginx | grep -v grep doit retourner au moins une ligne (le processus master Nginx).
Tâche 4 : Tester la connectivité réseau
Effectuez les 4 vérifications réseau suivantes et redirigez le résultat de chacune dans un fichier /tmp/rapport-reseau.txt :
- Adresse IP de la machine (
ip addr show) - Ports en écoute (
ss -tlnp) - Test de la page d'accueil locale (
curl -s http://localhost) - Vérification de la connectivité externe (
ping -c 3 google.com)
Indice : Utilisez
>>pour ajouter chaque résultat sans effacer le précédent. Ajoutez unechoentre chaque section pour séparer les blocs.
Vérification : cat /tmp/rapport-reseau.txt doit afficher les 4 sections. ss -tlnp | grep ':80' doit retourner une ligne.
Tâche 5 : Configurer l'environnement de travail
Ajoutez les éléments suivants à votre ~/.bashrc :
- Une variable d'environnement
WEBROOT="/var/www/mon-site" - Un alias
weblogqui affiche les 20 dernières lignes de/var/log/nginx/access.log - Une modification du
$PATHpour inclure~/scripts(même si ce dossier n'existe pas encore)
Rechargez .bashrc et vérifiez que la variable est bien définie.
Indice : Ajoutez
export WEBROOT="/var/www/mon-site",alias weblog='tail -20 /var/log/nginx/access.log', etexport PATH="$HOME/scripts:$PATH"dans.bashrc. Rechargez avecsource ~/.bashrc.
Vérification : echo $WEBROOT doit afficher /var/www/mon-site. type weblog doit afficher "weblog is aliased to...".
Tâche 6 : Analyser les logs d'accès avec des pipes
Générez quelques requêtes vers le serveur (curl http://localhost à répéter 5 fois), puis analysez /var/log/nginx/access.log avec des pipes pour produire :
- Le nombre total de requêtes dans le log
- Les 3 codes HTTP les plus fréquents (colonne du code de statut)
- La liste des User-Agents uniques
- Les requêtes ayant échoué (code 4xx ou 5xx)
Indice :
wc -lcompte les lignes. Le code HTTP est dans la 9e colonne :awk '{print $9}'. Filtrer les erreurs :awk '$9 ~ /^[45]/'.sort | uniq -c | sort -rnpour trier par fréquence.
Vérification : Les 4 commandes doivent s'exécuter sans erreur et afficher des résultats cohérents.
🗂️ Mini-Projet : Rapport d'exploitation complet
Produisez un rapport complet de l'état du serveur en assemblant les informations précédentes :
{
echo "========================================"
echo "RAPPORT D'EXPLOITATION - $(hostname)"
echo "Date : $(date)"
echo "========================================"
echo ""
echo "--- Ressources système ---"
echo "Mémoire :"
free -h
echo ""
echo "Espace disque :"
df -h /
echo ""
echo "--- Processus Nginx ---"
ps aux | grep nginx | grep -v grep
echo ""
echo "--- Réseau ---"
echo "IP de la machine :"
ip addr show | grep "inet " | grep -v 127.0.0.1
echo ""
echo "Ports en écoute :"
ss -tlnp
echo ""
echo "--- Analyse des logs ---"
echo "Total requêtes : $(wc -l < /var/log/nginx/access.log)"
echo ""
echo "Top 3 codes HTTP :"
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -3
echo ""
echo "--- Variable d'environnement ---"
echo "WEBROOT=$WEBROOT"
} | tee /tmp/rapport-exploitation.txtCheckpoints de validation :
nginx -vretourne une version validels -l /var/www/mon-site/index.htmlaffiche-rw-r--r-- 1 www-data www-dataps aux | grep nginx | grep -v grepretourne au moins une ligness -tlnp | grep ':80'retourne une ligne (Nginx écoute sur le port 80)curl -s http://localhostretourne le contenu HTML de votre pageecho $WEBROOTretourne/var/www/mon-site- Le fichier
/tmp/rapport-exploitation.txtexiste et contient toutes les sections