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.