Plesk provides the option of choosing a remote storage to keep your backups, such as an FTP server. Using Plesk SDK, it is also possible to add more different custom backup storages, and enable Plesk to use them to keep the backups.

Class pm_Hook_Backup_Transport defines a set of methods, which describe the necessary functions of authentication and authorization, working with files, etc. With the help of this hook, Plesk Backup Manager knows about the new custom storage, and provides all the same operations and information that are available for the default backup storages.

To illustrate the subject, the following sample project is provided by Plesk: https://github.com/plesk/ext-cloud-backup-example.

Authorization

As the extension developer, you may choose to handle authorization, using either OAuth2 or login and password.

Login and Password

The login and password (or access key/secret key) used for authentication with the custom storage are specified on the custom storage settings sub-form, pm_Hook_Backup_Transport::getSettingsSubForm(), along with other settings. The entered login and password must be validated in the pm_Form_SubForm::isValid() method.

OAuth2

OAuth2 authorization must be implemented in the pm_Hook_Backup_Transport::authorize() method. This method is always called before displaying the custom storage settings sub-form, pm_Hook_Backup_Transport::getSettingsSubForm().

Verification

Method pm_Hook_Backup_Transport::check() should be used to make sure all the functions involved in backup and restore operations (e.g., CRUD) are available. This method is called before each backup operation.

Remarks

  1. Make sure to use the Plesk Key-Value Storage to encrypt and safely store passwords and access tokens.
  2. Create separate directories in the custom storage root directory for the different objects to keep their backup files from mixing.

Working with Files

Writing to Custom Storage

The methods responsible for writing the created backup to the custom storage are called in the following order:

  1. openFileWrite()
  2. [multiple calls] appendFile()
  3. closeFile()

Some storages may require the size of the file written to be known before starting the file upload. This information is not available during the Plesk backup creation. In this case, the backup should be split into a set of files of a known size. The files should be named in the following manner:

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

This way, Plesk Backup Manager will be able to correctly display information and work with the backup.

Reading from Custom Storage

The methods responsible for reading the backup from the custom storage are called in the following order:

  1. openFileRead()
  2. [multiple calls] readFile()
  3. closeFile()

Testing Your Extension with Custom Storage

To make sure all the backup/restore-related extension functions work properly, run the following command:

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