Início
» Como fazer
»
Automatize backups consistentes do Nextcloud com Restic e Cron.
Automatize backups consistentes do Nextcloud com Restic e Cron.
Para um backup confiável do Nextcloud, pause a atividade do usuário, exporte o banco de dados e use o Restic para capturar essa exportação juntamente com os diretórios de aplicativos e dados. Coloque a tarefa em um script com privilégios de root e agende-a com o cron; verifique os snapshots e execute um teste de restauração antes de confiar no agendamento.
Este exemplo pressupõe um servidor Debian ou Ubuntu, uma instalação direta do Nextcloud em /var/www/nextcloud, um diretório de dados separado em /srv/nextcloud-datae o MariaDB. Substitua esses valores pelos seus caminhos e nome de banco de dados reais. Os passos foram verificados com base no Manual de Administração do Nextcloud 35 e na documentação do Restic 0.19.1 em outubro de 2026.
Uma ilustração em estilo de terminal das duas ações que iniciam um backup consistente: ativar o modo de manutenção e exportar o banco de dados.
O que deve conter um backup do Nextcloud?
As diretrizes de backup do Nextcloud listam a configuração, os dados, o banco de dados, o tema e quaisquer aplicativos personalizados como as partes importantes a serem mantidas. O backup do diretório completo do aplicativo geralmente inclui sua configuração e os aplicativos agrupados, mas verifique se os aplicativos personalizados, temas ou o diretório de dados estão localizados em outro lugar no seu servidor. Inclua todos os caminhos separadamente no comando Restic.
O modo de manutenção bloqueia as sessões existentes e impede novos logins enquanto o backup é executado. Isso reduz a probabilidade de alterações no banco de dados e nos arquivos em momentos diferentes, mas também torna o Nextcloud indisponível durante esse período. Para um grande banco de dados, agende a tarefa para um período de baixa atividade. Se o seu servidor tiver processos ou scripts externos que gravam diretamente no diretório de dados, pause-os também.
Instale o Restic e o cliente MariaDB usando a fonte de pacotes confiável da sua distribuição. Escolha um repositório em um disco diferente ou um destino de backup remoto. Um repositório armazenado apenas no servidor Nextcloud não protege contra a perda desse servidor ou do seu armazenamento. Não coloque o repositório dentro de nenhum dos diretórios que estão sendo copiados.
O Restic criptografa os dados do repositório, mas você precisa da senha do repositório para restaurá-lo. Crie um arquivo de senha e mantenha uma cópia protegida fora do servidor, como em um gerenciador de senhas confiável. Se a senha for perdida, o repositório criptografado não poderá ser lido. Evite inserir a senha diretamente na linha de comando, no crontab ou em um script.
Armazene a senha escolhida para o Restic em um arquivo de senhas seguro. Insira o local do repositório e o caminho do arquivo de senhas no arquivo de ambiente:
Para um backend remoto, use o URL e as credenciais do repositório documentado desse backend, armazenadas com permissões restritas. O Restic documenta a configuração do repositório e a variável de ambiente de arquivo de senha compatível em seu guia de preparação de repositório . Inicialize um novo repositório apenas uma vez, não a cada execução.
set -a
. /root/.config/restic/nextcloud.env
set +a
restic init
Exemplo de configurações para um repositório Restic criptografado; a senha em si permanece em um arquivo protegido separado.
As credenciais do MariaDB também precisam de proteção. Configure um arquivo de opções do cliente legível pelo root, como `/opt/client.conf`, /root/.my.cnfcom o usuário, a senha e o host do banco de dados e, em seguida, defina suas permissões como `true` 600. O script abaixo passa esse arquivo para o `client.conf` mariadb-dump, portanto, a senha do banco de dados não aparece nos argumentos do processo.
Crie um script de backup que restaure o Nextcloud ao serviço.
Salve o seguinte como /usr/local/sbin/nextcloud-restic-backup. Ajuste NC_DATA_DIRe DB_NAMEpara corresponder a config/config.php. O script habilita o modo de manutenção, exporta o MariaDB, faz backup do aplicativo, dos dados e do dump SQL temporário e, em seguida, desabilita o modo de manutenção mesmo se um comando posterior falhar.
#!/usr/bin/env bash
set -Eeuo pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NC_DIR=/var/www/nextcloud
NC_DATA_DIR=/srv/nextcloud-data
DB_NAME=nextcloud
RESTIC_ENV=/root/.config/restic/nextcloud.env
DB_CNF=/root/.my.cnf
set -a
source "$RESTIC_ENV"
set +a
exec 9>/run/lock/nextcloud-restic.lock
flock -n 9 || exit 0
mountpoint -q /mnt/backup || {
echo "Backup target is not mounted" >&2
exit 1
}
install -d -m 700 /var/backups/nextcloud
STAGE_DIR=$(mktemp -d /var/backups/nextcloud/db.XXXXXX)
maintenance_on=0
cleanup() {
if [[ "$maintenance_on" -eq 1 ]]; then
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --off ||
logger -t nextcloud-restic "Could not disable maintenance mode"
fi
rm -rf "$STAGE_DIR"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
sudo -u www-data php "$NC_DIR/occ" maintenance:mode --on
maintenance_on=1
mariadb-dump --defaults-extra-file="$DB_CNF" --single-transaction --default-character-set=utf8mb4 "$DB_NAME" > "$STAGE_DIR/nextcloud.sql"
test -s "$STAGE_DIR/nextcloud.sql"
restic backup "$NC_DIR" "$NC_DATA_DIR" "$STAGE_DIR" --tag nextcloud
Defina a propriedade e as permissões para que somente o usuário root possa editar ou executar o script e, em seguida, teste-o manualmente durante uma janela de manutenção. Essa mountpointverificação impede que um disco de backup ausente envie silenciosamente um repositório grande para o sistema de arquivos local do servidor. Se o seu repositório for remoto em vez de montado localmente, substitua essa verificação por uma verificação confiável para o seu backend.
Revise os caminhos antes da primeira execução. Se a pasta de dados já estiver dentro do diretório de aplicativos /var/www/nextcloud, não assuma que o caminho de exemplo esteja correto; use o diretório de dados real da configuração do Nextcloud. Confirme também se os aplicativos ou temas personalizados armazenados fora do diretório de aplicativos estão explicitamente incluídos.
O backup do Restic inclui o aplicativo, os arquivos do usuário e o dump do banco de dados criado para esta execução.
Agende uma tarefa cron e verifique o resultado.
Após uma execução manual bem-sucedida, adicione uma entrada no crontab como root sudo crontab -e. Este exemplo inicia a tarefa diariamente às 2h30, utilizando o caminho completo do script e registrando a saída para fins de solução de problemas:
O cron fornece um ambiente limitado, portanto o script define um horário explícito PATHe carrega as configurações do Restic por conta própria. Verifique se o cron está habilitado em sua distribuição e se esse horário não coincide com a execução de tarefas em segundo plano do Nextcloud ou com outra tarefa de manutenção. O manual do crontab do Linux descreve o formato do agendamento e o ambiente fornecido pelo cron.
Confirme se a tarefa foi executada corretamente verificando /var/log/nextcloud-restic.logse houve uma saída bem-sucedida e listando os snapshots recentes:
O Restic realiza verificações normais checkna estrutura do repositório. Uma leitura completa dos dados leva mais tempo e pode consumir uma quantidade significativa de largura de banda do repositório remoto; agende verificações restic check --read-dataperiodicamente ou utilize-as para verificar partes do repositório ao longo do tempo. Consulte a documentação de integridade do repositório--read-data-subset do Restic .
A listagem de snapshots não é um teste de restauração. Restaure um snapshot recente para um diretório temporário separado com o comando `nextcloud restore` restic restore latest --target /tmp/nextcloud-restore-test, e confirme se os arquivos do aplicativo, o diretório de dados e o dump do SQL Server estão presentes. Não restaure sobre uma instalação em produção como teste. Para uma recuperação real, restaure os arquivos e o banco de dados como um conjunto único e sincronizado; as instruções de restauração do Nextcloud abrangem a recriação do banco de dados e considerações sobre a sincronização do cliente.
Essa configuração fornece snapshots criptografados repetíveis, mas o cron não monitora suas próprias falhas e o Restic não define sua política de retenção. Analise o log ou configure alertas para execuções com falha, mantenha uma cópia separada das credenciais do repositório e teste a recuperação regularmente. Se a janela de manutenção for muito longa, use snapshots coordenados do sistema de arquivos e uma exportação consistente com o banco de dados, projetada para sua plataforma de armazenamento, em vez de fazer backup de arquivos em constante alteração.
O agendamento invoca o script de propriedade do root diariamente; a listagem de instantâneos é uma verificação rápida para garantir que as execuções foram registradas.