TP7 - Déploiement Ansible complet avec scripts PowerShell et documentation
This commit is contained in:
@@ -0,0 +1,255 @@
|
||||
# 🚀 Déploiement Ansible - DockeZR
|
||||
|
||||
Ce dossier contient les playbooks Ansible pour automatiser le déploiement de l'application DockeZR sur un serveur Linux distant.
|
||||
|
||||
## 📋 Prérequis
|
||||
|
||||
### Sur votre machine locale (Windows)
|
||||
|
||||
1. **Installer Ansible** via WSL2 ou utiliser un container Docker:
|
||||
|
||||
```bash
|
||||
# Option 1: WSL2 (Ubuntu)
|
||||
wsl --install
|
||||
# Puis dans WSL:
|
||||
sudo apt update
|
||||
sudo apt install ansible -y
|
||||
|
||||
# Option 2: Via Docker
|
||||
docker run -it --rm -v ${PWD}:/ansible ansible/ansible:latest
|
||||
```
|
||||
|
||||
2. **Vérifier l'installation**:
|
||||
```bash
|
||||
ansible --version
|
||||
```
|
||||
|
||||
### Sur le serveur distant
|
||||
|
||||
- Système Linux (Ubuntu 20.04/22.04 recommandé)
|
||||
- Accès SSH avec clé privée
|
||||
- Utilisateur avec droits sudo
|
||||
- Ports ouverts: 22 (SSH), 3000, 8001, 9090, 3001
|
||||
|
||||
## 📁 Structure des fichiers
|
||||
|
||||
```
|
||||
ansible/
|
||||
├── deploy.yml # Playbook principal de déploiement
|
||||
├── inventory.ini # Inventaire des serveurs
|
||||
├── README.md # Ce fichier
|
||||
├── group_vars/
|
||||
│ └── all.yml # Variables globales
|
||||
└── templates/
|
||||
└── env.prod.j2 # Template du fichier .env.prod
|
||||
```
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
### 1. Modifier l'inventaire
|
||||
|
||||
Éditez `inventory.ini` et remplacez les valeurs:
|
||||
|
||||
```ini
|
||||
[production]
|
||||
server ansible_host=VOTRE_IP_SERVEUR ansible_user=VOTRE_USER ansible_ssh_private_key_file=../../sskdockerz/ssh-key-2025-10-16.key
|
||||
```
|
||||
|
||||
**Exemple:**
|
||||
```ini
|
||||
[production]
|
||||
server ansible_host=192.168.1.100 ansible_user=ubuntu ansible_ssh_private_key_file=../../sskdockerz/ssh-key-2025-10-16.key
|
||||
```
|
||||
|
||||
### 2. Configurer les variables
|
||||
|
||||
Éditez `group_vars/all.yml` et modifiez:
|
||||
|
||||
```yaml
|
||||
# URL de votre repository GitHub
|
||||
project_repo: "https://github.com/VOTRE_USERNAME/dockezr.git"
|
||||
|
||||
# Mots de passe (IMPORTANT: changez-les!)
|
||||
postgres_password: "votre_mot_de_passe_securise"
|
||||
grafana_admin_password: "votre_mot_de_passe_grafana"
|
||||
```
|
||||
|
||||
### 3. Vérifier les permissions de la clé SSH
|
||||
|
||||
```bash
|
||||
# Sur Windows (WSL)
|
||||
chmod 600 ../../sskdockerz/ssh-key-2025-10-16.key
|
||||
|
||||
# Ou sur PowerShell
|
||||
icacls "..\..\sskdockerz\ssh-key-2025-10-16.key" /inheritance:r /grant:r "%USERNAME%:R"
|
||||
```
|
||||
|
||||
## 🚀 Exécution du Playbook
|
||||
|
||||
### Test de connexion
|
||||
|
||||
Avant de déployer, testez la connexion SSH:
|
||||
|
||||
```bash
|
||||
# Depuis le dossier ansible/
|
||||
ansible all -i inventory.ini -m ping
|
||||
```
|
||||
|
||||
Vous devriez voir:
|
||||
```
|
||||
server | SUCCESS => {
|
||||
"ping": "pong"
|
||||
}
|
||||
```
|
||||
|
||||
### Déploiement complet
|
||||
|
||||
```bash
|
||||
# Exécution du playbook complet
|
||||
ansible-playbook -i inventory.ini deploy.yml
|
||||
|
||||
# Avec affichage verbeux (pour debug)
|
||||
ansible-playbook -i inventory.ini deploy.yml -v
|
||||
|
||||
# Demander le mot de passe sudo si nécessaire
|
||||
ansible-playbook -i inventory.ini deploy.yml --ask-become-pass
|
||||
```
|
||||
|
||||
### Exécution par étapes (tags)
|
||||
|
||||
```bash
|
||||
# Arrêter uniquement les conteneurs
|
||||
ansible-playbook -i inventory.ini deploy.yml --tags stop
|
||||
|
||||
# Reconstruire les images
|
||||
ansible-playbook -i inventory.ini deploy.yml --tags build
|
||||
|
||||
# Démarrer les conteneurs
|
||||
ansible-playbook -i inventory.ini deploy.yml --tags start
|
||||
```
|
||||
|
||||
## 📊 Étapes du Déploiement
|
||||
|
||||
Le playbook `deploy.yml` effectue les opérations suivantes:
|
||||
|
||||
1. **[1/10]** 🔄 Mise à jour du système et installation des prérequis
|
||||
2. **[2/10]** 🐳 Installation de Docker Engine
|
||||
3. **[3/10]** 🔍 Vérification de Docker Compose
|
||||
4. **[4/10]** 📁 Création des répertoires de déploiement
|
||||
5. **[5/10]** 📥 Clonage du repository GitHub
|
||||
6. **[6/10]** ⚙️ Configuration des variables d'environnement
|
||||
7. **[7/10]** 🛑 Arrêt des conteneurs existants
|
||||
8. **[8/10]** 🏗️ Construction des images Docker
|
||||
9. **[9/10]** 🚀 Démarrage des conteneurs
|
||||
10. **[10/10]** ✅ Vérification et affichage des logs
|
||||
|
||||
## 🌐 Accès aux Services
|
||||
|
||||
Après le déploiement réussi, accédez aux services via:
|
||||
|
||||
- **Frontend**: http://VOTRE_IP:3000
|
||||
- **Backend API**: http://VOTRE_IP:8001
|
||||
- **Documentation API**: http://VOTRE_IP:8001/docs
|
||||
- **Prometheus**: http://VOTRE_IP:9090
|
||||
- **Grafana**: http://VOTRE_IP:3001 (admin/votre_mot_de_passe)
|
||||
|
||||
## 🐛 Dépannage
|
||||
|
||||
### Problème de connexion SSH
|
||||
|
||||
```bash
|
||||
# Tester la connexion manuelle
|
||||
ssh -i ../../sskdockerz/ssh-key-2025-10-16.key VOTRE_USER@VOTRE_IP
|
||||
|
||||
# Vérifier les permissions de la clé
|
||||
ls -la ../../sskdockerz/ssh-key-2025-10-16.key
|
||||
```
|
||||
|
||||
### Erreur "Permission denied"
|
||||
|
||||
```bash
|
||||
# Ajouter --ask-become-pass
|
||||
ansible-playbook -i inventory.ini deploy.yml --ask-become-pass
|
||||
```
|
||||
|
||||
### Vérifier l'état sur le serveur
|
||||
|
||||
```bash
|
||||
# SSH sur le serveur
|
||||
ssh -i ../../sskdockerz/ssh-key-2025-10-16.key VOTRE_USER@VOTRE_IP
|
||||
|
||||
# Vérifier Docker
|
||||
docker --version
|
||||
docker ps
|
||||
|
||||
# Vérifier les conteneurs DockeZR
|
||||
cd /opt/dockezr
|
||||
docker compose -f docker-compose.prod.yml ps
|
||||
docker compose -f docker-compose.prod.yml logs
|
||||
```
|
||||
|
||||
### Les conteneurs ne démarrent pas
|
||||
|
||||
```bash
|
||||
# Sur le serveur, vérifier les logs
|
||||
cd /opt/dockezr
|
||||
docker compose -f docker-compose.prod.yml logs -f
|
||||
|
||||
# Reconstruire les images
|
||||
docker compose -f docker-compose.prod.yml up -d --build
|
||||
```
|
||||
|
||||
## 🔄 Mise à jour de l'application
|
||||
|
||||
Pour mettre à jour l'application après des modifications:
|
||||
|
||||
```bash
|
||||
# Re-exécuter le playbook
|
||||
ansible-playbook -i inventory.ini deploy.yml
|
||||
|
||||
# Ou uniquement reconstruire et redémarrer
|
||||
ansible-playbook -i inventory.ini deploy.yml --tags build,start
|
||||
```
|
||||
|
||||
## 📝 Notes
|
||||
|
||||
- Le playbook est idempotent: vous pouvez l'exécuter plusieurs fois sans problème
|
||||
- Les données PostgreSQL sont persistées dans des volumes Docker
|
||||
- Les logs sont accessibles via `docker compose logs`
|
||||
- Le déploiement prend environ 5-10 minutes selon la connexion
|
||||
|
||||
## 🔐 Sécurité
|
||||
|
||||
**⚠️ IMPORTANT:**
|
||||
|
||||
1. **Changez tous les mots de passe** dans `group_vars/all.yml`
|
||||
2. **Ne commitez JAMAIS** les mots de passe réels sur Git
|
||||
3. Utilisez **Ansible Vault** pour chiffrer les secrets:
|
||||
|
||||
```bash
|
||||
# Chiffrer le fichier de variables
|
||||
ansible-vault encrypt group_vars/all.yml
|
||||
|
||||
# Exécuter avec vault
|
||||
ansible-playbook -i inventory.ini deploy.yml --ask-vault-pass
|
||||
```
|
||||
|
||||
4. **Configurez un pare-feu** sur le serveur:
|
||||
```bash
|
||||
sudo ufw allow 22/tcp
|
||||
sudo ufw allow 3000/tcp
|
||||
sudo ufw allow 8001/tcp
|
||||
sudo ufw enable
|
||||
```
|
||||
|
||||
## 📞 Support
|
||||
|
||||
Pour toute question ou problème:
|
||||
- Vérifiez les logs Ansible avec `-vvv`
|
||||
- Consultez la documentation Ansible: https://docs.ansible.com
|
||||
- Vérifiez les logs Docker sur le serveur
|
||||
|
||||
---
|
||||
|
||||
**Bon déploiement! 🚀**
|
||||
|
||||
Reference in New Issue
Block a user