Restic est un logiciel de sauvegarde bien connu. Il est assez simple pour être porté sur n'importe quel système d'exploitation, et c'est probablement pourquoi il n'est pas fourni avec un exemple de configuration complet sur un système Linux moyen. Corrigeons le problème avec ce post.
Posons le problème comme suit:
- La sauvegarde automatique s'exécute quotidiennement.
- La sauvegarde ne stocke que les fichiers et données importants.
- La sauvegarde inclut également le contenu des bases de données PostgreSQL, qui peuvent être restaurées
psql -f
.
/ systemd, restic CAP_DAC_READ_SEARCH
, PostgreSQL pg_dumpall
.
Cela suppose que la sauvegarde est effectuée sur une machine Ubuntu Server 20.04 et est exécutée sur un serveur de repos fonctionnant sur 192.168.1.200
. Cependant, la configuration est facilement adaptable à n'importe quel fournisseur de cloud. Il suppose également que le référentiel a déjà été initialisé par la commande restic -r rest:http://192.168.1.200/your-repo/ init
.
Sauvegarde de fichiers / répertoires
Il n'est pas souhaitable d'exécuter inutilement un logiciel avec des droits de superutilisateur, nous allons donc créer un utilisateur séparé pour nos tâches restic
sans groupe ni shell de commande:
# useradd -m -N -s /usr/sbin/nologin restic
Nous avons besoin du service systemd suivant avec un paramètre et une minuterie:
/etc/systemd/system/restic@.service
:
[Unit] # @, # systemctl start restic@your-repo.service # %I "your-repo" Description=Restic backup on %I After=syslog.target After=network-online.target [Service] Type=oneshot User=restic # /etc/restic/your-repo.files ExecStart=/usr/local/bin/restic backup --files-from /etc/restic/%I.files # /etc/restic/your-repo.env EnvironmentFile=/etc/restic/%I.env # restic capability DAC_READ_SEARCH, # Linux, # , # AmbientCapabilities=CAP_DAC_READ_SEARCH [Install] WantedBy=multi-user.target
/etc/systemd/system/restic@.timer
:
[Unit] # , @ # (restic@your-repo.timer), restic@your-repo.service Description=Run Restic at 12:00 AM [Timer] # restic 12 OnCalendar=*-*-* 12:00:00 [Install] WantedBy=timers.target
/etc/restic/your-repo.env
. systemd root, /etc/restic/
(.. 700 root
):
RESTIC_PASSWORD=your_repo_password RESTIC_REPOSITORY=rest:http://192.168.1.200/your-repo/
/ /etc/restic/your-repo.files
:
/var/lib/docker /etc/postgresql /etc/restic ...
PostgreSQL
Restic , , pg_dumpall
. systemd ExecStart
execve(3)
, /usr/local/bin/pgdump.sh
:
#!/usr/bin/env bash
set -euo pipefail
/usr/bin/sudo -u postgres pg_dumpall --clean \
| gzip --rsyncable \
| /usr/local/bin/restic backup --host $1 --stdin \
--stdin-filename postgres-$1.sql.gz
/etc/systemd/system/restic-pg@.service
:
[Unit] Description=Restic PostgreSQL backup on %I After=syslog.target After=network-online.target After=postgresql.service Requires=postgresql.service [Service] Type=oneshot User=restic ExecStart=/usr/local/bin/pgdump.sh %I EnvironmentFile=/etc/restic/%I.env [Install] WantedBy=multi-user.target
/etc/systemd/system/restic-pg@.timer
:
[Unit] Description=Run Restic on PostgreSQL at 12:00 AM [Timer] OnCalendar=*-*-* 0:00:00 [Install] WantedBy=timers.target
Commençons les minuteries et activons leur chargement automatique:
# systemctl enable --now restic@your-repo.timer restic-pg@your-repo.timer
Vérifions si le système construit fonctionne:
# systemctl start restic@your-repo.service # systemctl start restic-pg@your-repo.service
Cet ensemble d'unités vous permet de sauvegarder dans un nombre illimité de référentiels, il vous suffit de créer ceux qui conviennent /etc/restic/repo-name.{env,files}
.
Liens
- Recette de sauvegarde PostgreSQL dans le conteneur à partir duquel le script de l'article a grandi.
- Documentation Systemd: systemd.service , systemd.timer .
- Cet article sur mon blog est en anglais .