Dans le cadre de mon stage au SIA BDE INSA Lyon, j'ai été chargé de déployer et configurer un serveur de backup automatisé destiné à sauvegarder les bases de données critiques de l'infrastructure (PostgreSQL et MariaDB).
L'objectif était de mettre en place une solution fiable, automatique et observable : les sauvegardes devaient se déclencher la nuit via crontab, copier les données depuis le VPS de production, appliquer une politique de rétention, et notifier l'équipe en temps réel sur Discord via un webhook.
Ce projet m'a permis de travailler de bout en bout sur la création d'une VM sous Proxmox, la configuration des disques, la migration des scripts existants depuis GitLab, et l'automatisation complète du processus de backup.
- Hyperviseur : Proxmox VE — VM ID 100 (ubuntu-backup)
- Système : Ubuntu Server 24.04.3 LTS
- Disques : 2 disques —
sda(32G OS) ·sdb(1.8T Backups) - Outils : Rclone, fdisk, mkfs.ext4, crontab, Bash
- Sources de backup : VPS
infra.bde-insa-lyon.fr— PostgreSQL + MariaDB + Duplicati - Notification : Discord Webhook via variable d'environnement système
- Versioning : GitLab SIA — dépôt privé infra, deploy token
infra-mde
PostgreSQL · MariaDB · Duplicati
Proxmox · Ubuntu 24.04
OS + Scripts
/mnt/backups
Notifications statut
La première étape consiste à stopper la VM depuis le shell Proxmox, puis à identifier les disques disponibles avec lsblk.

qm stop 100 · lsblk pour lister les disques

qm set 100 -scsi1 /dev/sdb — rattachement du disque 1.8T
Vérification de la config SCSI et redémarrage de la VM
Une fois la VM redémarrée, je prépare le disque /dev/sdb avec fdisk puis formatage en ext4 :
sudo fdisk /dev/sdb
d # Supprimer partition existante
n # Nouvelle partition (défauts)
w # Écrire et quitter
sudo mkfs.ext4 -F /dev/sdb1
sudo mount /dev/sdb1 /mnt
Structure des disques dans la VM — sdb1 monté sur /mnt
📁 Disque 1 — Scripts
├── pull_backups.sh
├── send_backup.sh
└── logs/
📁 Disque 2 — Backups
├── mariadb-backups/
├── postgresql-backups/
└── logs/

Contenu de /mnt/backups/

Scripts dans ~/scripts/
Mon maître de stage a généré un deploy token GitLab (infra-mde) permettant un accès en lecture seule au dépôt pour récupérer les scripts existants.
Deploy token infra-mde — accès read_repository
Le script pull_backups.sh utilise rclone pour copier les backups depuis le VPS avec une rétention de 30 jours. J'ai également ajouté la variable DISCORD_WEBHOOK_URL dans /etc/environment.

Configuration du script pull_backups.sh

DISCORD_WEBHOOK_URL dans /etc/environment
Notifications Discord — statut détaillé PostgreSQL, MariaDB, Duplicati
Les backups sont automatisés via crontab : exécution tous les jours à 03h44.
Règle crontab — exécution quotidienne à 03h44
44 3 * * * /home/sia/scripts/pull_backups.sh >> /mnt/backups/logs/pull_backups.log 2>&1

Statut succès — toutes les copies réussies ✅

Statuts erreur / warning ⚠️
Virtualisation
Création et configuration d'une VM sous Proxmox, gestion des disques SCSI, commandes qm.
Stockage Linux
Partitionnement avec fdisk, formatage mkfs.ext4, montage et organisation des volumes.
Automatisation
Mise en place de tâches cron, scripts Bash robustes avec gestion des erreurs et logs.
Observabilité
Intégration d'un webhook Discord pour notifier l'équipe en temps réel du statut des sauvegardes.