Configurer Restic avec systemd sous Linux

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:







  1. La sauvegarde automatique s'exécute quotidiennement.
  2. La sauvegarde ne stocke que les fichiers et données importants.
  3. La sauvegarde inclut également le contenu des bases de données PostgreSQL, qui peuvent être restaurées psql -f



    .


TL; poste DR

/ 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






All Articles