diff --git a/ansiblenginx/.gitignore b/ansiblenginx/.gitignore new file mode 100644 index 0000000..b694934 --- /dev/null +++ b/ansiblenginx/.gitignore @@ -0,0 +1 @@ +.venv \ No newline at end of file diff --git a/ansiblenginx/EXERCICE.md b/ansiblenginx/EXERCICE.md new file mode 100644 index 0000000..8977baf --- /dev/null +++ b/ansiblenginx/EXERCICE.md @@ -0,0 +1,402 @@ +# 🎯 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 + + + + + + Mon site dĂ©ployĂ© avec Ansible + + + +
+

🚀 Bienvenue sur mon serveur !

+

Ce site a été déployé automatiquement avec Ansible.

+ + +
+ + +``` + +#### Étape 3.3 : CrĂ©er un fichier CSS +**CrĂ©e `files/style.css`** : +```css +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: Arial, sans-serif; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + min-height: 100vh; + display: flex; + justify-content: center; + align-items: center; +} + +.container { + background: white; + padding: 3rem; + border-radius: 15px; + box-shadow: 0 10px 40px rgba(0,0,0,0.3); + max-width: 600px; + text-align: center; +} + +h1 { + color: #667eea; + margin-bottom: 1rem; + font-size: 2.5rem; +} + +p { + color: #333; + margin-bottom: 1rem; + font-size: 1.1rem; +} + +ul { + list-style: none; + margin: 2rem 0; +} + +ul li { + background: #f0f0f0; + padding: 0.8rem; + margin: 0.5rem 0; + border-radius: 8px; + font-size: 1rem; +} + +.footer { + margin-top: 2rem; + font-style: italic; + color: #667eea; +} +``` + +#### Étape 3.4 : DĂ©ployer les fichiers sur le serveur +**Ajoute ces tĂąches dans `playbook.yml`** (avant le handler) : +```yaml +- name: CrĂ©er le dossier du site web + file: + path: /var/www/html + state: directory + owner: www-data + group: www-data + mode: '0755' + +- name: DĂ©ployer la page HTML + template: + src: files/index.html + dest: /var/www/html/index.html + owner: www-data + group: www-data + mode: '0644' + +- name: DĂ©ployer le fichier CSS + copy: + src: files/style.css + dest: /var/www/html/style.css + owner: www-data + group: www-data + mode: '0644' +``` + +**💡 Explication** : +- `template:` pour index.html = permet d'utiliser des variables Ansible (comme la date) +- `copy:` pour style.css = copie simple du fichier +- `owner: www-data` = donne les bons droits Ă  Nginx + +#### ✅ VĂ©rification Partie 3 +Lance ton playbook : `./run.sh` + +Visite `https://defder.fr` : +- Entre login/password +- Tu vois **ton site personnalisĂ©** ! 🎉 + +--- + +## 🎓 RĂ©sumĂ© de ce que tu as appris + +| FonctionnalitĂ© | Module Ansible | UtilitĂ© | +|---------------|----------------|---------| +| **HTTPS** | `command` (certbot) | SĂ©curiser le site | +| **Authentification** | `htpasswd` | ProtĂ©ger l'accĂšs | +| **Configuration Nginx** | `template` | Personnaliser le serveur | +| **DĂ©ploiement de fichiers** | `copy` / `template` | Mettre en ligne ton site | +| **Handlers** | `handlers` | Recharger Nginx automatiquement | + +--- + +## 🚀 Pour aller plus loin (Bonus) + +### IdĂ©es d'amĂ©liorations : +1. **Plusieurs utilisateurs** : Ajoute plusieurs logins dans htpasswd +2. **Variables** : Mets le nom de domaine, email, etc. dans un fichier `vars.yml` +3. **RĂŽles Ansible** : Organise ton code en rĂŽles (nginx, ssl, web) +4. **CI/CD** : Automatise le dĂ©ploiement avec GitHub Actions +5. **Monitoring** : Ajoute un outil pour surveiller le serveur + +--- + +## 📚 Ressources utiles + +- **Documentation Ansible** : https://docs.ansible.com +- **Certbot** : https://certbot.eff.org +- **Nginx** : https://nginx.org/en/docs/ + +--- + +## ✅ Checklist finale + +- [ ] HTTPS fonctionne (cadenas vert) +- [ ] Authentification demande login/password +- [ ] Page personnalisĂ©e affichĂ©e +- [ ] Certificat SSL se renouvelle automatiquement +- [ ] Code versionnĂ© sur Git +- [ ] Playbook s'exĂ©cute sans erreur + +**Bravo ! Tu as créé une infrastructure complĂšte et sĂ©curisĂ©e avec Ansible ! 🎉** diff --git a/ansiblenginx/README.md b/ansiblenginx/README.md new file mode 100644 index 0000000..89ed09f --- /dev/null +++ b/ansiblenginx/README.md @@ -0,0 +1,37 @@ +# Projet Ansible - Installation Nginx sur VPS + +## Configuration + +1. **Modifier l'inventory** : Éditez `inventory.yml` et remplacez `YOUR_VPS_IP_ADDRESS` par l'adresse IP de votre VPS + +2. **Configurer l'accĂšs SSH** : + - Assurez-vous d'avoir accĂšs SSH Ă  votre VPS + - Si vous utilisez une clĂ© SSH, dĂ©commentez et configurez `ansible_ssh_private_key_file` + +## Utilisation + +### Tester la connexion +```bash +ansible all -m ping +``` + +### ExĂ©cuter le playbook +```bash +ansible-playbook playbook.yml +``` + +### ExĂ©cuter en mode vĂ©rification (dry-run) +```bash +ansible-playbook playbook.yml --check +``` + +### ExĂ©cuter avec verbositĂ© +```bash +ansible-playbook playbook.yml -v +``` + +## Structure du projet + +- `ansible.cfg` : Configuration Ansible +- `inventory.yml` : Inventaire des serveurs au format YAML +- `playbook.yml` : Playbook d'installation de Nginx diff --git a/ansiblenginx/ansible.cfg b/ansiblenginx/ansible.cfg new file mode 100644 index 0000000..c9f779f --- /dev/null +++ b/ansiblenginx/ansible.cfg @@ -0,0 +1,11 @@ +[defaults] +inventory = inventory.yml +host_key_checking = False +remote_user = root +retry_files_enabled = False + +[privilege_escalation] +become = True +become_method = sudo +become_user = root +become_ask_pass = False diff --git a/ansiblenginx/files/index.html b/ansiblenginx/files/index.html new file mode 100644 index 0000000..2e070cc --- /dev/null +++ b/ansiblenginx/files/index.html @@ -0,0 +1,22 @@ + + + + + + Mon site dĂ©ployĂ© avec Ansible + + + +
+

🚀 Bienvenue sur mon serveur !

+

Ce site a été déployé automatiquement avec Ansible.

+ + +
+ + diff --git a/ansiblenginx/files/style.css b/ansiblenginx/files/style.css new file mode 100644 index 0000000..2cfdcd6 --- /dev/null +++ b/ansiblenginx/files/style.css @@ -0,0 +1,54 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: Arial, sans-serif; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + min-height: 100vh; + display: flex; + justify-content: center; + align-items: center; +} + +.container { + background: white; + padding: 3rem; + border-radius: 15px; + box-shadow: 0 10px 40px rgba(0,0,0,0.3); + max-width: 600px; + text-align: center; +} + +h1 { + color: #667eea; + margin-bottom: 1rem; + font-size: 2.5rem; +} + +p { + color: #333; + margin-bottom: 1rem; + font-size: 1.1rem; +} + +ul { + list-style: none; + margin: 2rem 0; +} + +ul li { + background: #f0f0f0; + padding: 0.8rem; + margin: 0.5rem 0; + border-radius: 8px; + font-size: 1rem; +} + +.footer { + margin-top: 2rem; + font-style: italic; + color: #667eea; +} diff --git a/ansiblenginx/install.sh b/ansiblenginx/install.sh new file mode 100755 index 0000000..fdce59b --- /dev/null +++ b/ansiblenginx/install.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# Script d'installation du projet Ansible + +set -e + +echo "================================================" +echo "Installation du projet Ansible - Nginx sur VPS" +echo "================================================" +echo "" + +# VĂ©rifier si Python3 est installĂ© +if ! command -v python3 &> /dev/null; then + echo "❌ Python3 n'est pas installĂ©. Veuillez l'installer d'abord." + exit 1 +fi + +echo "✅ Python3 est installĂ©" + +# CrĂ©er un environnement virtuel s'il n'existe pas +if [ ! -d ".venv" ]; then + echo "📩 CrĂ©ation de l'environnement virtuel..." + python3 -m venv .venv + echo "✅ Environnement virtuel créé" +else + echo "✅ Environnement virtuel existe dĂ©jĂ " +fi + +# Activer l'environnement virtuel +echo "🔧 Activation de l'environnement virtuel..." +source .venv/bin/activate + +# Mettre Ă  jour pip +echo "âŹ†ïž Mise Ă  jour de pip..." +pip install --upgrade pip > /dev/null 2>&1 + +# Installer les dĂ©pendances +echo "đŸ“„ Installation d'Ansible et des dĂ©pendances..." +pip install -r requirements.txt + +echo "" +echo "✅ Installation terminĂ©e avec succĂšs!" +echo "" +echo "================================================" +echo "Prochaines Ă©tapes:" +echo "================================================" +echo "1. Éditez 'inventory.yml' et configurez l'IP de votre VPS" +echo "2. Activez l'environnement virtuel : source .venv/bin/activate" +echo "3. Testez la connexion : ansible all -m ping" +echo "4. Lancez le script : ./run.sh" +echo "" diff --git a/ansiblenginx/inventory.yml b/ansiblenginx/inventory.yml new file mode 100644 index 0000000..b652d5b --- /dev/null +++ b/ansiblenginx/inventory.yml @@ -0,0 +1,11 @@ +--- +all: + children: + webservers: + hosts: + vps1: + ansible_host: defder.fr + ansible_user: root + ansible_port: 22 + ansible_ssh_private_key_file: ./defderkey + \ No newline at end of file diff --git a/ansiblenginx/pipeline-auto.yml b/ansiblenginx/pipeline-auto.yml new file mode 100644 index 0000000..f6a6e51 --- /dev/null +++ b/ansiblenginx/pipeline-auto.yml @@ -0,0 +1,79 @@ +# ============================================== +# Pipeline Concourse - DĂ©ploiement Automatique +# ============================================== +# Surveille le repo Git et dĂ©ploie automatiquement + +resource_types: [] + +resources: + # Repo Git local (polling toutes les 30 secondes) + - name: repo + type: git + icon: gitlab + check_every: 30s + source: + uri: https://forge.gwenaelremond.fr/romain/ansiblenginx.git + branch: main + +jobs: + # Job principal : DĂ©ploiement automatique + - name: deploy-bricoloc + plan: + # 1. RĂ©cupĂšre le code depuis Git + - get: repo + trigger: true # DĂ©clenche automatiquement sur changement + + # 2. DĂ©ploie sur le VPS + - task: deploy-to-vps + config: + platform: linux + + image_resource: + type: registry-image + source: + repository: python + tag: "3.11-slim" + + inputs: + - name: repo + + params: + ssh_private_key: ((ssh_private_key)) + vps_host: ((vps_host)) + vps_user: ((vps_user)) + + run: + path: /bin/bash + args: + - -exc + - | + # Installer les dĂ©pendances + apt-get update && apt-get install -y openssh-client rsync sshpass + pip install ansible + + # Configurer SSH + mkdir -p ~/.ssh + echo "$ssh_private_key" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H $vps_host >> ~/.ssh/known_hosts 2>/dev/null + + cd repo + + # CrĂ©er l'inventaire dynamique + cat > inventory.yml << EOF + all: + hosts: + vps1: + ansible_host: $vps_host + ansible_user: $vps_user + ansible_ssh_private_key_file: ~/.ssh/id_rsa + children: + webservers: + hosts: + vps1: + EOF + + # Lancer le playbook Ansible + ansible-playbook -i inventory.yml playbook.yml + + echo "✅ DĂ©ploiement terminĂ© sur $vps_host" diff --git a/ansiblenginx/playbook.yml b/ansiblenginx/playbook.yml new file mode 100644 index 0000000..ee43f11 --- /dev/null +++ b/ansiblenginx/playbook.yml @@ -0,0 +1,239 @@ +--- +- name: Installer et configurer Nginx sur VPS Ubuntu + hosts: webservers + become: yes + + tasks: + - name: Mettre Ă  jour le cache apt + apt: + update_cache: yes + cache_valid_time: 3600 + + - name: Installer Nginx + apt: + name: nginx + state: present + + - name: Installer Node.js et npm + apt: + name: + - nodejs + - npm + state: present + + - name: Installer pnpm globalement + command: npm install -g pnpm + changed_when: false + + - name: Installer apache2-utils pour htpasswd + apt: + name: apache2-utils + state: present + + - name: Installer la librairie Python passlib + apt: + name: python3-passlib + state: present + + - name: CrĂ©er un fichier de mots de passe + htpasswd: + path: /etc/nginx/.htpasswd + name: admin + password: "mdp123" + owner: root + group: www-data + mode: '0640' + + - name: Installer Certbot pour Let's Encrypt + apt: + name: + - certbot + - python3-certbot-nginx + state: present + + - name: Obtenir un certificat SSL avec Certbot + command: certbot --nginx -d defder.fr --non-interactive --agree-tos --email bottero.romain1811@gmail.com --redirect + notify: Restart Nginx + args: + creates: /etc/letsencrypt/live/defder.fr/fullchain.pem + + - name: Configurer le renouvellement automatique du certificat + cron: + name: "Renouveler le certificat SSL" + minute: "0" + hour: "3" + job: "certbot renew --quiet" + + + - name: S'assurer qu'UFW est installĂ© + apt: + name: ufw + state: present + + - name: Autoriser le trafic SSH dans le firewall (UFW) + ufw: + rule: allow + port: '22' + proto: tcp + + - name: Autoriser le trafic HTTP dans le firewall (UFW) + ufw: + rule: allow + port: '80' + proto: tcp + + - name: Autoriser le trafic HTTPS dans le firewall (UFW) + ufw: + rule: allow + port: '443' + proto: tcp + + - name: Activer UFW(uncomplicated firewall) + ufw: + state: enabled + + - name: DĂ©marrer et activer Nginx + systemd: + name: nginx + state: started + enabled: yes + # Config Nginx supprimĂ©e - on utilise uniquement nginx-app-legacy.conf.j2 + # qui fait le reverse proxy vers l'app Node.js + + - name: Supprimer toute ancienne config Nginx obsolĂšte + file: + path: /etc/nginx/sites-available/defder + state: absent + + - name: DĂ©ployer la configuration Nginx pour l'app legacy + template: + src: templates/nginx-app-legacy.conf.j2 + dest: /etc/nginx/sites-available/defder + notify: Recharger Nginx + + - name: DĂ©ployer le service systemd pour l'app legacy + template: + src: templates/bricoloc-legacy.service.j2 + dest: /etc/systemd/system/bricoloc-legacy.service + notify: RedĂ©marrer l'app legacy + + - name: Activer et dĂ©marrer le service legacy + systemd: + name: bricoloc-legacy + state: started + enabled: yes + daemon_reload: yes + + - name: Activer le site + file: + src: /etc/nginx/sites-available/defder + dest: /etc/nginx/sites-enabled/defder + state: link + notify: Recharger Nginx + + - name: DĂ©sactiver le site par dĂ©faut + file: + path: /etc/nginx/sites-enabled/default + state: absent + notify: Recharger Nginx + + - name: VĂ©rifier que Nginx est en cours d'exĂ©cution + service: + name: nginx + state: started + register: nginx_status + + - name: Afficher le statut de Nginx + debug: + msg: "Nginx est installĂ© et en cours d'exĂ©cution" + + + - name: RĂ©cupĂ©rer l'IP du serveur + command: hostname -I + register: server_ip + changed_when: false + + - name: CrĂ©er le dossier du site web + file: + path: /var/www/apps + state: directory + owner: www-data + group: www-data + mode: '0755' + + - name: CrĂ©er le dossier .local pour pnpm + file: + path: /var/www/.local/share/pnpm + state: directory + owner: www-data + group: www-data + mode: '0755' + recurse: yes + + - name: DĂ©ployer l'app depuis le repo local + synchronize: + src: app/bricolociaac/ + dest: /var/www/apps/bricolociaac/ + delete: yes + rsync_opts: + - "--exclude=node_modules" + - "--exclude=.git" + + - name: DĂ©finir les permissions sur les fichiers dĂ©ployĂ©s + file: + path: /var/www/apps/bricolociaac + owner: www-data + group: www-data + recurse: yes + + - name: Installer les dĂ©pendances du projet + shell: | + cd /var/www/apps/bricolociaac + pnpm install --frozen-lockfile || pnpm install + environment: + NODE_ENV: production + PNPM_HOME: /var/www/.local/share/pnpm + timeout: 600 + + - name: Installer les dĂ©pendances de l'app legacy spĂ©cifiquement + shell: | + cd /var/www/apps/bricolociaac + pnpm install --filter legacy --frozen-lockfile || pnpm install --filter legacy + environment: + NODE_ENV: production + PNPM_HOME: /var/www/.local/share/pnpm + timeout: 600 + + - name: Builder l'app legacy + command: pnpm build:legacy + args: + chdir: /var/www/apps/bricolociaac + environment: + NODE_ENV: production + PNPM_HOME: /var/www/.local/share/pnpm + + - name: RedĂ©marrer le service bricoloc-legacy aprĂšs dĂ©ploiement + systemd: + name: bricoloc-legacy + state: restarted + daemon_reload: yes + + - name: Afficher l'URL d'accĂšs + debug: + msg: "Nginx est accessible Ă  l'adresse : https://defder.fr (ou http://{{ server_ip.stdout.split()[0] }} qui redirige vers HTTPS)" + + handlers: + - name: Restart Nginx + service: + name: nginx + state: restarted + + - name: Recharger Nginx + systemd: + name: nginx + state: reloaded + + - name: RedĂ©marrer l'app legacy + systemd: + name: bricoloc-legacy + state: restarted \ No newline at end of file diff --git a/ansiblenginx/requirements.txt b/ansiblenginx/requirements.txt new file mode 100644 index 0000000..40d19fd --- /dev/null +++ b/ansiblenginx/requirements.txt @@ -0,0 +1 @@ +ansible>=2.9 diff --git a/ansiblenginx/run.sh b/ansiblenginx/run.sh new file mode 100755 index 0000000..b26b439 --- /dev/null +++ b/ansiblenginx/run.sh @@ -0,0 +1 @@ +ansible-playbook -i inventory.yml --private-key defderkey playbook.yml \ No newline at end of file diff --git a/ansiblenginx/templates/bricoloc-legacy.service.j2 b/ansiblenginx/templates/bricoloc-legacy.service.j2 new file mode 100644 index 0000000..abcc879 --- /dev/null +++ b/ansiblenginx/templates/bricoloc-legacy.service.j2 @@ -0,0 +1,15 @@ +[Unit] +Description=Bricoloc Legacy App +After=network.target + +[Service] +Type=simple +User=www-data +WorkingDirectory=/var/www/apps/bricolociaac/apps/legacy-app +Environment="NODE_ENV=production" +ExecStart=/usr/bin/node src/server.js +Restart=on-failure +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/ansiblenginx/templates/nginx-app-legacy.conf.j2 b/ansiblenginx/templates/nginx-app-legacy.conf.j2 new file mode 100644 index 0000000..5e0e9b2 --- /dev/null +++ b/ansiblenginx/templates/nginx-app-legacy.conf.j2 @@ -0,0 +1,33 @@ +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; + + # AUTHENTIFICATION + auth_basic "Zone protĂ©gĂ©e - Connexion requise"; + auth_basic_user_file /etc/nginx/.htpasswd; + + # Reverse proxy vers l'app legacy (port 3000) + location / { + proxy_pass http://localhost:3000; + 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; + } +}