dfbackup: cópia de segurança PrestaShop 8 e 9, guia completo
Instalação, agendamento, armazenamentos S3/FTP/Dropbox, cifragem AES-256, restauro num clique e replicação para staging do módulo dfbackup.
Apresentação
O dfbackup é um módulo de cópia de segurança completo para PrestaShop 8 e 9. Guarda a sua base de dados e os seus ficheiros em PHP puro (sem mysqldump nem shell_exec), cifra opcionalmente os arquivos em AES-256, envia-os para vários destinos (Local, S3, FTP, Dropbox, replicação PrestaShop) e permite um restauro num clique com snapshot de segurança automático.
São acrescentados três separadores no menu Parâmetros avançados do seu back-office: Dashboard (visão geral e lançamento manual), Histórico (lista das cópias, restauro, verificação, eliminação) e Definições (agendamento, armazenamento, cifragem, notificações).
Os modelos de e-mail de notificação são fornecidos em FR/EN/ES/DE. Numa loja em português, os e-mails partem no idioma de recurso (inglês), salvo se adicionar uma pasta mails/pt/ com os modelos traduzidos.
Instalação
- No seu back-office, vá a Módulos > Gestor de módulos > Instalar um módulo.
- Selecione o ficheiro
dfbackup-1.0.0.zipdescarregado depois da sua compra. - Clique em Instalar. O módulo cria quatro tabelas (
dfbackup,dfbackup_log,dfbackup_filemap,dfbackup_audit) e o diretório de armazenamentovar/dfbackup/protegido por um .htaccess. - Abra Parâmetros avançados > DF Backup para aceder ao dashboard.
Depois de cada atualização do módulo, limpe a cache PHP (opcache) e a cache Smarty: Parâmetros avançados > Desempenho > Limpar a cache. Em alguns alojamentos, é necessário um reinício do PHP-FPM para recarregar o bytecode.
Lançar uma primeira cópia de segurança
A partir do Dashboard, três botões permitem um lançamento manual:
- Run backup now: cópia completa (BD + ficheiros);
- Database only: dump da BD apenas, rápido (menos de um minuto na maioria das lojas);
- Files only: arquivo dos ficheiros apenas.
A cópia é executada em segundo plano no seu próprio processo PHP: a página não bloqueia, e um cartão de progressão mostra os registos em tempo real com uma percentagem estimada (dump BD, arquivo de ficheiros, cifragem, checksum, upload, rotação). Pode sair da página: a cópia continua do lado do servidor.
Agendamento
Em Definições > Agendamento, são propostas três frequências:
- Daily: todos os dias à hora alvo (ex. 03:00);
- Weekly: um dia da semana + hora;
- Monthly: um dia do mês + hora.
Uma janela de tolerância de 30 minutos e uma deduplicação de 60 minutos evitam os disparos duplos. Coexistem dois mecanismos de execução:
Cron nativo PrestaShop
O hook actionCronJob é executado durante as visitas à loja. Suficiente para lojas com tráfego regular, mas não garantido durante a noite.
Web-cron (recomendado)
Um URL assinado por token é apresentado nas Definições, no formato:
https://a-sua-loja.pt/index.php?fc=module&module=dfbackup&controller=webcron&token=O_SEU_TOKEN
Configure um serviço externo gratuito como cron-job.org ou EasyCron para chamar este URL de hora a hora (ou a cada 15 minutos). O módulo verifica internamente se a hora alvo foi atingida e responde imediatamente QUEUED | id=N quando uma cópia é desencadeada, ou Not scheduled now. caso contrário. A resposta é instantânea: nenhum risco de timeout do lado do serviço de cron.
O botão Regenerar o token invalida imediatamente o URL antigo. Lembre-se de atualizar o seu serviço de cron externo depois da regeneração.
Destinos de armazenamento
Cada cópia pode ser enviada para vários destinos em simultâneo: é a regra 3-2-1 (três cópias, dois suportes, uma fora do local). Marque os destinos pretendidos em Definições > Armazenamento:
Local
Os arquivos ficam em var/dfbackup/ sob a raiz do PrestaShop, protegidos por um .htaccess Deny. Sempre ativo como cópia de trabalho.
Amazon S3 e compatíveis
Preencha Access Key, Secret Key, bucket, região. O campo Endpoint permite usar qualquer serviço compatível com S3:
- Amazon S3: deixar o endpoint vazio, indicar a região (ex.
eu-west-3em Paris oueu-south-2em Espanha); - Cloudflare R2:
https://ACCOUNT_ID.r2.cloudflarestorage.com, regiãoauto: 10 GB gratuitos, custo de saída zero; - MinIO auto-alojado:
https://minio.o-seu-dominio.pt; - OVH Object Storage, Scaleway, Wasabi, Backblaze B2: endpoint fornecido pelo seu alojamento.
O multipart upload é desencadeado automaticamente acima de 100 MB (partes de 10 MB): os arquivos de vários GB passam sem saturar a memória PHP.
FTP / FTPS
Anfitrião, porta, credenciais, diretório remoto (criado automaticamente se não existir), FTPS e modo passivo ativáveis.
Dropbox
Cole um access token gerado a partir da consola de programador do Dropbox (permissão files.content.write). Os arquivos acima de 150 MB passam automaticamente a upload_session por chunks.
Cada destino dispõe de um botão Testar que verifica a ligação e os direitos de escrita antes da primeira cópia real.
Replicação para um PrestaShop de staging
A replicação envia cada cópia para uma segunda instalação PrestaShop equipada com o dfbackup, ideal para manter um ambiente de pré-produção sincronizado todas as noites.
Configuração
- Na loja de destino (staging): instale o dfbackup e depois registe um segredo partilhado (32+ caracteres aleatórios) na chave de configuração
DFBACKUP_REPLICATION_SECRET(através das Definições ou de Parâmetros avançados > Configuração). - Na loja de origem (produção): em Definições > Armazenamento > Replicação PrestaShop, preencha o URL do staging (ex.
https://staging.example.com) e o mesmo segredo. Marque Replicação entre os destinos. - Clique em Test replication target: o destino deve responder OK.
Restauro automático (opcional)
Para que o staging aplique automaticamente cada arquivo recebido, ative no destino a chave DFBACKUP_REPLICATION_AUTO_RESTORE = 1 e marque a opção correspondente do lado da origem. Na manhã seguinte, o seu staging reflete a produção da véspera.
O auto-restore sobrescreve a BD e os ficheiros do staging a cada receção. Nunca o ative numa loja de produção. A flag do lado do destino é uma proteção voluntariamente separada do segredo partilhado.
Segurança do transporte
Os arquivos são transferidos em chunks de 8 MB, cada um assinado HMAC-SHA-256 (a assinatura cobre os parâmetros e o hash do corpo). Um controlo anti-replay rejeita qualquer pedido cujo timestamp se desvie mais de 5 minutos.
Cifragem AES-256
Em Definições > Cifragem, ative a caixa e defina uma frase-passe. Os arquivos são então cifrados em AES-256-CBC com HMAC-SHA-256 (padrão encrypt-then-MAC, derivação PBKDF2 com 120 000 iterações).
- A frase-passe nunca é guardada em claro: só o seu hash serve para a verificação no restauro.
- Um arquivo cifrado cuja frase-passe se perdeu é definitivamente irrecuperável. Guarde a frase-passe num gestor de palavras-passe (Bitwarden, 1Password) antes de ativar a opção.
- O checksum SHA-256 é calculado no arquivo antes da cifragem e verificado no restauro.
Restauro
A partir do Histórico, cada cópia propõe três ações: Verificar (recalcula o SHA-256), Restaurar e Eliminar.
Decorrer de um restauro
- É criado automaticamente um snapshot da BD de segurança antes de qualquer operação.
- Escolhe o âmbito: tudo, só BD, ou só ficheiros.
- Se o arquivo estiver cifrado, é pedida a frase-passe.
- A BD é restaurada instrução a instrução; os ficheiros são extraídos por lotes.
- As tabelas
dfbackup*são sempre preservadas: o seu histórico de cópias sobrevive ao restauro.
Modo migração (mudança de domínio)
Marque Modo migração e indique o novo domínio: o módulo atualiza PS_SHOP_DOMAIN, PS_SHOP_DOMAIN_SSL, a tabela shop_url e reescreve os URLs codificados nos conteúdos CMS, produtos e meta. Prático para clonar uma loja em pré-produção ou mudar de domínio.
Depois de um restauro, limpe sistematicamente a cache (Desempenho > Limpar a cache) e verifique a página inicial em navegação privada.
Rotação e retenção
Duas regras cumulativas em Definições > Retenção:
- Manter N cópias: acima disso, as mais antigas são eliminadas;
- Eliminar após X dias: independentemente do número.
Só as cópias com estado completed ou verified são contadas e purgadas; os snapshots pré-restauro e pré-upgrade seguem as mesmas regras.
Notificações e alertas
- E-mail: envio via
Mail::Send(as suas definições SMTP do PrestaShop são respeitadas) em caso de sucesso e/ou de falha, modelos FR/EN/ES/DE. - Webhook: cole um URL Slack, Discord ou Microsoft Teams: o formato é detetado automaticamente. Qualquer outro URL recebe um JSON genérico.
- Alerta no back-office: aparece uma faixa no topo de todas as páginas de administração se a última cópia falhou (vermelha) ou tem mais de 7 dias (amarela).
- Snapshot pré-upgrade: é lançada automaticamente uma cópia da BD antes de cada atualização de módulo (hook
actionAdminModulesUpgradeBefore), desativável nas Definições.
Exclusões de ficheiros
O módulo exclui à partida var/dfbackup, var/cache, .git, node_modules e a pasta autoupgrade. Pode acrescentar os seus próprios caminhos e padrões glob (ex. img/tmp/*, *.log) em Definições > Exclusões. O modo incremental (apenas ficheiros modificados, deteção por impressão caminho + tamanho + data) reduz fortemente o tamanho das cópias intermédias.
Resolução de problemas
Uma cópia fica bloqueada em “running”
Se o processo foi morto (reinício do servidor), a linha será marcada como falhada no próximo lançamento graças ao bloqueio flock. Pode também eliminá-la a partir do Histórico.
“Another backup is already running”
Um bloqueio de ficheiro impede duas cópias simultâneas. Espere pelo fim da cópia em curso (visível no Dashboard) ou verifique que um cron externo não corre ao mesmo tempo que um lançamento manual.
A cópia falha numa loja grande
Aumente Max execution time e Memory limit nas Definições (o módulo aplica-os ao seu próprio processo). Ative o modo incremental para os ficheiros e exclua os diretórios volumosos inúteis (exportações, registos).
As alterações do módulo parecem não ser tidas em conta
É quase sempre o opcache PHP que serve o bytecode antigo. Limpe a cache do PrestaShop e reinicie o PHP-FPM (ou espere pela expiração do opcache).
O URL de web-cron devolve um 404
Use o URL no formato dispatcher (index.php?fc=module&module=dfbackup&controller=webcron) apresentado nas Definições: alguns alojamentos bloqueiam o acesso direto aos ficheiros PHP sob /modules/.
Desinstalação
A desinstalação elimina as quatro tabelas e todas as configurações. Os arquivos presentes em var/dfbackup/ não são eliminados automaticamente: descarregue as suas cópias recentes antes de desinstalar se contar reinstalar mais tarde.