Резервное копирование WordPress — это не только вопрос регулярности и надёжности, но и вопрос безопасности, особенно когда речь идёт о сохранении копий в облаке. Многие владельцы сайтов предпочитают использовать публичные облачные сервисы, такие как Google Drive или Яндекс.Диск, однако для тех, кто заботится о полном контроле над данными, приватное облако — оптимальное решение.
Почему стоит выбрать приватное облако для резервного копирования
Приватное облако — это инфраструктура, которую вы контролируете сами или через доверенного провайдера, без участия третьих лиц. В такой среде обеспечивается:
- Повышенная безопасность: данные не проходят через публичные сервисы, что снижает риски утечки;
- Контроль доступа: вы сами управляете правами и политиками безопасности;
- Гибкость настройки: можно адаптировать систему под конкретные задачи резервного копирования и восстановления;
- Соответствие требованиям: для бизнеса с жёсткими регламентами приватное облако — зачастую единственный вариант.
Однако настройка резервного копирования в приватном облаке требует определённых технических знаний, и в этой статье мы рассмотрим, как это сделать на примере частого сценария: резервное копирование файлов и базы данных WordPress с отправкой архивов на приватный Nextcloud сервер.
Подготовка приватного облака: настройка Nextcloud для резервного копирования
Nextcloud — популярное решение для организации приватного облака. Оно позволяет хранить файлы, управлять правами и интегрироваться с внешними сервисами.
Для начала необходимо подготовить сервер с установленным Nextcloud и создать там пользователя для резервных копий, а также выделить папку для хранения архивов.
Основные шаги:
- Установить Nextcloud на сервер с доступом по HTTPS;
- Создать пользователя, например,
wpbackup_user; - Создать директорию, например,
/wp-backups/и выдать права на запись пользователю; - Настроить WebDAV доступ — стандартное средство для работы с файлами в Nextcloud.
Для проверки WebDAV можно использовать любую программу, поддерживающую этот протокол, или curl.
Автоматизация резервного копирования WordPress с отправкой в Nextcloud через WebDAV
Теперь перейдём к настройке резервного копирования с сайта WordPress. Вариантов много, но мы рассмотрим скрипт на PHP с использованием встроенных функций и cURL для загрузки в Nextcloud.
Шаг 1. Создание резервной копии базы данных и файлов
Пример функции для создания дампа базы данных и архива с файлами WordPress:
function wpbackup_ru_create_backup($db_host, $db_user, $db_pass, $db_name, $wp_path, $backup_dir) {
$date = date('Y-m-d_H-i-s');
$sql_file = "$backup_dir/db_backup_$date.sql";
$zip_file = "$backup_dir/wp_files_$date.zip";
// Создаём дамп базы
$command = "mysqldump -h $db_host -u $db_user -p$db_pass $db_name > $sql_file";
exec($command, $output, $return_var);
if ($return_var !== 0) {
throw new Exception('Ошибка при создании дампа базы данных');
}
// Архивируем файлы WordPress
$zip = new ZipArchive();
if ($zip->open($zip_file, ZipArchive::CREATE) !== TRUE) {
throw new Exception('Не удалось создать архив');
}
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($wp_path));
foreach ($files as $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($wp_path));
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
return [$sql_file, $zip_file];
}
Этот код создаёт дамп базы данных и архивирует все файлы WordPress в отдельный ZIP-архив. Путь к корню сайта и директория для хранения временных файлов задаются в параметрах.
Шаг 2. Отправка резервной копии в Nextcloud через WebDAV
Для загрузки файлов на сервер Nextcloud используем WebDAV и cURL в PHP:
function wpbackup_ru_upload_to_nextcloud($file_path, $nextcloud_url, $username, $password, $remote_path) {
$fh = fopen($file_path, 'r');
if (!$fh) {
throw new Exception('Не удалось открыть файл для чтения');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $nextcloud_url . $remote_path);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_INFILE, $fh);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file_path));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
fclose($fh);
if ($http_code >= 200 && $http_code < 300) {
return true;
} else {
throw new Exception("Ошибка загрузки файла в Nextcloud, HTTP код: $http_code");
}
}
Эта функция отправляет файл на сервер Nextcloud по протоколу WebDAV методом PUT. В параметрах передаются URL сервера, учётные данные и путь внутри облака.
Шаг 3. Полный пример автоматизации
Объединим функции для создания резервной копии и загрузки в облако:
try {
$backup_dir = '/tmp/wp_backups/';
if (!file_exists($backup_dir)) {
mkdir($backup_dir, 0755, true);
}
list($sql_file, $zip_file) = wpbackup_ru_create_backup('localhost', 'dbuser', 'dbpass', 'dbname', '/var/www/html/wordpress', $backup_dir);
$nextcloud_url = 'https://nextcloud.example.com/remote.php/dav/files/wpbackup_user/';
$username = 'wpbackup_user';
$password = 'securepassword';
wpbackup_ru_upload_to_nextcloud($sql_file, $nextcloud_url, $username, $password, 'wp-backups/' . basename($sql_file));
wpbackup_ru_upload_to_nextcloud($zip_file, $nextcloud_url, $username, $password, 'wp-backups/' . basename($zip_file));
echo 'Резервные копии успешно сохранены в приватном облаке.';
} catch (Exception $e) {
echo 'Ошибка: ' . $e->getMessage();
}
Этот скрипт можно запускать по расписанию через cron для регулярного создания и отправки резервных копий.
Практические советы по безопасности и оптимизации
Шифрование резервных копий
Даже в приватном облаке рекомендуется шифровать резервные копии, чтобы избежать риска компрометации. Для этого можно использовать GPG:
gpg --symmetric --cipher-algo AES256 wp_files_2024-06-15.zip
После шифрования загружайте на сервер уже зашифрованный файл.
Очистка старых резервных копий
Чтобы не переполнять облако, добавьте в скрипт удаление файлов старше определённого срока. Например, для удаления файлов старше 30 дней:
find /tmp/wp_backups/ -type f -mtime +30 -delete
Мониторинг и оповещение
Рекомендуется настраивать уведомления по email или через мессенджеры о результате резервного копирования. Например, добавить в скрипт отправку почты с результатом выполнения.
Альтернативные плагины и инструменты для резервного копирования в приватное облако
Если не хочется писать код самостоятельно, можно использовать плагины с поддержкой WebDAV или интеграции с Nextcloud:
- BackUpWordPress — простой плагин с возможностью настройки удалённого хранения;
- UpdraftPlus — продвинутый плагин с поддержкой WebDAV;
- WPBackup — плагин с расширенными настройками и возможностью интеграции с приватными облаками.
При выборе плагина обратите внимание на возможность настройки подключения по WebDAV и шифрования резервных копий.