. DirectAdmin инструкция по автоматическому созданию бэкапа | Makarou.com - когда сайты превращаются в бизнес

DirectAdmin инструкция по автоматическому созданию бэкапа

DirectAdmin инструкция по автоматическому созданию бэкапа

Добрый день, Друзья! Сегодня будет так сказать что-то  новенькое на блоге, а точнее говоря гостевой пост. Этот пост, написал автор замечательного блога о вебмастеринге — http://www.cavablog.pp.ua, которого зовут Свят. Расскажет он вам сегодня об одной, очень интересной возможности, которая существует в панели управлении DirectAdmin.

Добрый день!

Сегодня я хотел бы с вами обсудить, как можно автоматизировать создание бэкапа в панели DirectAdmin (автономный запуск скрипта(Cron-задание)). Это будет своеобразная DirectAdmin инструкция для начинающих пользователей. Так как поддержка Cron в DirectAdmin есть, а самого скрипта у меня не было, пришлось мне задаться поиском кода.

Самому написать было бы интересно, тот же опыт бы добавился, но в силу архи развития интернета и доступности исходников в сети, идею написания отложил на потом. И как вы уже понимаете, я всё- таки нашел php скрипт, который за меня всё сделает.

К сожалению, откуда я взял скрипт уже не помню. Думаю, не надо останавливаться на важности создания резервной копии сайта или сайтов. Давайте переместимся, ближе к коду. :)

Полный код скрипта:

class DABackuper {
var $path;
var $email;
var $domen;
var $port;
var $user;
var $password;
var $emailFrom;
var $sendEmailBackup;
var $deleteBackup;
function DABackuper(){
set_time_limit(0);
// папка, где Direct Admin создает бэкапы
$this->path = '/home/user/backups';
// E-mail адрес для отправки уведомлений и бэкапов
$this->email = 'mail@domen.ru';
// домен
$this->domen  = 'domen.ru';
// порт (стандартный для DirectAdmin'а это 2222)
$this->port = '2222';
// пользователь Direct Admin
$this->user = 'user';
// пароль пользователя
$this->password = 'password';
// адрес отправителя писем
$this->emailFrom = 'DABackuper <admin@domen.ru>';
// отправлять созданные бэкапы на Email? (0 - нет, 1 - да)
$this->sendEmailBackup = 1;
// удалять существующие бэкапы перед созданием новых (0 - нет, 1 - да)
$this->deleteBackup = 1;
if ($_GET['test']) {
print_r($_POST);
exit();
}
}
function _create(){
$post = http_build_query(array(
'domain' => 'domen.ru',
'action' => 'backup',
'select0' => 'domain',
'select1' => 'subdomain',
'select2' => 'email',
'select3' => 'forwarder',
'select4' => 'autoresponder',
'select5' => 'vacation',
'select6' => 'list',
'select7' => 'emailsettings',
'select8' => 'ftp',
'select9' => 'ftpsettings',
'select10' => 'database'));
$opts = array('http' =>
array(
'http' => array(
'timeout' => 120
),
'method'  => 'POST',
'header'  => 'Content-type: application/x-www-form-urlencoded',
'content' => $post
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://' . $this->user . ':' . $this->password . '@' . $this->domen . ':' . $this->port . '/CMD_SITE_BACKUP', false, $context);
}
function _mailFile($from, $to, $subj, $text, $filename) {
$f = fopen($filename, 'rb');
$un = strtoupper(uniqid(time()));
$head = "From: $from\n";
$head .= "To: $to\n";
$head .= "Subject: $subj\n";
$head .= "X-Mailer: PHPMail Tool\n";
$head .= "Reply-To: $from\n";
$head .= "Mime-Version: 1.0\n";
$head .= "Content-Type:multipart/mixed;";
$head .= "boundary=\"----------".$un."\"\n\n";
$zag = "------------".$un."\nContent-Type:text/html;\n";
$zag .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
$zag .= "------------".$un."\n";
$zag .= "Content-Type: application/octet-stream;";
$zag .= "name=\"".basename($filename)."\"\n";
$zag .= "Content-Transfer-Encoding:base64\n";
$zag .= "Content-Disposition:attachment;";
$zag .= "filename=\"".basename($filename)."\"\n\n";
$zag .= chunk_split(base64_encode(fread($f, filesize($filename))))."\n";
return @mail("$to", "$subj", $zag, $head);
}
function notice($message){
$this->headers = "Content-type: text/html; charset=windows-1251 \r\n";
$this->headers .= "From: " . $this->emailFrom . "\r\n";
return mail($this->email, 'Уведомление DABackuper от ' . date('d.m.Y H:i:s'), $message, $headers);
}
function _exec(){
if ($this->deleteBackup) {
$backups = glob($this->path . '/*.tar.gz');
@unlink($backups[0]);
}
$this->_create();
if ($this->sendEmailBackup) {
sleep(5*60);
while (is_dir($this->path . '/backup')) {
sleep(60);
}
sleep(60*2);
$backups = glob($this->path . '/*.tar.gz');
if (trim($backups[0]) != '') {
$result = $this->_mailFile($this->emailFrom, $this->email, 'DABackuper - Backup ' . date('d.m.Y H:i:s'), 'DABackuper - Backup file in attachment!', $backups[0]);
if (!$result) $this->notice('Произошла ошибка отправки файла бэкапа!');
}
else{
$this->notice('Файл бэкапа предназначенный для отправки на Email не найден!');
}
}
}
function test(){
$result = file_get_contents('http://' . $this->user . ':' . $this->password . '@' . $this->domen . ':' . $this->port . '/CMD_SITE_BACKUP?domain=' . $this->domen);
$result = str_replace('<form action="/CMD_SITE_BACKUP"', '<form action="?test=1"', $result);
echo $result;
exit();
}
}
$DABackuper = new DABackuper();
// для тестирования и определения параметров расскомментируйте ниже идущую строку
//$DABackuper->test();
$DABackuper->_exec();
exit();

Для  начала надо указать параметры для доступа к ftp, адрес почты и так далее. То есть, сконфигурировать код под ваш хостинг. Желательно сначала убрать комментарии с метода DABackuper->test(); а потом выполнить скрипт. Проблем особых возникнуть не должно, тем более что от вас требуются доступы и больше ничего.

Теперь давайте перейдем, к созданию Cron задания. ;)

Для начала заходим в Запуск скриптов Cron, указываем время – ничего сложного нет. Сложность состоит в команде запуска скрипта.

Один из способов запуска скрипта автономно:

/home/test/public_html/test.php

* — запуск скрипта test.php с аккаунта test с отправкой выходных и сообщений об ошибках на указанный в directadmin cron manager, @mail.

Вот в принципе и всё. Что знал, то и поведал. ;)

Постовой

Многие знают, что качественная оптимизация сайтов, долгий и трудоемкий процесс. Так как в нём нужно учесть все факторы, влияющие на выдачу сайта на первых позициях в поисковых системах.

Администрирование

Понравился пост? добавь его к себе в закладки:
Хочешь быть всегда в курсе обновлений блога? подписывайся через: