Restic ist eine bekannte Backup-Software. Es ist einfach genug, um auf jedes Betriebssystem portiert zu werden, und deshalb wird es wahrscheinlich nicht mit einem vollständigen Beispiel-Setup auf einem durchschnittlichen Linux-System geliefert. Lassen Sie es uns mit diesem Beitrag beheben.
Stellen wir das Problem wie folgt ein:
- Die automatische Sicherung wird täglich ausgeführt.
- Das Backup speichert nur wichtige Dateien und Daten.
- Die Sicherung enthält auch den Inhalt der PostgreSQL-Datenbanken, die wiederhergestellt werden können
psql -f
.
/ systemd, restic CAP_DAC_READ_SEARCH
, PostgreSQL pg_dumpall
.
Dies setzt voraus, dass die Sicherung auf einem Ubuntu Server 20.04-Computer durchgeführt wird und auf einem Rest-Server ausgeführt wird, auf dem ausgeführt wird 192.168.1.200
. Die Konfiguration kann jedoch problemlos an jeden Cloud-Anbieter angepasst werden. Es wird auch davon ausgegangen, dass das Repository bereits durch den Befehl initialisiert wurde restic -r rest:http://192.168.1.200/your-repo/ init
.
Sichern von Dateien / Verzeichnissen
Es ist unerwünscht, Software mit Superuser-Rechten unnötig auszuführen. Erstellen wir daher einen separaten Benutzer für unsere Aufgaben restic
ohne Gruppen- und Befehlsshell:
# useradd -m -N -s /usr/sbin/nologin restic
Wir benötigen den folgenden systemd-Dienst mit einem Parameter und einem Timer dazu:
/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
Lassen Sie uns die Timer starten und das automatische Laden aktivieren:
# systemctl enable --now restic@your-repo.timer restic-pg@your-repo.timer
Lassen Sie uns überprüfen, ob das erstellte System funktioniert:
# systemctl start restic@your-repo.service # systemctl start restic-pg@your-repo.service
Mit diesen Einheiten können Sie eine unbegrenzte Anzahl von Repositorys sichern. Sie müssen lediglich die entsprechenden Repositorys erstellen /etc/restic/repo-name.{env,files}
.
Links
- PostgreSQL-Sicherungsrezept in dem Container, aus dem das Skript im Beitrag hervorgegangen ist.
- Systemd-Dokumentation: systemd.service , systemd.timer .
- Dieser Beitrag in meinem Blog ist in Englisch .