VestaCP и бэкапы на Яндекс диск
Имея 200Gb+ места на Яндекс диске я подумал а не прикрутить ли бэкапы на него со своего хостинга и после не долгих шаманств это получилось…
В этой статье я раскажу как это сделать…
Для начала надо создать папку auto_bk в корне диска vds.
Также создал ссылку /backup -> /home/backup для удобства…
Далее идем на https://oauth.yandex.ru/client/new создаем свое приложение «Яндекс.Диск REST API»и даем разрешение «Доступ на запись всего Диска«. Вписываем название приложение и нажимаем на ссылку «Подставить URL для разработки«. Жмем сохранить и видем следующию картинку:
На Яндекс диске создаем папку backup.
На VDS создаем файл /auto_bk/fullsend.sh:
vi /auto_bk/fullsend.sh
и вставляем в него код:
#!/bin/bash
for myfile in /backup/*.tar
do
/auto_bk/yd-api-backuper.sh -f $myfile
done
далее создаем файл /auto_bk/yd-api-backuper.sh
vi /auto_bk/yd-api-backuper.sh
и вставляем в него код (источник):
#!/bin/bash
#
# Author : Zharenkov I.V.
# License : GNU/GPL2
# Date : 2014-07-17
# Requirements : curl
# Version : 0.2
## ———- SETTINGS ————-
# Yandex.Disk token
token=’***********************************’# Target directory. Be sure, that the directory exists.
backupDir=’backup’# Logfile name
logFile=yd-api-backuper.log# Enable GPG encryption
GPG=false# GPG encryption UID
GPGENCRYPTUID=»# ———- FUNCTIONS ————
function usage
{
cat <<EOFUSAGE: $0 OPTIONS
OPTIONS:
-h Show this message
-f <filename> Specify filename for upload
-e Enable GPG encryption
-g <uid> Specify GPG UIDEOF
}function gpgEncrypt()
{
gpg -e -r $GPGENCRYPTUID $FILENAME
}function logger()
{
echo «[«`date «+%Y-%m-%d %H:%M:%S»`»] File $FILENAME: $1″ >> $logFile
}function parseJson()
{
local output
regex=»(\»$1\»:[\»]?)([^\»,\}]+)([\»]?)»
[[ $2 =~ $regex ]] && output=${BASH_REMATCH[2]}
echo $output
}function checkError()
{
echo $(parseJson ‘error’ «$1»)
}function getUploadUrl()
{
local output
local json_out
local json_error
json_out=`curl -s -H «Authorization: OAuth $token» https://cloud-api.yandex.net:443/v1/disk/resources/upload/?path=$backupDir/$backupName&overwrite=true`
json_error=$(checkError «$json_out»)
if [[ $json_error != » ]];
then
logger «Yandex Disk error: $json_error»
exit 1
else
output=$(parseJson ‘href’ $json_out)
echo $output
fi
}function uploadFile
{
local json_out
local uploadUrl
local json_error
uploadUrl=$(getUploadUrl)
if [[ $uploadUrl != » ]];
then
json_out=`curl -s -T $1 -H «Authorization: OAuth $token» $uploadUrl`
json_error=$(checkError «$json_out»)
if [[ $json_error != » ]];
then
logger «Yandex Disk error: $json_error»
else
logger «Copying file to Yandex Disk success»
fi
else
echo ‘Some errors occured. Check log file for detail’
exit 1
fi
}function preUpload()
{
if [ $GPG == true ];
then
gpgEncrypt
FILENAME=$FILENAME.gpg
fibackupName=`date «+%Y%m%d-%H%M»`_$(basename $FILENAME)
}function postUpload()
{
if [ $GPG == true ];
then
rm $FILENAME
fi
}# ————— OPTIONS ————-
while getopts «:f:g:he» opt; do
case $opt in
h)
usage
exit 1
;;
f)
FILENAME=$OPTARGif [ ! -f $FILENAME ];
then
echo «File not found: $FILENAME»
logger «File not found»
exit 1
fi
;;
g)
GPGENCRYPTUID=$OPTARG
;;
e)
GPG=true
;;
\?)
echo «Invalid option: -$OPTARG. $0 -h for help» >&2
exit 1
;;
:)
echo «Option -$OPTARG requires an argument.» >&2
exit 1
;;
esac
done# ————— MAIN —————-
if [[ -z $FILENAME ]]
then
usage
exit 1
fipreUpload
uploadFile $FILENAME
postUpload
Далее делаем их исполняемыми:
chmod 777 /auto_bk/*.sh
далее идем в раздел cron и создаем задание:
sudo /auto_bk/fullsend.sh
Далее добавляем в настроки sudo нашу команду
vi /etc/sudoers.d/admin
и в конец файла дописываем:
admin ALL=NOPASSWD:/auto_bk/fullsend.sh
Все готово. Давайте посмотрим что Мы имем на выходе:
- Авто бейкап на сервера Yandex Диск
- Авто проверка всех архивов антивирусом Dr.Web
- быстрый доступ к бейкапам и удобное отображение их.
Июль 28, 2015 Вторник at 10:13 дп