# đŻ Exercice : AmĂ©liorer le serveur Nginx avec Ansible ## đ Objectif de l'exercice Tu vas amĂ©liorer ton projet Ansible actuel en ajoutant 3 fonctionnalitĂ©s importantes : 1. â **HTTPS** (sĂ©curiser le site avec un certificat SSL) 2. â **Authentification** (protĂ©ger l'accĂšs avec login/password) 3. â **DĂ©ployer des pages web** (mettre ton propre site HTML) --- ## đ Partie 1 : Configurer HTTPS avec Let's Encrypt ### đ€ C'est quoi HTTPS ? - HTTP = ton site est accessible mais **pas sĂ©curisĂ©** (pas de cadenas đ) - HTTPS = ton site est **sĂ©curisĂ©** avec un certificat SSL (cadenas vert đ) - Les donnĂ©es sont **chiffrĂ©es** entre le navigateur et le serveur ### đ Ce que tu dois faire : #### Ătape 1.1 : Installer Certbot Certbot = outil gratuit pour obtenir un certificat SSL **Ajoute cette tĂąche dans `playbook.yml`** (aprĂšs l'installation de Nginx) : ```yaml - name: Installer Certbot pour Let's Encrypt apt: name: - certbot - python3-certbot-nginx state: present ``` **đĄ Explication** : - `certbot` = l'outil principal - `python3-certbot-nginx` = plugin pour configurer automatiquement Nginx #### Ătape 1.2 : GĂ©nĂ©rer le certificat SSL **Ajoute cette tĂąche** : ```yaml - name: Obtenir un certificat SSL avec Certbot command: certbot --nginx -d defder.fr --non-interactive --agree-tos --email ton-email@exemple.com args: creates: /etc/letsencrypt/live/defder.fr/fullchain.pem ``` **đĄ Explication** : - `--nginx` = configure automatiquement Nginx - `-d defder.fr` = ton nom de domaine - `--non-interactive` = pas de questions (automatique) - `--agree-tos` = accepte les conditions - `--email` = **REMPLACE par ton vrai email !** - `creates: ...` = ne refait pas si le certificat existe dĂ©jĂ #### Ătape 1.3 : Renouvellement automatique Les certificats expirent tous les 90 jours. Il faut les renouveler automatiquement. **Ajoute cette tĂąche** : ```yaml - name: Configurer le renouvellement automatique du certificat cron: name: "Renouveler certificat SSL" minute: "0" hour: "3" job: "certbot renew --quiet" ``` **đĄ Explication** : - VĂ©rifie chaque jour Ă 3h du matin si le certificat doit ĂȘtre renouvelĂ© - `--quiet` = ne fait pas de bruit dans les logs #### â VĂ©rification Partie 1 Lance ton playbook : `./run.sh` Ensuite, teste dans ton navigateur : `https://defder.fr` - Tu dois voir le **cadenas vert đ** - Le site est maintenant sĂ©curisĂ© ! --- ## đ Partie 2 : Ajouter une authentification ### đ€ C'est quoi l'authentification ? Une popup qui demande **login + password** avant d'accĂ©der au site. Utile pour protĂ©ger un site privĂ©, un backoffice, etc. ### đ Ce que tu dois faire : #### Ătape 2.1 : Installer les outils nĂ©cessaires **Ajoute cette tĂąche** : ```yaml - name: Installer apache2-utils pour htpasswd apt: name: apache2-utils state: present ``` **đĄ Explication** : - `htpasswd` = outil pour crĂ©er des fichiers de mots de passe #### Ătape 2.2 : CrĂ©er un utilisateur avec mot de passe **Ajoute cette tĂąche** : ```yaml - name: CrĂ©er un fichier de mots de passe htpasswd: path: /etc/nginx/.htpasswd name: admin password: "MonMotDePasse123" owner: root group: www-data mode: '0640' ``` **đĄ Explication** : - CrĂ©e un fichier `/etc/nginx/.htpasswd` - Utilisateur : `admin` - Mot de passe : `MonMotDePasse123` (**CHANGE-LE !**) - `mode: '0640'` = permissions sĂ©curisĂ©es #### Ătape 2.3 : CrĂ©er un fichier de configuration Nginx Tu vas crĂ©er un fichier de config personnalisĂ© pour Nginx. **D'abord, crĂ©e un dossier `templates/` dans ton projet** : ``` iaac/ âââ templates/ â âââ nginx-auth.conf.j2 âââ playbook.yml âââ inventory.yml ... ``` **CrĂ©e le fichier `templates/nginx-auth.conf.j2`** avec ce contenu : ```nginx server { listen 80; server_name defder.fr; # Redirection HTTP vers HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name defder.fr; # Certificats SSL (gĂ©nĂ©rĂ©s par Certbot) ssl_certificate /etc/letsencrypt/live/defder.fr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/defder.fr/privkey.pem; # Dossier racine du site root /var/www/html; index index.html; # AUTHENTIFICATION auth_basic "Zone protĂ©gĂ©e - Connexion requise"; auth_basic_user_file /etc/nginx/.htpasswd; location / { try_files $uri $uri/ =404; } } ``` **đĄ Explication** : - Redirige automatiquement HTTP â HTTPS - Active l'authentification avec `auth_basic` - Pointe vers le fichier de mots de passe #### Ătape 2.4 : DĂ©ployer la configuration **Ajoute cette tĂąche dans `playbook.yml`** : ```yaml - name: DĂ©ployer la configuration Nginx avec authentification template: src: templates/nginx-auth.conf.j2 dest: /etc/nginx/sites-available/defder notify: Recharger Nginx - name: Activer le site file: src: /etc/nginx/sites-available/defder dest: /etc/nginx/sites-enabled/defder state: link - name: DĂ©sactiver le site par dĂ©faut file: path: /etc/nginx/sites-enabled/default state: absent notify: Recharger Nginx ``` #### Ătape 2.5 : Ajouter un handler pour recharger Nginx **Ă la fin de `playbook.yml`**, ajoute : ```yaml handlers: - name: Recharger Nginx systemd: name: nginx state: reloaded ``` **đĄ Explication** : - Un handler = une action qui se dĂ©clenche quand un fichier change - Recharge Nginx quand la config est modifiĂ©e #### â VĂ©rification Partie 2 Lance ton playbook : `./run.sh` Visite `https://defder.fr` â Une popup apparaĂźt ! - Login : `admin` - Password : `MonMotDePasse123` (ou celui que tu as choisi) --- ## đš Partie 3 : DĂ©ployer des pages web personnalisĂ©es ### đ€ C'est quoi dĂ©ployer des pages ? Remplacer la page par dĂ©faut de Nginx par **ton propre site HTML**. ### đ Ce que tu dois faire : #### Ătape 3.1 : CrĂ©er un dossier pour ton site **Dans ton projet, crĂ©e un dossier `files/`** : ``` iaac/ âââ files/ â âââ index.html â âââ style.css âââ templates/ âââ playbook.yml ... ``` #### Ătape 3.2 : CrĂ©er une page HTML **CrĂ©e `files/index.html`** : ```html
Ce site a été déployé automatiquement avec Ansible.