- Gerar backup dos arquivos e da base de dados.
- Copiar este backup para uma pasta específica dentro da minha hospedagem para que eu possa baixar via FTP.
- Apagar o arquivo a cada 15 dias, deixando apenas o mais novo.
Como gerar esse backup automático no cPanel?
Vamos trabalhar com um arquivo PHP, responsável pelo código que realiza a conexão, cria e apaga o backup, vou chamar este arquivo de backup.php.
Também vamos precisar criar uma tarefa Cron Job no cPanel, se você possui uma revenda deverá criar uma tarefa em cada conta, se possui um VPS poderá configurar via SSH, no meu caso é uma revenda, sendo assim adicionei para cada conta um cron job, nada de drama, depois de pronto fica ótimo e otimiza seu tempo.
Nosso arquivo backup.php está configurado para realizar o backup na pasta /public_html/backup/ então pode criar ela.
Após criar esta pasta você pode realizar o upload do arquivo backup.php para a pasta home em seu servidor (não na www), se tiver dúvidas entra no seu cPanel e olha na sidebar da esquerda, lá diz qual sua pasta home.
Após subir este arquivo determine a permissão 750 para ele.
A parte do nosso arquivo já foi feita, agora precisamos criar a tarefa cron job para isso faça:
- Entre no cPanel
- Na seção AVANÇADA vá em “Tarefas Cron”
- Atualize seu e-mail para que receba um alerta sempre que o CRON JOB rodar (não obrigatório)
- Em “Minuto” defina em qual minuto será realizado o seu backup
- Em “Hora” defina em qual hora será realizado o seu backup
- Em “Dia Útil” defina em qual dia será realizado o seu backup
- 0 = domingo
- 1 = segunda
- 2 = terça
- 3 = quarta
- 4 = quinta
- 5 = sexta
- 6 = sábado)
- Na linha de comando insira o PATH do seu SCRIPT, “/usr/local/bin/php /home/nome-da-sua-home/backup.php”
- Clique em “Adicionar Novo Trabalho Cron” e sua configuração de backup estará pronta.
Observação 1: Este espaço no PATH após é necessário por conta do meu PHP 5.2.
Observação 2: Tive alguns bugs quando a senha do cPanel e ou FTP continham caracteres especiais, caso tenham esse tipo de problemas utilizem senhas alfanuméricas apenas.
CÓDIGO BACKUP.PHP
<?php
/*
Script de Backup para cPanel
Este script irá criar automaticamente o arquivo de backup, transferir para o servidor FTP
kdkhost soluções
*/
// Change to your information
$cpanel_user = “USUÁRIO DO CPANEL”; // change to your cpanel user
$cpanel_password = “SENHA DO CPANEL”; // change to your cpanel password
$domain = “DOMINIO.COM”; // your domain
$email_to_report = “SEUEMAIL@SEUEMAIL.COM”; // Your email to receive notification when the script finish backup. Leave it blank if you dont want to receive notification.
$ftp = true; // transfer to FTP server or not
$ftpserver = “DOMINIO FTP”; // your ftp server address
$ftpusername = “USUÁRIO DO FT”; // your ftp username
$ftppassword = “SENHA DO FTP”; // your ftp password
$ftpdirectory = “/public_html/backup/”; // your backup directory
$daytostore = 7; // how many days do you want to store the backup file, the files which older than this number of day will be deleted
//This part is option, the bellow information is work for almost user
$ftpport = “21”; // default port for FTP connection of most hosting providers now
$theme = “x3”; // change to your cpanel theme name, default is most popular theme now named paper_lantern
$secure = false; // use https or not
// =================================================================================
// ========= do not change anything bellow unless you are a master of PHP ==========
// =================================================================================
// Backup
$auth = base64_encode(“$cpanel_user” . “:” . “$cpanel_password”);
if ($secure) {
$url = “ssl://” . $domain;
$port = 2083;
} else {
$url = $domain;
$port = 2082;
}
$socket = fsockopen($url, $port);
if (!$socket) {
exit(“Failed to open socket connection.”);
}
if ($ftp) {
$params = “dest=ftp&server=$ftpserver&user=$ftpusername&pass=$ftppassword&port=$ftpport&rdir=$ftpdirectory&submit=Generate Backup”;
} else {
$params = “submit=Generate Backup”;
}
fputs($socket, “POST /frontend/” . $theme . “/backup/dofullbackup.html?” . $params . ” HTTP/1.0\r\n”);
fputs($socket, “Host: $domain\r\n”);
fputs($socket, “Authorization: Basic $auth\r\n”);
fputs($socket, “Connection: Close\r\n”);
fputs($socket, “\r\n”);
while (!feof($socket)) {
$response = fgets($socket, 4096);
echo $response;
}
fclose($socket);
// delete old file from ftp if FTP set to true
if ($ftp) {
// set up basic connection
$conn_id = ftp_connect($ftpserver);
// login with username and password
$login_result = ftp_login($conn_id, $ftpusername, $ftppassword);
if ($login_result) {
$filelistname = ftp_nlist($conn_id, $ftpdirectory);
foreach ($filelistname as $key => $value) {
$file = $ftpdirectory . $value;
$mdftime = ftp_mdtm($conn_id, $file);
if (($value!==”.”) && ($value !==”..”) && ((time() – $mdftime) > $daytostore * 86400)) {
// try to delete $file
if (ftp_delete($conn_id, $file)) {
echo “$file deleted successful\n”;
} else {
echo “could not delete $file\n”;
}
}
}
// close the connection
ftp_close($conn_id);
}
else {
echo “FTP connection Failed”;
}
}
// send report email
if ($email_to_report !== “”) {
$attime = date(‘d-m-Y H:i:s’);
$to = $email_to_report;
$subject = ‘Auto backup for ‘ . $domain . ‘ at ‘ . $attime . ‘ successful.’;
$message = ‘Auto backup for ‘ . $domain . ‘ at ‘ . $attime . ‘ successful.’;
$headers = ‘From: autobackupreport@’ . $domain . “\r\n” .
‘Reply-To: autobackupreport@’ . $domain . “\r\n” .
‘X-Mailer: PHP/’ . phpversion();
mail($to, $subject, $message, $headers);
}
?>