В Windows 10 клиент OneDrive установлен в системе по умолчанию и изначально для хранения данных сервис предоставляет 15GB бесплатного пространства. Дополнительно можно получить «вечных» +30GB за счет бонусных программ. В моем случае это были: привлечение новых пользователей, загрузка изображений с камеры и программа лояльности. Как видите, можно получить существенный объем хранилища совсем даром. Так почему бы не использовать это место с пользой? Связи с чем я решил отказаться от использования DropBox и перенести все важные данные в облако OneDrive.
Еще я использовал Яндекс Диск в качестве хранилища бэкапов для Linux сервера. Главное достоинство Яндекс Диска — возможность заливать файлы по протоколу WebDAV просто используя сurl. Что бы все важные данные хранились в одном месте, было принято решение перенести бэкапы в OneDrive.
Для работы с OneDrive в Linux без использования клиента необходимо использовать OneDrive API. Я не горел желанием самостоятельно его ковырять, поэтому был взят уже готовый скрипт скрипт bash-onedrive-upload. Для работы скрипта необходимо указать Client ID и Client secret, для этого в Microsoft account Developer Center необходимо создать новое приложение. В настройках приложения «Edit settings» — «API Settings» обязательно нужно выбрать опцию «Mobile or desktop client app: yes».
Заливаем скрипт bash-onedrive-upload на сервер, bash-json-parser необходимо скачать отдельно и положить в каталог /libs/json/
. Даем право на запуск:
chmod 0700 onedrive-authorize onedrive-base onedrive-upload ./libs/json/bash-json-parser
В файле onedrive.cfg необходимо указать полученные Client ID и Client secret:
export refresh_token_file="${script_base_folder}/.refresh_token" # Authentication config export api_client_id="Client ID" export api_client_secret="Client secret" # Upload config # Leave empty for root folder export api_folder_id="" export max_upload_threads=2
Если оставить параметр export api_folder_id
пустым, то по умолчанию файлы будут заливаться в корень OneDrive. При желании можно задать любой вложенный каталог. Для этого из адресной строки веб-интерфейса OneDrive необходимо скопировать id
этого каталога.
Запускаем скрипт onedrive-authorize.
Скрипт попросит перейти в браузере по указанной ссылке, где вам необходимо разрешить доступ приложению к данным OneDrive. После отверждения откроется пустая страница, из адресной строки которой в окно терминала необходимо скопировать значение параметра code
. Если вы все сделали правильно, то увидите в терминале нечто похожее на это:
./onedrive-authorize Please open the following URL in your browser and follow the steps until you see a blank page: https://login.live.com/oauth20_authorize.srf?client_id=0000000000000000&scope=wl.skydrive%20wl.skydrive_update%20wl.offline_access&response_type=code&redirect_uri=https://login.live.com/oauth20_desktop.srf When ready, please enter the value of the code parameter (from the URL of the blank page) and press return 111111111-1111-1111-1111-111111111111 It seems like we have a refresh token, so we are ready to go
После чего можно использовать скрипт для загрузки файлов:
#загрузка файла в коневой каталог ./onedrive-upload file1 #загрузка файла в вложенный каталог ./onedrive-upload -f "path" file1
Скрипт создания бэкапа и загрузки на сервер OneDrive:
BACKUP_FILES="/home/www /etc/nginx" MYSQL_USER="user" MYSQL_PASS="password" TMP_DIR=/tmp/backup BACKUP_TAR=/tmp/backup.`date +%y.%m.%d`.tar mkdir -p $TMP_DIR # Backup files tar -czf $TMP_DIR/fs.tar.gz -P $BACKUP_FILES # Backup MySQL for db in $(mysql -B -s -u $MYSQL_USER --password=$MYSQL_PASS -e 'show databases' | grep -v information_schema) do # Exclude database if [ $db != "performance_schema" ] && [ $db != "mysql" ]; then mysqldump -u $MYSQL_USER --password=$MYSQL_PASS $db | gzip > $TMP_DIR/mysql.$db.sql.gz fi done # Merge files tar -cf - -C $TMP_DIR . > $BACKUP_TAR # OneDrive upload ./onedrive-upload -f "Sites/backup" $BACKUP_TAR rm -r $TMP_DIR $BACKUP_TAR
Скрипт создает отдельный файл дампа для каждой базы MySQL, за исключением служебных данных, которые прописаны в исключения.