Restic adalah software backup yang terkenal. Cukup sederhana untuk di-porting ke OS apa pun, dan mungkin itulah sebabnya ia tidak dilengkapi dengan contoh penyiapan lengkap pada sistem Linux rata-rata. Mari kita perbaiki dengan postingan ini.
Mari kita atur masalahnya sebagai berikut:
- Pencadangan otomatis berjalan setiap hari.
- Cadangan hanya menyimpan file dan data penting.
- Cadangan juga mencakup konten database PostgreSQL, yang dapat dipulihkan
psql -f
.
/ systemd, restic CAP_DAC_READ_SEARCH
, PostgreSQL pg_dumpall
.
Ini mengasumsikan bahwa pencadangan dilakukan pada mesin Ubuntu Server 20.04 dan sedang dilakukan pada server lain yang berjalan 192.168.1.200
. Namun, konfigurasinya dapat disesuaikan dengan mudah ke penyedia cloud mana pun. Ini juga mengasumsikan bahwa repositori telah diinisialisasi oleh perintah restic -r rest:http://192.168.1.200/your-repo/ init
.
Mencadangkan file / direktori
Tidak perlu menjalankan perangkat lunak dengan hak pengguna super secara tidak perlu, jadi mari buat pengguna terpisah untuk tugas kita restic
tanpa grup dan shell perintah:
# useradd -m -N -s /usr/sbin/nologin restic
Kami membutuhkan layanan systemd berikut dengan parameter dan timer untuk itu:
/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
Mari mulai pengatur waktu dan aktifkan pemuatan otomatisnya:
# systemctl enable --now restic@your-repo.timer restic-pg@your-repo.timer
Mari kita periksa apakah sistem yang dibangun berfungsi:
# systemctl start restic@your-repo.service # systemctl start restic-pg@your-repo.service
Kumpulan unit ini memungkinkan Anda untuk mencadangkan ke repositori dalam jumlah tak terbatas, Anda hanya perlu membuat yang sesuai /etc/restic/repo-name.{env,files}
.
Tautan
- Resep cadangan PostgreSQL di wadah tempat skrip di pos tumbuh.
- Dokumentasi Systemd: systemd.service , systemd.timer .
- Posting di blog saya ini dalam bahasa Inggris .