Restic é um software de backup bem conhecido. É simples o suficiente para ser portado para qualquer sistema operacional e provavelmente é por isso que não vem com uma configuração de amostra completa em um sistema Linux médio. Vamos consertar isso com este post.
Vamos definir o problema da seguinte maneira:
- O backup automático é executado diariamente.
- O backup armazena apenas arquivos e dados importantes.
- O backup também inclui o conteúdo dos bancos de dados PostgreSQL, que podem ser restaurados
psql -f
.
/ systemd, restic CAP_DAC_READ_SEARCH
, PostgreSQL pg_dumpall
.
Isso pressupõe que o backup é feito em uma máquina Ubuntu Server 20.04 e está sendo executado em um rest-server em execução 192.168.1.200
. No entanto, a configuração é trivialmente adaptável a qualquer provedor de nuvem. Também assume que o repositório já foi inicializado pelo comando restic -r rest:http://192.168.1.200/your-repo/ init
.
Fazendo backup de arquivos / diretórios
Não é desejável executar software com direitos de superusuário desnecessariamente, então vamos criar um usuário separado para nossas tarefas restic
sem um grupo e shell de comando:
# useradd -m -N -s /usr/sbin/nologin restic
Precisamos do seguinte serviço systemd com um parâmetro e um temporizador para ele:
/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
Vamos iniciar os cronômetros e habilitar o carregamento automático:
# systemctl enable --now restic@your-repo.timer restic-pg@your-repo.timer
Vamos verificar se o sistema construído funciona:
# systemctl start restic@your-repo.service # systemctl start restic-pg@your-repo.service
Este conjunto de unidades permite que você faça backup para um número ilimitado de repositórios, você só precisa criar os apropriados /etc/restic/repo-name.{env,files}
.
Links
- Receita de backup do PostgreSQL no contêiner a partir do qual o script do post cresceu.
- Documentação do Systemd: systemd.service , systemd.timer .
- Esta postagem no meu blog está em inglês .