# Работа с персональными хранилищами резервных копий

Plesk предоставляет возможность выбрать удаленное хранилище для хранения ваших резервных копий, например, FTP-сервер. Используя Plesk SDK, вы можете также добавлять другие персональные хранилища резервных копий и разрешать Plesk использовать их для хранения резервных копий.

Класс pm_Hook_Backup_Transport определяет набор методов, которые описывают необходимые функции авторизации, работы с файлами и т.д. С помощью этого хука Plesk Backup Manager узнает о новом персональном хранилище и предоставляет все те же операции и информацию, которые доступны для хранилищ резервных копий, используемых по умолчанию.

Чтобы это проиллюстрировать, Plesk предлагает следующий пример проекта: https://github.com/plesk/ext-cloud-backup-example.

# Авторизация

Как разработчик расширения, вы можете выбирать способ обработки авторизации: с помощью OAuth2 или с помощью имени пользователя и пароля.

## Имя пользователя и пароль

Имя пользователя и пароль (либо ключ доступа/секретный ключ), используемые для авторизации в персональном хранилище, указываются на форме настроек персонального хранилища pm_Hook_Backup_Transport::getSettingsSubForm(). Введенные имя пользователя и пароль должны проверяться в методе pm_Form_SubForm::isValid().

## OAuth2

Авторизация OAuth2 должна быть реализована в методе pm_Hook_Backup_Transport::authorize(). Этот метод всегда вызывается перед отображением формы настроек персонального хранилища, pm_Hook_Backup_Transport::getSettingsSubForm().

## Проверка

Метод pm_Hook_Backup_Transport::check() используется для того, чтобы убедиться, что все функции, участвующие в операциях резервного копирования и восстановления (например, CRUD), доступны. Этот метод вызывается перед выполнением каждой операции резервного копирования.

## Комментарии

1. Удостоверьтесь в том, что вы используете хранилище пар «ключ-значение» Plesk для шифрования и безопасного хранения паролей и ключей доступа.
2. Создайте отдельные папки в корневой папке персонального хранилища для различных объектов, чтобы не смешивать файлы их резервных копий.

# Работа с файлами

## Запись в персональное хранилище

Методы, отвечающие за запись созданной резервной копии в персональное хранилище, вызываются в следующем порядке:

1. openFileWrite()
2. [несколько вызовов] appendFile()
3. closeFile()

Некоторые хранилища могут требовать указания размера записываемого файла перед началом его загрузки. Эта информация недоступна во время создания резервной копии Plesk. В этом случае резервную копию необходимо разбить на несколько файлов известного размера. Эти файлы должны быть названы следующим образом:

1. `backup.tar`
2. `backup.tar1`
3. `backup.tar2`
4. `...`

После этого Plesk Backup Manager сможет корректно отображать информацию и работать с резервной копией.

## Чтение из персонального хранилища

Методы, отвечающие за чтение резервной копии из персонального хранилища, вызываются в следующем порядке:

1. openFileRead()
2. [несколько вызовов] readFile()
3. closeFile()

# Тестирование работы расширения с персональным хранилищем

Чтобы убедиться, что все функции расширения, связанные с резервным копированием и восстановлением, работают корректно, запустите следующую команду:

    /opt/psa/admin/bin/pmm-ras --check-repository --debug --verbose --dump-storage=ext://<ext name>/subscription/<id>/ --session-path=/var/log/plesk/PMM