PHPBU загрузка бэкапов на Яндекс Диск

В предыдущей статье я рассказывал о PHPBU. Сейчас хочу рассказать как можно выгружать файлы бэкапов на Яндекс Диск.

Расширение PHPBU

Необходимо создать файл — WebdavSync.php с таким кодом:

<?php

namespace Fritool;

use \phpbu\App\Backup\Sync;
use \phpbu\App\Backup\Target;
use \phpbu\App\Result;

class WebdavSync implements Sync
{
    private $someConfigValue;

    public function setup(array $options)
    { }

    public function sync(Target $target, Result $result)
    {
        $user     = 'username';
        $password = 'password';
        $date     = date('Y-m-d');
        
        exec(
            sprintf(
                'curl -X MKCOL --user "%s:%s" https://webdav.yandex.ru/backups/%s',
                $user,
                $password,
                $date
            ),
            $output
        );

        unset($output);
        exec(
            sprintf(
                'curl -T %s --user "%s:%s" https://webdav.yandex.ru/backups/%s/%s',
                $target->getPathname(),
                $user,
                $password,
                $date,
                $target->getFilename()
            ),
            $output
        );
    }
}

Команды для работы с WEB Dav я описывал в статье – CURL для WebDAV на примере с Яндекс Диском.

Далее нужно создать еще один файл  в котором зарегистрируем новый sync для PHPBU.

Файл phpbu-extend.php

<?php

require __DIR__ . '/WebdavSync.php';

phpbu\App\Factory::register('sync', 'webdav', '\\Fritool\WebdavSync');

В файле phpbu.json надо добавить информацию об phpbu-extend.php

"bootstrap": "/home/www/phpbu-extend.php",

И добавить в раздел syncs

{
  "type": "webdav"
}

В итоге файл phpbu.json должен получиться таким

{
  "bootstrap": "/home/www/phpbu-extend.php",
  "verbose": true,
  "logging": [
    {
      "type": "json",
      "target": "backup/json.log"
    },
    {
      "type": "mail",
      "options": {
        "transport":       "smtp",
        "recipients":      "my@email.com",
        "sender.mail":     "adapter:environment:SMTP_BACKUP_USER",
        "smtp.host":       "smtp.yandex.ru",
        "smtp.port":       "465",
        "smtp.username":   "adapter:environment:SMTP_BACKUP_USER",
        "smtp.password":   "adapter:environment:SMTP_BACKUP_PASSWORD",
        "smtp.encryption": "ssl"
      }
    }
  ],
  "adapters": [
    {
      "type": "env",
      "name": "environment"
    }
  ],
  "backups": [
    {
      "name": "MySQL",
      "source": {
        "type": "mysqldump",
        "options": {
          "databases": "database_name",
          "user":      "adapter:environment:MYSQL_BACKUP_USER",
          "password":  "adapter:environment:MYSQL_BACKUP_PASSWORD"
        }
      },
      "target": {
        "dirname":  "/path/to/backup/storing",
        "filename": "mysql-database_name-%Y%m%d-%H%i.sql",
        "compress": "bzip2"
      },
      "syncs": [
        {
          "type": "webdav",
        }
      ],
      "cleanup": {
        "type": "stepwise",
        "options": {
          "daysToKeepAll":      10,
          "daysToKeepDaily":    10,
          "weeksToKeepWeekly":  1,
          "monthToKeepMonthly": 1,
          "yearsToKeepYearly":  1
        }
      }
    }
  ]
}

Логин и пароль можно вынести в переменные окружения и через options в файле phpbu.json передавать в код для использования WEB Dav.