CESTOLIV



Va falloir faire des backups…

Ayant échappé de peu à l'incendie d'OVH et ayant vu mon téléphone réinitialisé après une mise à jour, j'ai conclu qu'il fallait vraiment que je me mette à faire des backups de façon plus sérieuse.
Qui dit faire des backups plus souvent, dit automatiser tout ça, on n'est pas des flemmards pour rien 😁 ! Je vous embarque donc dans ma quête de backups !

Je faisais déjà des backups ponctuelles hein

C'est possiblement très peu intéressant comme article 😅.

Mon setup (ce qu'il y a à backuper)

Let's go !

Le téléphone

J'utilise un téléphone sous LineageOS, basé donc sur Android. LineageOS a mis en place un système de backup du téléphone grâce à SeedVault (recherchez Sauvegarde dans les Paramètres). Ce dernier fait donc automatiquement des backups de mon téléphone.
J'ai ensuite paramétré l'application Nextcloud afin qu'elle envoie automatiquement les backups sur mon instance Nextcloud.

SeedVault automated backup with Nextcloud

Utilisant Signal, j'ai appliqué le même principe pour sauvegarder mes conversations.
J'en profite pour vous ordonner conseiller d'utiliser Signal 😜 !

Signal automated backup with Nextcloud

Et finalement j'ai aussi toutes mes photos qui sont envoyées automatiquement sur mon instance Nextcloud.

Mon VPS

Sur mon VPS, tout tourne sous Docker, à part mon reverse proxy (Caddy). Sous Docker, rien de plus simple, il me suffit de récupérer les fichiers de configuration et les volumes, voir à faire un dump de la base de donnée selon les cas. J'ai donc fait un script qui fait des dump des bases de données, qui récupère tous les fichiers grâce à rsync puis qui fait une archive du tout. Voici à quoi ressemble mon script avec pour Peertube et sa base de donnée PostgreSQL.

#!/bin/bash

# generate pertube backup
ssh debian@152.228.133.83 'cd /home/debian/PROD/peertube && docker-compose exec -T postgres pg_dump -U peertube -Ft peertube > db.tar'

# download
rsync -avz --info=progress2 --include=".*" --exclude="docker-volume/db/" --exclude="docker-volume/opendkim/" debian@152.228.133.83:/home/debian/PROD/peertube ./current-backup

# other services...

# create archive

chown -R cestoliv:cestoliv current-backup
cd current-backup

for f in $(ls); do
    echo "Create $f archive..."
    cd $f && tar -cvjf ../$f.tar.bz2 .
    cd ../ && rm -rd $f 
done;

# global
tar -cvjf "../backup_vps04_$(date +%d-%m-%YT%H-%M-%S).tar.bz2" .
cd ../ && rm -rd current-backup

L'important bien sur, c'est aussi de tester que ces backups peuvent être utilisées pour remettre le service en place, pas seulement récupérer les données comme ça.

Les sites Wordpress

Cette fois-ci j'ai sorti les grands moyens, toutes les extensions de backups Wordpress automatisées étant un peu trop cher mon usage, je me suis mis en tête de faire la mienne. Enfin plutôt d'automatiser une extension existante, All In One WP Migration. Pour ça, j'ai développé un script Python qui utilise d'abord Selenuim pour contrôler le navigateur et aller cliquer ou il faut pour générer la backup, puis qui télécharge le fichier de backup .wpress via FTP.
J'ai mis les sources du projet en OpenSource, servez-vous !

L'instance Nextcloud

Mon instance Nextcloud tourne sur une VM Ubuntu, et j'ai installé Nextcloud via Snap (oui, je sais). L'avantage de la version Snap, c'est qu'elle fournit une commande d'export ! Reste donc à faire un petit script qui génère l'export, récupère la backup puis la compress !

#!/bin/bash

# maintenance mode on
ssh cestoliv@192.168.0.46 "sudo nextcloud.occ maintenance:mode --on"

# backup apps, database, config (not data) and re-enable maintenance
ssh cestoliv@192.168.0.46 "sudo nextcloud.export -abc && sudo nextcloud.occ maintenance:mode --on"

# get backup folder name
BACKUP_FILE=$(ssh cestoliv@192.168.0.46 'ls -dt /var/snap/nextcloud/common/backups/*/ | cut -d" " -f1 | head -n 1 | sed s/.$// ')
BACKUP_FILE_NAME=$(echo $BACKUP_FILE | rev | cut -d'/' -f 1 | rev)

# backup data
ssh cestoliv@192.168.0.46 "sudo rsync -Aax /var/snap/nextcloud/common/nextcloud/data/ $BACKUP_FILE/data/"

# change files permissions
ssh cestoliv@192.168.0.46 "sudo chown -R cestoliv:cestoliv ${BACKUP_FILE}"

# retrieve the backup
rsync -avz --info=progress2 --include=".*" cestoliv@192.168.0.46:$BACKUP_FILE .

# create an archive
cd $BACKUP_FILE_NAME && tar -cvjf "../$BACKUP_FILE_NAME.tar.bz2" . && cd ../

# deletion of local and remote files not required
rm -rd $BACKUP_FILE_NAME
ssh cestoliv@192.168.0.46 "sudo rm -rd $BACKUP_FILE"

# maintenance mode off
ssh cestoliv@192.168.0.46 "sudo nextcloud.occ maintenance:mode --on"

Petit mot de la fin

Bon, article peu intéressant, mais au moins, il m'aura poussé à faire mes backups plus sérieusement, et j'espère que vous ferez de même ! J'en profite aussi pour remercier la Team Nextcloud pour le logiciel OpenSource incroyable du même nom 💙.