Backup automatique Snipe-IT
Dans cet article, nous allons vous expliquer comment mettre en place un système de sauvegarde automatique pour un conteneur Snipe-IT. La sauvegarde régulière de vos données est cruciale pour éviter toute perte en cas de défaillance ou d’incident. Nous vous guiderons à travers les étapes pour automatiser le processus de backup, en veillant à ce que vos configurations et vos bases de données soient sécurisées et facilement récupérables en cas de besoin.
I. Déterminer l’ID du conteneur
1. Faire un docker ps pour connaître l’ID du conteneur
docker ps
9aa2e04006a4 snipe/snipe-it:latest "/startup.sh" 42 hours ago Up About an hour 443/tcp,
2. Récupérer l’ID et modifier la commande suivante :
docker exec 9aa2e04006a4 /usr/bin/php /var/www/html/artisan snipeit:backup
(I) Info
A partir d’ici on peut la lancer pour voir si le backup se fait correctement :
conteneurs-ap / # docker exec 9aa2e04006a4 /usr/bin/php /var/www/html/artisan snipeit:backup
Starting backup...
Dumping database snipeit_db...
Determining files to backup...
Zipping 333 files and directories...
Created zip containing 333 files and directories. Size is 16.49 MB
Copying zip to disk named backup...
Successfully copied zip to disk named backup.
Backup completed!
Dans l’IU :
II. Automatiser le backup
Il faut éditer le cron et y placer la commande :
crontab -e
Moi j’ai choisi de la faire toutes les semaines donc j’ajoute @weekly mais on peut aussi utiliser ce site pour avoir quelque chose de plus précis : Crontab.guru – The cron schedule expression generator
@weekly docker exec 9aa2e04006a4 /usr/bin/php /var/www/html/artisan snipeit:backup
III. Aller plus loin
On peut utiliser un script pour lancer cette commande mais également pour spécifier combien de backups on garde avant de commencer à écraser les données.
Voici le script en question :
#!/bin/bash
#
# Script for running automated backups for Snipe-IT Docker containers and removing old backups
#
# Mean to be used as part of a crontab
#
# Limits its search for backups to clean up to those in the 'BACKUP_DIR' folder, so
# you can create folders in this location to keep any manual backups for historical purposes
#
# Docker container name to backup
CONTAINER="${1}"
# Snipe-IT Docker container backup location
BACKUP_DIR="/var/www/html/storage/app/backups/"
# Number of backups to keep
MAX_BACKUPS="14"
# Verify a container name is supplied
if [ "$CONTAINER" = "" ]; then
/bin/echo "No value supplied for 'CONTAINER'. Please run the script followed by the container name. ex. sh script.sh <container_name>"
exit 1
fi
# First, complete a backup
/bin/echo "Creating database backup for ${CONTAINER} …"
docker exec "$CONTAINER" /usr/bin/php /var/www/html/artisan snipeit:backup
# Process existing backups for cleanup
BACKUPS=$(docker exec "$CONTAINER" /usr/bin/find "$BACKUP_DIR" -maxdepth 1 -type f | /usr/bin/sort -r)
BACKUP_NUM=$((${MAX_BACKUPS} + 1))
OLD_BACKUPS=$(echo $BACKUPS | tail -n +${BACKUP_NUM})
# If old backups found, remove them
if [ "$OLD_BACKUPS" != "" ]; then
echo "Cleaning up old backups …"
for f in $OLD_BACKUPS; do
echo "Removing old backup: ${f} …"
docker exec "$CONTAINER" rm $f
done
else
echo "No backups to clean. Done."
fi
exit
1. Enregistrer le script en .sh, et donner les droits d’exécution dessus :
chmod +x snipe-it.sh
2. Editer le crontab et remplacer la ligne que nous avons écrite par celle ci :
crontab -e
@weekly /home/cloud/scriptbkp/snipe-it.sh 9aa2e04006a4
(I) Info
Une fois de plus il est possible d’entrer directement la commande pour vérifier que le backup d'exécute correctement.