Page 1 of 1

[Tutorial] [RU] Backup: Dropbox вместо FTP

Posted: Thu May 02, 2013 8:01 pm
by Sattva
Приветствую трудящееся и отдыхающее сообщество преданных VESTA!

На дворе майские праздники, и хотя настоящие IT-шники живут своей трудовой жизнью 24/7/365, поздравляю всех с мега-выходными! В Украине они с 1 по 13 мая!

Тех, кто не отправил ум в отпуск хотелось бы спросить: а не думали ли бекапы заливать в Dropbox?

Уже хотел организовать ударную группу по написанию плагина для VESTA с целью делать backup в Dropbox, но сделал все руками, не напрягая других.

Для кого НЕ интересна эта статья?

Если у вас есть лишний FTP и
Если вас не интересует удаление backup'ов вручную,
тогда это точно вам не понадобится.

Мне же пока не хотелось учиться удалять backup'ы автоматом и так же нет лишнего FTP.
В этом случае Dropbox - отличное решение!

Пара слов о Dropbox
Русскоязычный интрефейс у этого сервиса и его клиентов появился только в начале 2013 года
и, полагаю, это сдерживало его распространение на просторах рунета.

Что есть Dropbox?
Dropbox-server подобен ftp-серверу, Dropbox-client подобен ftp-клиенту.
Разница лишь в том, что
- Dropbox-server бесплатно предоставляет от 2 до 18 ГБ места для ваших файлов
- Dropbox-client автоматически загружает файлы на сервер, скачивает их на локальную машину и проводит удаление. Одним словом, полная синхронизация и полностью автономно мелким (по размерам интерфейса) клиентом.

Это удобно для:
- расшаривания папок, подобно тому, как это делается в LAN,
- резервного копирования,
- синхронизации файлов на разных платформах: Windows, Android, MacOS, iPhone, Linux,
- синхронизация фоток мобилки с Dropbox по WiFi. Тут спец фокусы есть, потому отдельным пунктом.

На этом описание сервиса закончим.
https://www.dropbox.com/home
https://www.dropbox.com/release_notes

Re: Dropbox вместо FTP для backup

Posted: Thu May 02, 2013 8:36 pm
by Sattva
Итак, вы определились с тем, что Dropbox'y быть не только на вашем мобильном device, но и на production сервере.
По сему ставим Dropbox!

Сразу даю ссылку для регистрации, если у вас еще нет ни одного аккаунта в Dropbox^
http://db.tt/qSbnHK8r
или эта
http://db.tt/uh1cKqVA

Материал с:
http://unix-tut.blogspot.com/2012/02/dr ... entos.html
08 февр. 2012 г.

Dropbox console for CentOS
How to install dropbox on your linux server (console mode)

1. Download
http://www.getdropbox.com/download?plat=lnx.x86
or
http://www.getdropbox.com/download?plat=lnx.x86_64

2. Extract tar.gz file downloaded and leave in root home folder.
Вовсе не обязательно так делать. Ставьте его в той папке, где положено.
Если его не перенести, то бынарные файлы и папка Dropbox для синхронизации развернется в текущей директории.
Оно вам надо?

3. Run

Code: Select all

~/.dropbox-dist/dropboxd
to get Dropbox to provide a URL to go to in your browser to link this computer to your Dropbox account.
Нет!!!

0. Создайте для реферальную ссылку для нового акканта. Это даст вам +500 МБ к текущему счету в Dropbox.
Залогинтесь в web-панель Dropbox с текущими данными и затем сюда:
https://www.dropbox.com/referrals
Если у кого-то вообще нет счетов, то вот вам моя ссылка:
http://db.tt/qSbnHK8r
или вот
http://db.tt/uh1cKqVA

Этим вы поблагодарите за статью. ;-)

a) Теперь выйдите, на всякий случай, из локального клиента Dropbox, если он у вас имеется.

b) Далее по ссылке сделайте отдельный account в который мы будем складывать backup'ы нашего сервера.

c) Залогиньтесь в новый account через web-панель.

d) Только теперь запускайте /.dropbox-dist/dropboxd из той папки, куда вы его распаковали. ;-)
Если это не сделать, ваш Dropbox сервера прилинкуется к аккаунту, в который вы уже могли быть залогинены!

У меня именно так и получилось. :-(
Пришлось отлинковывать Dropbox сервера от аккаунта домашнего компа!
Если это и ваша ситуация, то закройте снова-таки локальный клиент Dropbbox.
Остановите dropboxd по Ctrl-C на сервере.
Залогиньтесь через Web в прилинковынный аккаунт и далее:
сверху справа клик
на ваше имя / Settings / Вкладка Security / В разделе My devices отлинкуйте лишнее устройство.
Теперь снова логинемся в нужный аккант через web.
Еще раз стартуем /.dropbox-dist/dropboxd
и прилинковываем новый аккаунт.
Фух! полдела сделано!
Мелочь, но я промучился минут 30 наверное, пока понял, что к чему.

4. After visiting the URL in a browser to which you've logged into dropbox.com, you'll see message smth like: Successfully linked etc.
Забавная инструкция: "to which you've logged into dropbox.com" так вот, я не был залогинен в нужный аккаунт и ломал потом голову как отлинковаться.

5. If you cannot quit the app by ctrl+c , open another a shell, get the PID by running

Code: Select all

$ ps -ef|grep dropbox
Полезный совет по поиску идентификатора нужного процесса. Мне, как новичку, было очень полезно.
and kill PID. The output on your other shell should say: Terminated.

6. Now you can run Dropbox in the background, enter:

Code: Select all

$ /root/.dropbox-dist/dropboxd &
Следует проверить работу Dropbox.
В папке Dropbox (она создается в текущей папке, там же, где и инсталяшка) создайте текстовый или другой файлик и проверьте, синхронизирует ли он его с Web-панелью.
Если да, значит Dropbox работает нормально.

7. When that's working, we'll want to install Dropbox as a server. To do so:
Да, теперь будем ставить его как сервис.
Только редактор nano как-то больше подходит для новичков, чем vi.

Code: Select all

$ vi /etc/init.d/dropbox
and paste the following into that file:

Code: Select all

# chkconfig: 345 85 15
# description: Startup script for dropbox daemon
# 
# processname: dropboxd
# pidfile: /var/run/dropbox.pid
# 
# Source function library.

. /etc/rc.d/init.d/functions

lockfile=${LOCKFILE-/var/lock/subsys/dropbox}

RETVAL=0

start() {
        echo -n $"Starting $prog"
            daemon --user root /bin/sh -c "/root/.dropbox-dist/dropboxd &"
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
         return $RETVAL
}

stop() {
        echo -n $"Stopping $prog"
        killproc /root/.dropbox-dist/dropbox
        RETVAL=$?
         echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

# See how we were called.

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
   restart)
        stop
        start
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart}"
        RETVAL=3
esac

exit $RETVAL
Листинг рабочий. Проверено.

8. And finally:

Code: Select all

$ chmod +x /etc/init.d/dropbox
$ chkconfig --add dropbox
$ chmod 755 /etc/init.d/dropbox
Dropbox установлен. Ура!

Теперь создаем папку, например

Code: Select all

/root/Dropbox/stay_vesta
и зайдя в web-панель, расшариваем ее для нашего первого аккаунта Dropbox.
Он по идее должен быть либо на нашем рабочем компе, либо на телефоне.
Чтобы расшарить через web-панель, нужно зайти в расшариваемую папку
и выбрать сверху, рядом с полем для поиска Search Dropbox третью слева
папку с радугой "Share this folder".
Далее следует отправить приглашение в эту папку для нашего парвого аккаунта
на e-mail, который к нему привязан.

Можно обойтись и одним аккаунтом Dropbox, тогда все файлы Dropboxa
будут продублированы на сервере. Едва ли это правильно.

Re: Dropbox вместо FTP для backup

Posted: Thu May 02, 2013 8:57 pm
by Sattva
Backup scripts

Как уже упоминал, удалять файлы я пока привык вручную, потому этой задаче внимание не уделяю. Возможно, те, кто уже освоил тему подскажут, как сделать это лучше. Я же сосредоточился пока на решении такой задачи:
Ежедневно нужно выгрузить все базы данных.
Каждую в отдельный файл, упакованный gzip.
Поместить архивы баз данных нужно в папку с текущей датой.

Это удобно для ручного удаления - каждый день я сам решу как часто
их удалять и сколько копий оставить. Благо все базы в архивах
составляют всего 7 МБ. :-) Месяц можно не обращать внимание на них.
Потом вычистить.

Что касается копий файлов, которые формируются кроном:

Code: Select all

sudo /usr/local/vesta/bin/v-backup-users
то мне достаточно 1 архивирование всех сайтов раз в неделю.
И как бы там не шла ротация, в Dropbox загрузим только последние архивы
каждого из сайтов. А сложим их в папку с названием, которое соответствует дате.
Снова-таки при удалении вручную это будет очень удобно.

daily_mysql_backup.sh - ежедневное копирование базы в Dropbox из MySQL.
weekly_fl_backup.sh - еженедельное копирование архивов в Dropbox из /home/backup

daily_mysql_backup.sh
Основу брал здесь:
http://bash.cyberciti.biz/backup/backup ... -server-2/
и допиливал. :-)

Code: Select all

#!/bin/bash

# Shell Script To Backup MySql Database Server
# --------------------------------------------
# Almost entire script was taken here:
# http://bash.cyberciti.biz/backup/backup-mysql-database-server-2/
# Some minor commands where modified: added additional folder with DATE name.
# Added some databases not to Backup them: mysql, roundcube, etc.
# Modified by Alexey Latiy, 2013-05-02.
# Used and tested on CentOS 6.3

MyUSER="root"      # USERNAME
MyPASS="*****"   # PASSWORD
MyHOST="localhost" # Hostname

# Main directory
DEST="/root/Dropbox/stay_vesta/mysql"

# Daily directory where backup will be stored
DayDir="$(date +"%d-%m-%Y")"
MBD="$DEST/$DayDir"

# Get hostname
#HOST="$(hostname)"
HOST="st"

# DO NOT BACKUP these databases
IGGY="information_schema
mysql
roundcube"

# Linux bin paths, change this if it can not be autodetected via which command
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"

# Get data in dd-mm-yyyy_hh-mm format
NOW="$(date +"%d-%m-%Y_%H-%M")"

# File to store current backup file
FILE=""
# Store list of databases
DBS=""

[ ! -d $MBD ] && mkdir -p $MBD || :

# Only root can access it!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST

# Get all database list first
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"

for db in $DBS
do
    skipdb=-1
    if [ "$IGGY" != "" ];
    then
        for i in $IGGY
        do
            [ "$db" == "$i" ] && skipdb=1 || :
        done
    fi

    #FILE="$MBD/$db.$HOST.$NOW.gz"
    #echo "Created file: $FILE"
    if [ "$skipdb" == "-1" ] ; then
        FILE="$MBD/$db.$HOST.$NOW.gz"
        # do all inone job in pipe,
        # connect to mysql using mysqldump for select mysql database
        # and pipe it out to gz file in backup dir :)
        $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
        echo "Created file: $FILE"
    fi
done

Похожим образом копируем файлы бекапов:
weekly_fl_backup.sh

Code: Select all

#!/bin/bash

# Main directory
DEST="/root/Dropbox/stay_vesta/users"

# Daily directory where backup will be stored
DayDir="$(date +"%d-%m-%Y")"
MBD="$DEST/$DayDir"

# Linux bin paths, change this if it can not be autodetected via which command
RSYNC="$(which rsync)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"

# Get data in dd-mm-yyyy_hh-mm format
NOW="$(date +"%d-%m-%Y_%H-%M")"

# File to store current backup file
FILE=""
# Store list of databases
DBS=""

[ ! -d $MBD ] && mkdir -p $MBD || :

# Only root can access it!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST

$RSYNC /home/backup/*.$(date '+%Y-%m-%d').* $MBD -v
echo "Copied to $MBD"
Стоит отметить, что если папки не хватает, то она создастся благодаря этой замудрой штуковине

Code: Select all

[ ! -d $MBD ] && mkdir -p $MBD || :
Для меня $MBD и mkdir понятны, а все остальное пока тяжко для ума отвыкшего за 15 лет от DOS 5.0, но сохранившего любовь к работе с командной строки. К слову сказать, лишь пару месяцев как открыл для себя Linux в лице CentOS. Обрадовался, что навык работы с консоли все еще актуален.


Так же интересна эта штуковина:

Code: Select all

RSYNC="$(which rsync)"
$RSYNC /home/backup/*.$(date '+%Y-%m-%d').* $MBD -v
В первой строке получаем rsync вместе с путем (местом обитания).
Во второй - из папки /home/backup/ куда VESTA складирует архивы,
берем архивы за сегодня
/home/backup/*.$(date '+%Y-%m-%d').*
и отправляем их в папку, названием которой является текущая дата,
созданная в $MBD.

Re: Dropbox вместо FTP для backup

Posted: Thu May 02, 2013 9:24 pm
by Sattva
Его величество Cron

Теперь нужно прицепить оба скрипта к крону.

В CentOS 6.3 по пути

Code: Select all

/etc/cron.d
можно положить файл в формате Cron-записи и содержимое файла по идее исполнится.
По идее потому, что вчера на войну с кроном для Cacti (система мониторинга "Кактус")
ушло часа 2. Перезагрузил весь сервер и только тогда стал продвигаться по логам.
А так даже логи не писались! Промучился жутко, но сегодня за 20 минут поборол Крон. ;-)

Если вы тоже будете мучиться и при этом в
/var/log
не увидите файл cron с последними попытками запуска крона, лучше перезагрузите сервер.
Мне это помогло. Перезагрузка службы

Code: Select all

serivce crond restart
не помогала!

Так вот, создаем в

Code: Select all

/etc/cron.d
файлы:

mysql_cron

Code: Select all

#[email protected]
#02 21 * * * root /bin/sh /root/Dropbox/stay_vesta/daily_mysql_backup.sh >> /root/Dropbox/stay_vesta/mysql_backup.log  2>&1
00 05 * * 5 root /bin/sh /root/Dropbox/stay_vesta/daily_mysql_backup.sh > /dev/null 2>&1
Первые две строки для отладки - пишет отдельный лог и шлет почтовый привет.
Во третьей строке 00 05 * * 5 запускать в 5 утра в 5-тый день (Пт).

users_cron

Code: Select all

#[email protected]
#00 02 * * * root /bin/sh /root/Dropbox/stay_vesta/weekly_fl_backup.sh >> /root/Dropbox/stay_vesta/weekly_fl_backup.log  2>&1
05 05 * * 5 root /bin/sh /root/Dropbox/stay_vesta/weekly_fl_backup.sh > /dev/null 2>&1
Права у обоих: -rw-r--r--
Не знаю как это в числовом значении, похоже на 644.
Права root:root.

И не забудьте перезапустить cron:

Code: Select all

serivce crond restart
Теперь перезагрузите сервер и проверьте работу всей системы.
Особенно DropBox.
К слову сказать расписание такое:
По Пт в 4:00 запускаем Cron VESTA:

Code: Select all

sudo /usr/local/vesta/bin/v-backup-users
00 04 * * 5
5:00 каждый день - пишем базы в файлы и кладем в Dropbox.
5:05 по Пт последние архивы кладем в Dropbox при помощи

Code: Select all

RSYNC="$(which rsync)"
$RSYNC /home/backup/*.$(date '+%Y-%m-%d').* $MBD -v
Вот такое решение резервного копирования, вместо
просьб о создании модуля VESTA. и нытья: ДАЙТЕ! СДЕЛАЙТЕ!
;-)

Возможно, кому-то будет полезно.
Как минимум сам буду знать, где подсмотреть, если вдруг сервер ляжет. ;-)
А если еще и пригодится кому-то, вообще супер.

Удачи и надежного создания backup'ов!

Sattva

Re: Backup: Dropbox вместо FTP

Posted: Wed Sep 04, 2013 9:29 pm
by cka3o4h1k
А еще можно при загрузке монтировать WebDav, например Яндекс.Диска (10 GB)

Code: Select all

sudo mount -t davfs https://webdav.yandex.ru:443/backups  /home/admin/web/default.domain/public_html/yd
предварительно установив davfs из RPMforge

Далее уже через cron забрасывать в ту папку что нужно.
Кстати удобно как расширения дискового пространства, для крупных файлов

P.S.: еще есть BTSync для загрузки бекапов и синхронизации

Re: Backup: Dropbox вместо FTP

Posted: Sat Apr 19, 2014 8:09 am
by watchopolis
can anyone translate this ? :)