décembre 21, 2025
19 min de lecture

Questions d'entretien pour un Ingénieur DevOps Junior : Guide Complet

interview
career-advice
job-search
entry-level
Questions d'entretien pour un Ingénieur DevOps Junior : Guide Complet
MB

Milad Bonakdar

Auteur

Maîtrisez les fondamentaux essentiels de DevOps avec des questions d'entretien complètes couvrant Linux, Git, CI/CD, Docker, les bases du cloud et l'Infrastructure as Code pour les ingénieurs DevOps juniors.


Introduction

L'ingénierie DevOps fait le pont entre le développement et les opérations, en mettant l'accent sur l'automatisation, la collaboration et l'amélioration continue. En tant qu'ingénieur DevOps junior, vous aurez besoin de connaissances fondamentales sur Linux, le contrôle de version, les pipelines CI/CD, la conteneurisation et les plateformes cloud.

Ce guide couvre les questions d'entretien essentielles pour les ingénieurs DevOps juniors, organisées par sujet pour vous aider à vous préparer efficacement. Chaque question comprend des réponses détaillées, des exemples pratiques et des extraits de code pratiques.


Notions fondamentales de Linux

1. Expliquez les commandes Linux courantes que vous utilisez quotidiennement en tant qu'ingénieur DevOps.

Réponse : Commandes Linux essentielles pour le travail DevOps :

# Opérations sur les fichiers
ls -la                    # Lister les fichiers avec les détails
cd /var/log              # Changer de répertoire
cat /etc/hosts           # Afficher le contenu du fichier
tail -f /var/log/app.log # Suivre le fichier de log en temps réel
grep "error" app.log     # Rechercher des motifs

# Gestion des processus
ps aux | grep nginx      # Lister les processus
top                      # Surveiller les ressources système
kill -9 1234            # Forcer l'arrêt du processus
systemctl status nginx   # Vérifier l'état du service
systemctl restart nginx  # Redémarrer le service

# Permissions de fichier
chmod 755 script.sh      # Modifier les permissions du fichier
chown user:group file    # Modifier le propriétaire
ls -l                    # Afficher les permissions

# Utilisation du disque
df -h                    # Utilisation de l'espace disque
du -sh /var/log          # Taille du répertoire
free -h                  # Utilisation de la mémoire

# Réseau
netstat -tulpn           # Afficher les ports d'écoute
curl https://api.com     # Faire une requête HTTP
ping google.com          # Tester la connectivité
ssh user@server          # Connexion à distance

Rareté : Très courant
Difficulté : Facile


2. Comment dépannez-vous un service qui ne démarre pas sous Linux ?

Réponse : Approche de dépannage systématique :

# 1. Vérifier l'état du service
systemctl status nginx
# Rechercher les messages d'erreur

# 2. Vérifier les logs
journalctl -u nginx -n 50
# ou
tail -f /var/log/nginx/error.log

# 3. Vérifier la syntaxe de la configuration
nginx -t

# 4. Vérifier si le port est déjà utilisé
netstat -tulpn | grep :80
# ou
lsof -i :80

# 5. Vérifier les permissions de fichier
ls -l /etc/nginx/nginx.conf
ls -ld /var/log/nginx

# 6. Vérifier l'espace disque
df -h

# 7. Essayer de démarrer manuellement pour plus de détails
nginx -g 'daemon off;'

# 8. Vérifier SELinux/AppArmor (si activé)
getenforce
ausearch -m avc -ts recent

Problèmes courants :

  • Erreurs de syntaxe dans la configuration
  • Port déjà utilisé
  • Permission refusée
  • Dépendances manquantes
  • Espace disque insuffisant

Rareté : Très courant
Difficulté : Moyenne


Contrôle de version avec Git

3. Expliquez le flux de travail Git de base et les commandes courantes.

Réponse : Flux de travail Git pour les tâches DevOps quotidiennes :

# Initialiser le dépôt
git init
git clone https://github.com/user/repo.git

# Vérifier l'état
git status
git log --oneline

# Flux de travail de base
git add .                    # Ajouter les modifications à la zone de préparation
git commit -m "Add feature"  # Valider les modifications
git push origin main         # Pousser vers le dépôt distant

# Création de branches
git branch feature-x         # Créer une branche
git checkout feature-x       # Basculer vers la branche
git checkout -b feature-y    # Créer et basculer

# Fusion
git checkout main
git merge feature-x

# Récupérer les dernières modifications
git pull origin main

# Annuler les modifications
git reset --hard HEAD        # Rejeter les modifications locales
git revert abc123           # Annuler un commit spécifique

# Masquer les modifications
git stash                    # Sauvegarder temporairement les modifications
git stash pop               # Restaurer les modifications masquées

# Afficher les différences
git diff                     # Modifications non préparées
git diff --staged           # Modifications préparées

Meilleures pratiques :

  • Écrire des messages de commit clairs
  • Committer souvent, pousser régulièrement
  • Utiliser des branches de fonctionnalité
  • Récupérer les modifications avant de pousser
  • Examiner les modifications avant de committer

Rareté : Très courant
Difficulté : Facile


4. Comment résolvez-vous un conflit de fusion dans Git ?

Réponse : Résolution de conflit étape par étape :

# 1. Tenter la fusion
git merge feature-branch
# Auto-merging file.txt
# CONFLICT (content): Merge conflict in file.txt

# 2. Vérifier les fichiers en conflit
git status
# Unmerged paths:
#   both modified:   file.txt

# 3. Ouvrir le fichier en conflit
cat file.txt
# <<<<<<< HEAD
# Contenu de la branche actuelle
# =======
# Contenu de la branche entrante
# >>>>>>> feature-branch

# 4. Modifier le fichier pour résoudre le conflit
# Supprimer les marqueurs de conflit et conserver les modifications souhaitées

# 5. Préparer le fichier résolu
git add file.txt

# 6. Terminer la fusion
git commit -m "Resolve merge conflict"

# Alternative : Abandonner la fusion
git merge --abort

Marqueurs de conflit :

  • <<<<<<< HEAD - Votre branche actuelle
  • ======= - Séparateur
  • >>>>>>> branch-name - Modifications entrantes

Rareté : Courant
Difficulté : Facile-Moyenne


Notions de base de CI/CD

5. Qu'est-ce que CI/CD et pourquoi est-ce important ?

Réponse : CI/CD signifie Continuous Integration et Continuous Deployment/Delivery (Intégration Continue et Déploiement/Livraison Continue).

Intégration Continue (CI) :

  • Construire et tester automatiquement le code à chaque commit
  • Détecter les bugs tôt
  • S'assurer que le code s'intègre correctement

Déploiement Continu (CD) :

  • Déployer automatiquement en production après que les tests ont réussi
  • Cycles de publication plus rapides
  • Réduction des erreurs manuelles
Loading diagram...

Avantages :

  • Boucles de rétroaction plus rapides
  • Réduction des problèmes d'intégration
  • Tests automatisés
  • Déploiements cohérents
  • Délai de mise sur le marché plus rapide

Rareté : Très courant
Difficulté : Facile


6. Expliquez un pipeline CI/CD de base utilisant GitHub Actions.

Réponse : Exemple de flux de travail GitHub Actions :

# .github/workflows/ci-cd.yml
name: Pipeline CI/CD

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    
    steps:
    - name: Extraire le code
      uses: actions/checkout@v3
    
    - name: Configurer Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
    
    - name: Installer les dépendances
      run: npm ci
    
    - name: Exécuter les tests
      run: npm test
    
    - name: Construire l'application
      run: npm run build
    
    - name: Exécuter linter
      run: npm run lint

  deploy:
    needs: build-and-test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    
    steps:
    - name: Déployer en production
      run: |
        echo "Déploiement en production..."
        # Ajouter les commandes de déploiement ici

Concepts clés :

  • Déclencheurs : Quand le pipeline s'exécute (push, PR, planification)
  • Jobs : Tâches indépendantes qui peuvent s'exécuter en parallèle
  • Steps : Commandes individuelles dans un job
  • Artifacts : Fichiers passés entre les jobs

Rareté : Très courant
Difficulté : Moyenne


Docker & Conteneurisation

7. Qu'est-ce que Docker et pourquoi utilisons-nous des conteneurs ?

Réponse : Docker est une plateforme pour développer, expédier et exécuter des applications dans des conteneurs.

Conteneurs vs Machines Virtuelles :

  • Les conteneurs partagent le noyau du système d'exploitation hôte (léger)
  • Les machines virtuelles incluent un système d'exploitation complet (lourd)
  • Les conteneurs démarrent en quelques secondes
  • Meilleure utilisation des ressources

Avantages :

  • Cohérence : Même environnement partout
  • Isolation : Les applications n'interfèrent pas
  • Portabilité : Exécuter n'importe où
  • Efficacité : Léger et rapide
# Exemple de Dockerfile
FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

COPY . .

EXPOSE 3000

CMD ["node", "server.js"]

Rareté : Très courant
Difficulté : Facile


8. Expliquez les commandes Docker courantes.

Réponse : Commandes Docker essentielles :

# Images
docker pull nginx:latest          # Télécharger l'image
docker images                     # Lister les images
docker rmi nginx:latest          # Supprimer l'image
docker build -t myapp:1.0 .      # Construire l'image

# Conteneurs
docker run -d -p 80:80 nginx     # Exécuter le conteneur
docker ps                         # Lister les conteneurs en cours d'exécution
docker ps -a                      # Lister tous les conteneurs
docker stop container_id          # Arrêter le conteneur
docker start container_id         # Démarrer le conteneur
docker restart container_id       # Redémarrer le conteneur
docker rm container_id            # Supprimer le conteneur

# Logs et débogage
docker logs container_id          # Afficher les logs
docker logs -f container_id       # Suivre les logs
docker exec -it container_id bash # Entrer dans le conteneur
docker inspect container_id       # Informations détaillées

# Nettoyage
docker system prune              # Supprimer les données inutilisées
docker volume prune              # Supprimer les volumes inutilisés

# Docker Compose
docker-compose up -d             # Démarrer les services
docker-compose down              # Arrêter les services
docker-compose logs -f           # Afficher les logs

Rareté : Très courant
Difficulté : Facile


9. Écrivez un docker-compose.yml pour une application web avec une base de données.

Réponse : Exemple d'application multi-conteneurs :

version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
      - DB_PORT=5432
      - DB_NAME=myapp
    depends_on:
      - db
    volumes:
      - ./logs:/app/logs
    restart: unless-stopped

  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=secret
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    restart: unless-stopped

volumes:
  postgres_data:

Concepts clés :

  • services : Définir les conteneurs
  • depends_on : Dépendances de service
  • volumes : Stockage de données persistant
  • environment : Variables d'environnement
  • ports : Mappage de ports
  • restart : Politique de redémarrage

Rareté : Courant
Difficulté : Moyenne


Notions de base du Cloud

10. Expliquez la différence entre IaaS, PaaS et SaaS.

Réponse : Modèles de services cloud :

IaaS (Infrastructure as a Service) :

  • Fournit : Machines virtuelles, stockage, réseaux
  • Vous gérez : OS, runtime, applications
  • Exemples : AWS EC2, Azure VMs, Google Compute Engine
  • Cas d'utilisation : Contrôle total sur l'infrastructure

PaaS (Platform as a Service) :

  • Fournit : Environnement d'exécution, bases de données, middleware
  • Vous gérez : Applications et données
  • Exemples : AWS Elastic Beanstalk, Heroku, Google App Engine
  • Cas d'utilisation : Se concentrer sur le code, pas sur l'infrastructure

SaaS (Software as a Service) :

  • Fournit : Applications complètes
  • Vous gérez : Données et paramètres utilisateur
  • Exemples : Gmail, Salesforce, Office 365
  • Cas d'utilisation : Applications prêtes à l'emploi
Loading diagram...

Rareté : Courant
Difficulté : Facile


11. Quels sont les services AWS de base qu'un ingénieur DevOps doit connaître ?

Réponse : Services AWS essentiels :

Calcul :

  • EC2 : Serveurs virtuels
  • Lambda : Fonctions serverless
  • ECS/EKS : Orchestration de conteneurs

Stockage :

  • S3 : Stockage d'objets
  • EBS : Stockage en bloc pour EC2
  • EFS : Stockage de fichiers partagé

Réseau :

  • VPC : Cloud privé virtuel
  • Route 53 : Service DNS
  • CloudFront : CDN
  • ELB : Équilibrage de charge

Base de données :

  • RDS : Bases de données relationnelles gérées
  • DynamoDB : Base de données NoSQL

Outils DevOps :

  • CodePipeline : Service CI/CD
  • CodeBuild : Service de construction
  • CloudWatch : Surveillance et journalisation
  • IAM : Gestion des accès

Exemple : Lancer une instance EC2 avec AWS CLI :

aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t2.micro \
  --key-name my-key-pair \
  --security-group-ids sg-0123456789abcdef0 \
  --subnet-id subnet-0123456789abcdef0 \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WebServer}]'

Rareté : Très courant
Difficulté : Moyenne


Infrastructure as Code

12. Qu'est-ce que l'Infrastructure as Code (IaC) et pourquoi est-ce important ?

Réponse : IaC est la gestion de l'infrastructure par le code plutôt que par des processus manuels.

Avantages :

  • Contrôle de version : Suivre les modifications de l'infrastructure
  • Reproductibilité : Créer des environnements identiques
  • Automatisation : Réduire les erreurs manuelles
  • Documentation : Le code sert de documentation
  • Cohérence : Même configuration partout

Outils IaC populaires :

  • Terraform : Provisionnement multi-cloud
  • Ansible : Gestion de la configuration
  • CloudFormation : Spécifique à AWS
  • Pulumi : IaC basé sur le code

Exemple Terraform :

# main.tf
provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Name = "WebServer"
    Environment = "Production"
  }
}

resource "aws_security_group" "web_sg" {
  name        = "web-sg"
  description = "Autoriser le trafic HTTP"

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Rareté : Très courant
Difficulté : Moyenne


13. Expliquez le flux de travail de base de Terraform.

Réponse : Étapes du flux de travail Terraform :

# 1. Initialiser Terraform
terraform init
# Télécharge les fournisseurs et les modules

# 2. Formater le code
terraform fmt
# Formate les fichiers .tf

# 3. Valider la configuration
terraform validate
# Vérifie la syntaxe

# 4. Planifier les modifications
terraform plan
# Montre ce qui sera créé/modifié/détruit

# 5. Appliquer les modifications
terraform apply
# Crée/met à jour l'infrastructure
# Demande une confirmation

# 6. Afficher l'état
terraform show
# Affiche l'état actuel

# 7. Détruire l'infrastructure
terraform destroy
# Supprime toutes les ressources

Structure des fichiers Terraform :

project/
├── main.tf          # Configuration principale
├── variables.tf     # Variables d'entrée
├── outputs.tf       # Valeurs de sortie
├── terraform.tfvars # Valeurs des variables
└── .terraform/      # Plugins du fournisseur

Exemple de variables :

# variables.tf
variable "instance_type" {
  description = "Type d'instance EC2"
  type        = string
  default     = "t2.micro"
}

variable "environment" {
  description = "Nom de l'environnement"
  type        = string
}

# terraform.tfvars
environment = "production"
instance_type = "t2.small"

Rareté : Courant
Difficulté : Moyenne


Surveillance et journalisation

14. Quelles métriques surveilleriez-vous pour une application web ?

Réponse : Métriques de surveillance clés :

Métriques d'application :

  • Temps de réponse / latence
  • Taux de requêtes (requêtes par seconde)
  • Taux d'erreur (erreurs 4xx, 5xx)
  • Débit

Métriques système :

  • Utilisation du CPU
  • Utilisation de la mémoire
  • E/S disque
  • E/S réseau

Métriques d'infrastructure :

  • État du conteneur/pod
  • Disponibilité du service
  • Santé de l'équilibreur de charge

Exemple de requête Prometheus :

# Temps de réponse moyen
rate(http_request_duration_seconds_sum[5m])
/ rate(http_request_duration_seconds_count[5m])

# Taux d'erreur
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m]))

# Utilisation du CPU
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Seuils d'alerte :

  • Temps de réponse > 500ms
  • Taux d'erreur > 1%
  • Utilisation du CPU > 80%
  • Utilisation de la mémoire > 85%
  • Utilisation du disque > 90%

Rareté : Courant
Difficulté : Moyenne


15. Comment centralisez-vous les logs de plusieurs serveurs ?

Réponse : Architecture de journalisation centralisée :

Loading diagram...

Pile courante (ELK) :

  • Elasticsearch : Stocker et indexer les logs
  • Logstash/Fluentd : Collecter et traiter les logs
  • Kibana : Visualiser et rechercher les logs

Exemple de configuration Filebeat :

# filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/app/*.log
  fields:
    app: myapp
    environment: production

output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  index: "app-logs-%{+yyyy.MM.dd}"

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

Meilleures pratiques :

  • Utiliser la journalisation structurée (JSON)
  • Inclure des IDs de corrélation
  • Définir des politiques de rétention
  • Indexer stratégiquement
  • Surveiller le volume des logs

Rareté : Courant
Difficulté : Moyenne


Notions de base de Kubernetes

16. Qu'est-ce que Kubernetes et quels sont ses composants de base ?

Réponse : Kubernetes est une plateforme d'orchestration de conteneurs qui automatise le déploiement, la mise à l'échelle et la gestion des applications conteneurisées.

Composants de base :

Plan de contrôle :

  • API Server : Point d'entrée pour toutes les commandes
  • etcd : Stockage clé-valeur pour les données du cluster
  • Scheduler : Attribue les pods aux nœuds
  • Controller Manager : Maintient l'état souhaité

Nœuds de travail :

  • kubelet : Gère les pods sur le nœud
  • kube-proxy : Routage réseau
  • Container Runtime : Exécute les conteneurs (Docker, containerd)
Loading diagram...

Objets Kubernetes de base :

1. Pod :

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

2. Déploiement :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

3. Service :

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

Commandes kubectl courantes :

# Obtenir les ressources
kubectl get pods
kubectl get deployments
kubectl get services

# Décrire la ressource
kubectl describe pod nginx-pod

# Créer à partir d'un fichier
kubectl apply -f deployment.yaml

# Supprimer la ressource
kubectl delete pod nginx-pod

# Afficher les logs
kubectl logs nginx-pod

# Exécuter une commande dans le pod
kubectl exec -it nginx-pod -- /bin/bash

# Redirection de port
kubectl port-forward pod/nginx-pod 8080:80

Rareté : Très courant
Difficulté : Facile


Gestion de la configuration

17. Expliquez les bases d'Ansible et écrivez un playbook simple.

Réponse : Ansible est un outil de gestion de configuration sans agent qui utilise SSH pour configurer les serveurs.

Concepts clés :

  • Inventory : Liste des serveurs à gérer
  • Playbook : Fichier YAML définissant les tâches
  • Modules : Unités de travail réutilisables
  • Roles : Collection organisée de tâches

Fichier d'inventaire :

# inventory.ini
[webservers]
web1.example.com
web2.example.com

[databases]
db1.example.com

[all: vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa

Playbook simple :

# playbook.yml
---
- name: Configurer les serveurs web
  hosts: webservers
  become: yes
  
  vars:
    app_port: 8080
    app_user: webapp
  
  tasks:
    - name: Mettre à jour le cache apt
      apt:
        update_cache: yes
        cache_valid_time: 3600
    
    - name: Installer les paquets requis
      apt:
        name:
          - nginx
          - python3
          - git
        state: present
    
    - name: Créer un utilisateur pour l'application
      user:
        name: "{{ app_user }}"
        shell: /bin/bash
        create_home: yes
    
    - name: Copier la configuration nginx
      template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/sites-available/default
      notify: Redémarrer nginx
    
    - name: S'assurer que nginx est en cours d'exécution
      service:
        name: nginx
        state: started
        enabled: yes
    
    - name: Déployer l'application
      git:
        repo: https://github.com/example/app.git
        dest: /var/www/app
        version: main
      become_user: "{{ app_user }}"
  
  handlers:
    - name: Redémarrer nginx
      service:
        name: nginx
        state: restarted

Exemple de template :

# templates/nginx.conf.j2
server {
    listen {{ app_port }};
    server_name {{ ansible_hostname }};
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Exécution des playbooks :

# Vérifier la syntaxe
ansible-playbook playbook.yml --syntax-check

# Exécution à sec (mode vérification)
ansible-playbook playbook.yml --check

# Exécuter le playbook
ansible-playbook -i inventory.ini playbook.yml

# Exécuter avec des tags spécifiques
ansible-playbook playbook.yml --tags "deploy"

# Limiter à des hôtes spécifiques
ansible-playbook playbook.yml --limit webservers

Structure des rôles Ansible :

roles/
└── webserver/
    ├── tasks/
    │   └── main.yml
    ├── handlers/
    │   └── main.yml
    ├── templates/
    │   └── nginx.conf.j2
    ├── files/
    ├── vars/
    │   └── main.yml
    └── defaults/
        └── main.yml

Utilisation des rôles :

---
- name: Configurer l'infrastructure
  hosts: all
  become: yes
  
  roles:
    - common
    - webserver
    - monitoring

Commandes ad hoc :

# Ping tous les hôtes
ansible all -i inventory.ini -m ping

# Exécuter une commande sur tous les hôtes
ansible all -i inventory.ini -a "uptime"

# Installer un paquet
ansible webservers -i inventory.ini -m apt -a "name=nginx state=present" --become

# Copier un fichier
ansible all -i inventory.ini -m copy -a "src=/local/file dest=/remote/file"

# Redémarrer un service
ansible webservers -i inventory.ini -m service -a "name=nginx state=restarted" --become

Rareté : Courant
Difficulté : Moyenne


Scripting et automatisation

18. Écrivez un script bash pour automatiser une tâche DevOps courante.

Réponse : Le scripting Bash est essentiel pour l'automatisation en DevOps.

Exemple 1 : Script de sauvegarde

#!/bin/bash

# Script de sauvegarde de base de données avec rotation
set -e  # Sortir en cas d'erreur
set -u  # Sortir en cas de variable non définie

# Configuration
DB_NAME="myapp"
DB_USER="backup_user"
BACKUP_DIR="/var/backups/mysql"
RETENTION_DAYS=7
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz"
LOG_FILE="/var/log/mysql_backup.log"

# Fonction pour enregistrer les messages
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# Fonction pour envoyer une notification
send_notification() {
    local status=$1
    local message=$2
    
    # Envoyer à Slack
    curl -X POST -H 'Content-type: application/json' \
        --data "{\"text\":\"Backup ${status}: ${message}\"}" \
        "$SLACK_WEBHOOK_URL"
}

# Créer le répertoire de sauvegarde s'il n'existe pas
mkdir -p "$BACKUP_DIR"

# Démarrer la sauvegarde
log "Démarrage de la sauvegarde de la base de données : $DB_NAME"

# Effectuer la sauvegarde
if mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" | gzip > "$BACKUP_FILE"; then
    log "Sauvegarde terminée avec succès : $BACKUP_FILE"
    
    # Obtenir la taille du fichier
    SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
    log "Taille de la sauvegarde : $SIZE"
    
    # Supprimer les anciennes sauvegardes
    log "Suppression des sauvegardes plus anciennes que $RETENTION_DAYS jours"
    find "$BACKUP_DIR" -name "${DB_NAME}_*.sql.gz" -mtime +$RETENTION_DAYS -delete
    
    # Télécharger vers S3 (facultatif)
    if command -v aws &> /dev/null; then
        log "Téléchargement de la sauvegarde vers S3"
        aws s3 cp "$BACKUP_FILE" "s3://my-backups/mysql/" --storage-class GLACIER
    fi
    
    send_notification "SUCCESS" "Base de données $DB_NAME sauvegardée avec succès ($SIZE)"
else
    log "ERREUR : La sauvegarde a échoué"
    send_notification "FAILED" "La sauvegarde de la base de données $DB_NAME a échoué"
    exit 1
fi

log "Processus de sauvegarde terminé"

Exemple 2 : Script de vérification de l'état

#!/bin/bash

# Script de vérification de l'état du service
SERVICES=("nginx" "mysql" "redis")
ENDPOINTS=("http://localhost:80" "http://localhost:8080/health
Newsletter subscription

Conseils de carrière hebdomadaires qui fonctionnent vraiment

Recevez les dernières idées directement dans votre boîte de réception

Decorative doodle

Démarquez-vous auprès des Recruteurs et Décrochez Votre Emploi de Rêve

Rejoignez des milliers de personnes qui ont transformé leur carrière avec des CV alimentés par l'IA qui passent les ATS et impressionnent les responsables du recrutement.

Commencer maintenant

Partager cet article

Doublez Vos Rappels d'Entretien

Les candidats qui adaptent leur CV à la description du poste obtiennent 2,5 fois plus d'entretiens. Utilisez notre IA pour personnaliser automatiquement votre CV pour chaque candidature instantanément.