Como fazer backup do Nextcloud com Restic e Cron

Cenário ilustrativo (hipotético): Jordan administra um pequeno servidor Nextcloud no Ubuntu. Os arquivos da aplicação estão em `/usr/local/nextcloud` /var/www/nextcloud, os arquivos do usuário estão em /srv/nextcloud-data`/usr/local/nextcloud`, o MariaDB armazena o banco de dados do Nextcloud e um host Linux remoto está disponível via SSH. Jordan deseja um backup noturno que possa ser inspecionado e restaurado, e não apenas uma entrada no cron que seja executada sem erros.

Este exemplo fornece a Jordan um fluxo de trabalho repetível com Restic e cron. Os caminhos, contas de serviço, nomes de banco de dados e agendamento são exemplos; substitua-os pelos valores da sua instalação. Os comandos não implicam que esta configuração tenha sido executada ou testada em um servidor real.

O que um backup utilizável do Nextcloud deve conter

Uma cópia de uma pasta por si só pode omitir as informações necessárias para o Nextcloud reconectar arquivos, usuários, compartilhamentos e configurações. O Manual de Administração do Nextcloud 35 lista cinco itens que devem ser mantidos: o diretório de configuração, aplicativos personalizados (se houver), o diretório de dados, o diretório de temas e o banco de dados. O guia de restauração afirma que o banco de dados, o diretório de dados e os arquivos de configuração são essenciais. Leia o manual correspondente à sua versão do Nextcloud instalada antes de adaptar o exemplo.

Jordan optou por fazer backup do diretório completo do aplicativo, incluindo configurações, aplicativos e temas, além do diretório de dados separado e um dump do banco de dados. Uma cópia separada de cada local de armazenamento externo também é necessária caso o Nextcloud armazene conteúdo do usuário fora do diretório raiz /srv/nextcloud-data. O Restic só pode proteger caminhos que o processo de backup consegue ler.

As instruções oficiais de backup do Nextcloud descrevem o modo de manutenção e os backups do banco de dados. Suas instruções de restauração mostram por que o banco de dados e a árvore de arquivos devem vir de um ponto de recuperação compatível.

1. Prepare a Restic e suas credenciais.

Instale o Restic a partir de uma fonte confiável e confirme se ele está disponível para a conta que executará a tarefa. O exemplo pressupõe que a tarefa seja executada como root para que possa ler os arquivos do Nextcloud e o dump do banco de dados. Ele usa um repositório SFTP remoto para que uma falha no servidor de aplicativos de Jordan não apague também a única cópia de segurança.

restic version

install -d -m 700 /root/.config/restic
install -d -m 700 /root/.config/nextcloud

Crie uma senha forte para o repositório Restic e salve-a /root/.config/restic/nextcloud-passwordcom permissões somente de root. Mantenha uma cópia de segurança dessa senha em um local seguro, separado do servidor e do repositório. O Restic criptografa os dados do repositório, mas perder a senha pode tornar esses backups criptografados inutilizáveis. Não insira a senha diretamente no script ou na linha do cron.

Configure o acesso SSH não interativo para a conta de backup no host remoto e verifique a chave do host por meio de um canal confiável. Defina o local do repositório abaixo para um diretório no qual a conta tenha permissão de escrita:

export RESTIC_REPOSITORY='sftp:backup@vault.example.net:/srv/restic/nextcloud'
export RESTIC_PASSWORD_FILE='/root/.config/restic/nextcloud-password'
restic init

Inicialize um repositório apenas uma vez. O guia de preparação de repositórios do Restic documenta os backends de armazenamento suportados e a inicialização. Trate o arquivo de senhas e a chave SSH como credenciais confidenciais e restrinja o acesso a eles.

2. Mantenha o banco de dados e os arquivos em um ponto compatível.

O Nextcloud recomenda o modo de manutenção para backups, pois ele bloqueia novos logins e sessões existentes para evitar inconsistências de dados. O comando deve ser executado como o usuário HTTP; em uma configuração típica de pacote Ubuntu, esse usuário é o `sudo` www-data. A janela de manutenção do Jordan dura até o despejo do banco de dados e o backup do Restic, portanto, os usuários não podem trabalhar no Nextcloud durante esse período.

Para o MariaDB, o manual do Nextcloud usa mariadb-dump --single-transaction`. Armazene as credenciais do banco de dados em um arquivo de configurações padrão do cliente protegido, por exemplo , `/etc /root/.config/nextcloud/mariadb.cnf/client.d/`, em vez de incorporar uma senha no comando:

[client]
user=nextcloud_backup
password=REPLACE_WITH_A_SECRET
host=localhost

Restrinja o arquivo com chmod 600 /root/.config/nextcloud/mariadb.cnf. Crie uma conta de banco de dados com apenas os privilégios necessários para o seu servidor e procedimento de despejo. Se o seu Nextcloud usa PostgreSQL ou SQLite, substitua-o pelo método de backup documentado; não execute o comando do MariaDB sem alterações.

3. Crie um script de backup protegido

Jordan salva o seguinte arquivo como /usr/local/sbin/nextcloud-restic-backupexecutável. Ele usa um bloqueio para evitar execuções sobrepostas, ativa o modo de manutenção antes de criar o despejo de memória, faz backup do despejo com os diretórios de aplicativo e dados e tenta desativar o modo de manutenção mesmo que um comando posterior falhe.

#!/usr/bin/env bash
set -Eeuo pipefail
umask 077
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

export RESTIC_REPOSITORY='sftp:backup@vault.example.net:/srv/restic/nextcloud'
export RESTIC_PASSWORD_FILE='/root/.config/restic/nextcloud-password'

NC_DIR='/var/www/nextcloud'
DATA_DIR='/srv/nextcloud-data'
DB_NAME='nextcloud'
DB_CNF='/root/.config/nextcloud/mariadb.cnf'
DUMP_DIR='/var/backups/nextcloud'
LOCK_FILE='/run/lock/nextcloud-restic-backup.lock'
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
DUMP_FILE="$DUMP_DIR/nextcloud-$STAMP.sql"
maintenance_started=0

mkdir -p "$DUMP_DIR"
exec 9>"$LOCK_FILE"
flock -n 9 || { echo 'A Nextcloud backup is already running.' >&2; exit 1; }

finish() {
  result=$?
  trap - EXIT
  if [[ "$maintenance_started" == 1 ]]; then
    sudo -u www-data -- php "$NC_DIR/occ" maintenance:mode --off || result=1
  fi
  rm -f -- "$DUMP_FILE" || result=1
  exit "$result"
}
trap finish EXIT

sudo -u www-data -- php "$NC_DIR/occ" maintenance:mode --on
maintenance_started=1
mariadb-dump --defaults-extra-file="$DB_CNF" --single-transaction \
  --default-character-set=utf8mb4 --databases "$DB_NAME" > "$DUMP_FILE"
restic backup --tag nextcloud "$NC_DIR" "$DATA_DIR" "$DUMP_FILE"

Após revisar os caminhos, crie o executável com privilégios de root e permissões de administrador 700. O script pressupõe que a instalação utilize www-datao MariaDB e os caminhos listados; verifique-os em relação config/config.phpà configuração do seu servidor web primeiro. Também pressupõe que nenhum outro administrador tenha habilitado o modo de manutenção. Se o comando, o dump ou o upload do Restic falhar, o shell será encerrado com um erro e o mecanismo de interrupção tentará restaurar o serviço; verifique os logs para confirmar se isso ocorreu. O dump é armazenado com permissões restritivas e removido após a execução.

Este padrão simples mantém o site indisponível durante toda a varredura e upload do Restic. Para um diretório de dados grande, isso pode demorar muito. Use um dump coordenado do banco de dados e um snapshot do armazenamento, ou outro design de backup consistente com o aplicativo, se o seu sistema de arquivos ou plataforma de armazenamento o suportar. Certifique-se de que o banco de dados e o snapshot do arquivo representem um ponto compatível no tempo; copiar independentemente um banco de dados ativo e um diretório de dados em constante mudança pode gerar um backup difícil de restaurar.

4. Agende a tarefa com o cron.

Após a execução manual ser concluída com sucesso, Jordan instala o script e o agenda para um período de inatividade. Como root, edite o crontab do root com o seguinte comando sudo crontab -ee adicione:

15 2 * * * /usr/local/sbin/nextcloud-restic-backup >> /var/log/nextcloud-restic.log 2>&1

Este exemplo começa às 2h15 da manhã, de acordo com o fuso horário do cron do servidor; escolha um horário em que a janela de manutenção seja aceitável. O cron possui um ambiente menor do que um shell interativo, portanto, o script define PATHexplicitamente e usa caminhos absolutos. Crie o arquivo de log com permissões restritivas e configure a rotação de logs ou envie a saída para o serviço de registro padrão do seu sistema. O agendamento do cron apenas inicia a tarefa: ele não confirma se o backup foi concluído ou se uma restauração funcionará.

5. Defina o período de retenção e verifique o resultado.

Após um backup bem-sucedido, Jordan verifica se um instantâneo foi criado:

restic snapshots --tag nextcloud
restic check

restic checkVerifica a estrutura do repositório. Uma verificação periódica restic check --read-datatambém lê dados armazenados e pode consumir bastante tempo de rede e disco, portanto, agende-a de acordo com o tamanho do repositório e as necessidades de recuperação. O guia de retenção de snapshots do Restic explica que o descarte de snapshots e a remoção de dados não referenciados são tarefas separadas e que a remoção de dados não referenciados bloqueia o repositório. Comece com um teste e uma política que atenda aos seus requisitos de retenção:

restic forget --tag nextcloud --keep-daily 7 --keep-weekly 5 \
  --keep-monthly 12 --dry-run

Analise os snapshots que o sistema propõe remover. Se estiver satisfeito, remova os snapshots --dry-rune adicione-os --prune; execute a limpeza quando ela não entrar em conflito com o backup noturno. Esses prazos de retenção são apenas um exemplo, não uma política universal. Considere os requisitos legais de retenção, o armazenamento disponível e o período de recuperação necessário.

O teste relevante é um exercício de restauração. Restaure um snapshot recente em um diretório temporário em um sistema separado, não nos caminhos do Nextcloud de produção do Jordan:

restic restore latest --tag nextcloud --target /tmp/nextcloud-restore-check

Confirme se a árvore restaurada contém a configuração, os dados e o dump do banco de dados esperados e inspecione os arquivos representativos. Para um exercício de recuperação completo, siga o manual de restauração do Nextcloud em um ambiente isolado e verifique o login, o acesso aos arquivos e os compartilhamentos esperados antes de utilizar o procedimento. A documentação de restauração do Restic descreve a seleção de snapshots e destinos de restauração.

Como saber quando essa abordagem precisa mudar?

A tarefa cron de Jordan só é adequada se a janela de manutenção coincidir com a duração do backup e se todos os caminhos de dados necessários forem locais e legíveis. Altere o design quando qualquer um destes sinais aparecer:

  • O site permanece em modo de manutenção por mais tempo do que os usuários podem tolerar: planeje snapshots coordenados ou outro método consistente com a aplicação.
  • Os registros mostram caminhos ausentes, erros de permissão, falha no despejo do banco de dados ou uma saída do Restic diferente de zero: corrija esses problemas antes de considerar o snapshot como concluído.
  • Os dados residem em armazenamento externo ou em outro servidor: inclua um backup consistente desse armazenamento no plano de recuperação.
  • Um teste de restauração não inclui arquivos, configuração, estado do banco de dados ou o código necessário do aplicativo/tema: atualize as entradas de backup e repita o procedimento.
  • A senha do Restic ou as credenciais SSH existem apenas no servidor que está sendo copiado: armazene as credenciais de recuperação separadamente e verifique se apenas um administrador autorizado pode acessá-las.

Para Jordan, o sucesso é visível: o log do cron mostra uma execução concluída, restic snapshotslista um snapshot recente com tags, as verificações do repositório não relatam erros e um teste de restauração recupera uma instância coerente do Nextcloud. Um comando agendado é o início de uma rotina de backup; somente um conjunto completo e restaurável de dados de banco de dados, configuração, aplicativo e usuário fornece um caminho de recuperação viável.

Referências oficiais

Deixar um comentário

10 Melhores Ferramentas de Varredura de Ping para Encontrar Dispositivos na Sua Rede

10 Melhores Ferramentas de Varredura de Ping para Encontrar Dispositivos na Sua Rede

Compare 10 ferramentas de varredura de ping para descoberta rápida de LAN, varredura multiplataforma e gerenciamento de endereços IP. Saiba o que uma varredura pode — e não pode — revelar.

6 Melhores Ferramentas de Gerenciamento de Rede para Monitorar o Desempenho

6 Melhores Ferramentas de Gerenciamento de Rede para Monitorar o Desempenho

Compare seis ferramentas de gerenciamento de rede para monitoramento de desempenho, incluindo cobertura SNMP, mapeamento, alertas, modelos de implantação e custo-benefício.

Melhores analisadores de Wi-Fi para Windows, iOS e Android

Melhores analisadores de Wi-Fi para Windows, iOS e Android

Compare as melhores opções de analisadores de Wi-Fi para Windows, iPhone e Android, incluindo ferramentas para congestionamento de canais, cobertura de sinal, mapas de calor e solução de problemas de rede.

Monitor de Ping: 7 ferramentas gratuitas e de código aberto para disponibilidade de rede

Monitor de Ping: 7 ferramentas gratuitas e de código aberto para disponibilidade de rede

Compare sete monitores de ping gratuitos e de código aberto, desde suítes completas de rede até sondas de latência específicas, e escolha a opção mais adequada para disponibilidade, perda de pacotes e histórico.

Taxa de transferência de rede versus largura de banda: o que significam e como afetam o desempenho

Taxa de transferência de rede versus largura de banda: o que significam e como afetam o desempenho

Veja como a taxa de transferência de rede difere da largura de banda, o que causa desempenho lento ou instável e quais ferramentas podem testar um caminho ou monitorar o tráfego.

Melhor software de servidor SFTP para transferências seguras de arquivos

Melhor software de servidor SFTP para transferências seguras de arquivos

Compare softwares de servidor SFTP confiáveis ​​para Windows e Linux, incluindo OpenSSH, Bitvise, SolarWinds e SFTPGo. Encontre a solução ideal para suas necessidades de segurança e transferência de arquivos.

Melhores práticas de monitoramento de rede: o que monitorar e quais ferramentas usar

Melhores práticas de monitoramento de rede: o que monitorar e quais ferramentas usar

Crie um monitoramento de rede prático com cobertura clara de dispositivos, métricas de desempenho úteis, alertas acionáveis ​​e uma comparação entre SolarWinds NPM, PRTG e OpManager.

As 7 melhores ferramentas de gerenciamento de endereços IP para equipes de rede

As 7 melhores ferramentas de gerenciamento de endereços IP para equipes de rede

Compare sete ferramentas de gerenciamento de endereços IP para descoberta de sub-redes, coordenação de DNS e DHCP, inventário de rede e IPAM de código aberto.

10 Melhores Ferramentas de Varredura de Rede para Descobrir Dispositivos e IPs

10 Melhores Ferramentas de Varredura de Rede para Descobrir Dispositivos e IPs

Compare ferramentas de varredura de rede para descoberta rápida de dispositivos, varreduras de IP multiplataforma e IPAM corporativo, com orientações sobre como escolher a opção mais adequada para sua rede.

6 ferramentas de monitoramento de rede Linux para dispositivos, hosts e tráfego.

6 ferramentas de monitoramento de rede Linux para dispositivos, hosts e tráfego.

Compare seis ferramentas de monitoramento de rede Linux para descoberta de dispositivos SNMP, gráficos de interface, métricas de host, verificação de serviços e fluxos de tráfego.