Configuration des sauvegardes et restaurations
Ces étapes sont à réaliser lors de la configuration du serveur, afin de créer les commandes de sauvegarde et restaurations.
Dossiers de sauvegarde
# crée le dossier de sauvegarde
sudo mkdir /srv/backups
Sauvegarde de la base de données
Créer un fichier /srv/scripts/database-backup
contenant:
#!/bin/bash
# database-backup
# sauvegarde la base de donnees depuis le conteneur Docker
rm -rf /srv/backups/camino.sql
docker exec camino_api_db pg_dump --clean --if-exists --format c --no-owner --no-privileges --dbname=camino --host=localhost > /srv/backups/camino.sql
sudo chown git:users /srv/backups/camino.sql
Sauvegarde des fichiers
Créer un fichier /srv/scripts/files-backup
contenant:
#!/bin/bash
# files-backup
# sauvegarde les fichiers depuis le volume Docker
rm -rf /srv/backups/files/*
docker cp camino_api_app:/app/files/. /srv/backups/files/
sudo chown git:users -R /srv/backups/files
Création d'un fichier d'archive et sauvegarde sur le FTP
Créer un fichier /srv/scripts/backups-archive
contenant:
#!/bin/bash
# backups-archive
# cree une archive a partir du dossier `files` et du fichier `camino.sql`
FILE_SUFFIX=camino.tar.gz
FILE_PATH=/srv/backups/`date +%Y%m%d"_"%H%M%S`-$FILE_SUFFIX
FTP_USER=xxx
FTP_PASSWORD=xxx
FTP_HOST=xxx
FTP_URL="ftp://${FTP_USER}:${FTP_PASSWORD}@${FTP_HOST}/"
echo $FILE_PATH
cd /srv/backups
tar -zcvf $FILE_PATH files/* camino.sql
cd -
chown git:users /srv/backups/*.tar.gz
# Upload le fichier vers le ftp
curl -aT $FILE_PATH $FTP_URL
# Renomme le fichier et écrase l’ancien backup
mv $FILE_PATH /srv/backups/$FILE_SUFFIX
# Vérifie qu’on a seulement les 20 derniers backups sur le ftp
if [ $(curl -l $FTP_URL | grep $FILE_SUFFIX | wc -l) -gt 20 ]
then
# Supprime le backup le plus ancien
fileToDelete=$(curl -l $FTP_URL | grep $FILE_SUFFIX | head -n 1)
curl $FTP_URL -Q "DELE $fileToDelete"
fi
Sauvegarde complète
Créer un fichier /srv/scripts/backup
incluant les trois commandes ci-dessus.
#!/bin/bash
# backup
# sauvegarde la base de donnees
/srv/scripts/database-backup
# sauvegarde les fichiers
/srv/scripts/files-backup
# cree un fichier d'archive
/srv/scripts/backups-archive
Restauration de la base de données
Créer un fichier /srv/scripts/database-restore
contenant:
#!/bin/bash
# database-restore
# restaure la base de donnees dans le conteneur Docker a partir de la derniere sauvegarde
docker exec -i camino_api_db pg_restore --clean --if-exists --no-owner --no-privileges --dbname=camino < /srv/backups/camino.sql
Restauration des fichiers
Créer un fichier /srv/scripts/files-restore
contenant:
#!/bin/bash
# files-restore
# restore les fichiers dans le volume Docker a partir de la derniere sauvegarde
docker cp /srv/backups/files/. camino_api_app:/app/files/
Restauration complète
Créer un fichier /srv/scripts/restore
incluant les deux commandes ci-dessus.
#!/bin/bash
# restore
# restaure la base de donnees
/srv/scripts/database-restore
# restaure les fichiers
/srv/scripts/files-restore
Permissions
# attribue le dossier `scripts` à l'utilisateur `git` et au groupe `users`
sudo chown -R git:users /srv/scripts/
# attribue le dossier `backups` à l'utilisateur `git` et au groupe `users`
sudo chown -R git:users /srv/backups
# rend les fichiers du dossier `scripts` exécutables pour le groupe
sudo chmod -R g+x /srv/scripts/
# rend les fichiers du dossier `backups` accessibles en écriture pour le groupe
sudo chmod -R g+w /srv/backups/
Automatisation
Sur le serveur de prod, une tache cron lance automatiquement un backup toute les nuits.
Pour éditer le fichier sudo crontab -l -u git
.