235 lines
8.7 KiB
YAML
235 lines
8.7 KiB
YAML
---
|
|
# Playbook Ansible pour déployer DockeZR
|
|
# Ce playbook installe Docker, clone le repository et lance l'application
|
|
|
|
- name: "Déploiement automatisé de DockeZR sur serveur Linux"
|
|
hosts: all
|
|
become: yes
|
|
gather_facts: yes
|
|
|
|
tasks:
|
|
# ====================================================================
|
|
# ÉTAPE 1 : Mise à jour du système et installation des prérequis
|
|
# ====================================================================
|
|
- name: "[1/10] 🔄 Mise à jour du cache APT"
|
|
apt:
|
|
update_cache: yes
|
|
cache_valid_time: 3600
|
|
when: ansible_os_family == "Debian"
|
|
|
|
- name: "[1/10] 📦 Installation des paquets système requis"
|
|
apt:
|
|
name:
|
|
- apt-transport-https
|
|
- ca-certificates
|
|
- curl
|
|
- gnupg
|
|
- lsb-release
|
|
- git
|
|
- python3
|
|
- python3-pip
|
|
state: present
|
|
when: ansible_os_family == "Debian"
|
|
|
|
# ====================================================================
|
|
# ÉTAPE 2 : Installation de Docker
|
|
# ====================================================================
|
|
- name: "[2/10] 🐳 Vérification si Docker est déjà installé"
|
|
command: docker --version
|
|
register: docker_installed
|
|
ignore_errors: yes
|
|
changed_when: false
|
|
|
|
- name: "[2/10] 📁 Création du répertoire pour les clés GPG"
|
|
file:
|
|
path: /etc/apt/keyrings
|
|
state: directory
|
|
mode: '0755'
|
|
when: docker_installed.rc != 0
|
|
|
|
- name: "[2/10] 🔑 Ajout de la clé GPG officielle de Docker"
|
|
shell: |
|
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
|
chmod a+r /etc/apt/keyrings/docker.gpg
|
|
args:
|
|
creates: /etc/apt/keyrings/docker.gpg
|
|
when: docker_installed.rc != 0 and ansible_distribution == "Ubuntu"
|
|
|
|
- name: "[2/10] 📝 Ajout du repository Docker"
|
|
apt_repository:
|
|
repo: "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
|
|
state: present
|
|
filename: docker
|
|
when: docker_installed.rc != 0 and ansible_distribution == "Ubuntu"
|
|
|
|
- name: "[2/10] 🐳 Installation de Docker Engine"
|
|
apt:
|
|
name:
|
|
- docker-ce
|
|
- docker-ce-cli
|
|
- containerd.io
|
|
- docker-buildx-plugin
|
|
- docker-compose-plugin
|
|
state: present
|
|
update_cache: yes
|
|
when: docker_installed.rc != 0
|
|
|
|
- name: "[2/10] ✅ Vérification que Docker est démarré et activé au boot"
|
|
systemd:
|
|
name: docker
|
|
state: started
|
|
enabled: yes
|
|
|
|
- name: "[2/10] 👤 Ajout de l'utilisateur au groupe docker"
|
|
user:
|
|
name: "{{ deploy_user }}"
|
|
groups: docker
|
|
append: yes
|
|
|
|
# ====================================================================
|
|
# ÉTAPE 3 : Installation de Docker Compose (si nécessaire)
|
|
# ====================================================================
|
|
- name: "[3/10] 🔍 Vérification de Docker Compose"
|
|
command: docker compose version
|
|
register: compose_check
|
|
ignore_errors: yes
|
|
changed_when: false
|
|
|
|
- name: "[3/10] ✅ Docker Compose est installé"
|
|
debug:
|
|
msg: "Docker Compose est déjà disponible via le plugin Docker"
|
|
when: compose_check.rc == 0
|
|
|
|
# ====================================================================
|
|
# ÉTAPE 4 : Préparation des répertoires
|
|
# ====================================================================
|
|
- name: "[4/10] 📁 Création du répertoire de déploiement"
|
|
file:
|
|
path: "{{ deploy_dir }}"
|
|
state: directory
|
|
owner: "{{ deploy_user }}"
|
|
group: "{{ deploy_user }}"
|
|
mode: '0755'
|
|
|
|
# ====================================================================
|
|
# ÉTAPE 5 : Clonage du repository Git
|
|
# ====================================================================
|
|
- name: "[5/10] 🔍 Vérification si le repository existe déjà"
|
|
stat:
|
|
path: "{{ deploy_dir }}/.git"
|
|
register: git_repo
|
|
|
|
- name: "[5/10] 📥 Clonage du repository GitHub"
|
|
git:
|
|
repo: "{{ project_repo }}"
|
|
dest: "{{ deploy_dir }}"
|
|
version: "{{ project_branch }}"
|
|
force: yes
|
|
become_user: "{{ deploy_user }}"
|
|
when: not git_repo.stat.exists
|
|
|
|
- name: "[5/10] 🔄 Mise à jour du repository existant"
|
|
git:
|
|
repo: "{{ project_repo }}"
|
|
dest: "{{ deploy_dir }}"
|
|
version: "{{ project_branch }}"
|
|
force: yes
|
|
become_user: "{{ deploy_user }}"
|
|
when: git_repo.stat.exists
|
|
|
|
# ====================================================================
|
|
# ÉTAPE 6 : Configuration des variables d'environnement
|
|
# ====================================================================
|
|
- name: "[6/10] ⚙️ Création du fichier .env.prod depuis le template"
|
|
template:
|
|
src: templates/env.prod.j2
|
|
dest: "{{ deploy_dir }}/.env.prod"
|
|
owner: "{{ deploy_user }}"
|
|
group: "{{ deploy_user }}"
|
|
mode: '0600'
|
|
|
|
# ====================================================================
|
|
# ÉTAPE 7 : Arrêt des conteneurs existants (si présents)
|
|
# ====================================================================
|
|
- name: "[7/10] 🛑 Arrêt des conteneurs existants (si présents)"
|
|
command: docker compose -f docker-compose.prod.yml down
|
|
args:
|
|
chdir: "{{ deploy_dir }}"
|
|
become_user: "{{ deploy_user }}"
|
|
ignore_errors: yes
|
|
tags: stop
|
|
|
|
# ====================================================================
|
|
# ÉTAPE 8 : Construction des images Docker
|
|
# ====================================================================
|
|
- name: "[8/10] 🏗️ Construction des images Docker"
|
|
command: docker compose -f docker-compose.prod.yml build --no-cache
|
|
args:
|
|
chdir: "{{ deploy_dir }}"
|
|
become_user: "{{ deploy_user }}"
|
|
tags: build
|
|
|
|
# ====================================================================
|
|
# ÉTAPE 9 : Démarrage des conteneurs
|
|
# ====================================================================
|
|
- name: "[9/10] 🚀 Démarrage des conteneurs en arrière-plan"
|
|
command: docker compose -f docker-compose.prod.yml up -d
|
|
args:
|
|
chdir: "{{ deploy_dir }}"
|
|
become_user: "{{ deploy_user }}"
|
|
tags: start
|
|
|
|
# ====================================================================
|
|
# ÉTAPE 10 : Vérification du déploiement
|
|
# ====================================================================
|
|
- name: "[10/10] ⏳ Attente du démarrage des services (30 secondes)"
|
|
pause:
|
|
seconds: 30
|
|
|
|
- name: "[10/10] 🔍 Vérification de l'état des conteneurs"
|
|
command: docker compose -f docker-compose.prod.yml ps
|
|
args:
|
|
chdir: "{{ deploy_dir }}"
|
|
become_user: "{{ deploy_user }}"
|
|
register: containers_status
|
|
changed_when: false
|
|
|
|
- name: "[10/10] 📊 Affichage de l'état des conteneurs"
|
|
debug:
|
|
var: containers_status.stdout_lines
|
|
|
|
- name: "[10/10] 📝 Récupération des logs récents"
|
|
command: docker compose -f docker-compose.prod.yml logs --tail=20
|
|
args:
|
|
chdir: "{{ deploy_dir }}"
|
|
become_user: "{{ deploy_user }}"
|
|
register: container_logs
|
|
changed_when: false
|
|
|
|
- name: "[10/10] 📋 Affichage des logs"
|
|
debug:
|
|
var: container_logs.stdout_lines
|
|
|
|
# ====================================================================
|
|
# RÉSUMÉ FINAL
|
|
# ====================================================================
|
|
- name: "✅ Déploiement terminé avec succès!"
|
|
debug:
|
|
msg:
|
|
- "🎉 L'application DockeZR a été déployée avec succès!"
|
|
- ""
|
|
- "🌐 Accès aux services:"
|
|
- " - Frontend: http://{{ ansible_host }}:{{ frontend_port }}"
|
|
- " - Backend API: http://{{ ansible_host }}:{{ backend_port }}"
|
|
- " - Swagger: http://{{ ansible_host }}:{{ backend_port }}/docs"
|
|
- " - Prometheus: http://{{ ansible_host }}:{{ prometheus_port }}"
|
|
- " - Grafana: http://{{ ansible_host }}:{{ grafana_port }}"
|
|
- ""
|
|
- "📁 Répertoire de déploiement: {{ deploy_dir }}"
|
|
- ""
|
|
- "🔧 Commandes utiles:"
|
|
- " - Voir les logs: cd {{ deploy_dir }} && docker compose -f docker-compose.prod.yml logs -f"
|
|
- " - Redémarrer: cd {{ deploy_dir }} && docker compose -f docker-compose.prod.yml restart"
|
|
- " - Arrêter: cd {{ deploy_dir }} && docker compose -f docker-compose.prod.yml down"
|
|
|