Supload

Установка

Supload (GitHub) — утилита, созданная для упрощения загрузки файлов в хранилище Selectel.

Возможности утилиты:

  • загрузка локального файла в хранилище;
  • рекурсивная загрузка всех файлов в указанной папке и подпапках;
  • гарантия загрузки файлов с помощью сверки контрольных сумм;
  • загрузка только изменившихся и новых файлов;
  • настройка авто-удаления файлов в хранилище.

Если у вас есть сайт средних размеров с базой данных MySQL, которую вы хотите регулярно бекапить, то достаточно скачать два специально подготовленных скрипта и указать необходимые настройки.

Для установки утилиты выполните команду:

wget https://raw.github.com/selectel/supload/master/supload.sh
mv supload.sh /usr/local/bin/supload
chmod +x /usr/local/bin/supload

Выполнение бэкапа

Для выполнения бэкапа скачайте и настройте скрипт:

wget https://raw.github.com/selectel/storage/master/utils/sbackup.sh
chmod +x sbackup.sh

Откройте скрипт «sbackup.sh» с помощью текстового редактора и поменяйте следующие значения:

  • SS_USER — пользователь для авторизации в хранилище (тот дополнительный пользователь который был создан нами ранее);
  • SS_PWD — пароль для пользователя;
  • SS_CONTAINER — имя контейнера, в который будут загружаться бэкапы;
  • TARGET_DIR — путь, где расположены файлы сайта;
  • BACKUP_DIR — путь на сервере куда временно будут складываться бэкапы;
  • EXCLUDE_LIST — список файлов которые не нужно включать в архив;
  • DB_NAME — имя базы данных MySQL, чтобы бэкапить все имеющиеся базы укажите к качестве значения ALL;
  • DB_USER и DB_PWD — пользователь и пароль для подключения к MySQL;
  • EMAIL — email куда будет присылаться отчет о выполнении бекапа (можно указать пустым, чтобы отключить отчет);
  • EMAIL_ONLY_ON_ERROR — если указать yes, то отчет будет отправлен только в случае возникновения проблем/ошибок;
  • DELETE_BACKUPS_AFTER_UPLOAD — если указать yes, то созданные файлы бэкапов будут удалены из временной папки после успешной загрузки в хранилище;
  • STORAGE_EXPIRE — опция позволяет указать сколько дней файл бэкапа должен храниться в хранилище, после чего будет автоматически удален.

Для проверки и выполнения бэкапа запустите скрипт вручную:

./sbackup.sh

Результат выполнения будет выведен в консоль.

Настройте периодичность выполнения бэкапа с помощью cron. Для этого просто переместите скрипт в специальную директорию:

mv sbackup.sh /etc/cron.daily/50_sbackup

После этого cron будет автоматически запускать скрипт архивирования раз в сутки.

Получение резервной копии данных из приватного контейнера

Для получения резервной копии данных из приватного контейнера можно скачать сам файл, используя файловый менеджер Cyberduck и специальную ссылку, не меняя тип контейнера на публичный. После загрузки файла с бэкапом на сервер нужно выполнить распаковку данных:

mkdir backup_files
 # распаковка файлов из архива в папку backup_files
tar xvf backupname_2013-01-26_08h40m.tar.bz2 -C backup_files/
 # восстановление БД (эта операция может затереть текущее состояние базы данных)
bzcat mysql_backupname_ALL_2013-01-26_08h40m.bz2 | mysql

Загрузка файла в контейнер

Для загрузки одного локального файла «my.doc» в контейнер «files» хранилища (контейнер должен быть создан заранее) введите команду:

supload -u USERNAME -k USERKEY files my.doc

Можно загружать файлы в конкретную папку внутри контейнера:

supload -u USERNAME -k USERKEY files/docs/ my.doc

При этом перед загрузкой файла вычисляется его контрольная сумма (MD5) и загрузка считается успешной только при совпадении контрольных сумм.

Для загрузки всех файлов из определенной папки нужно использовать опцию -r:

supload -u USERNAME -k USERKEY -r files local/docs/

Для каждого загружаемого файла будет выполнен контроль по контрольной сумме.

Сверка контрольных сумм дает еще одну дополнительную возможность — если запустить утилиту повторно, то есть данные уже есть в хранилище и контрольные суммы совпадают, загрузка файла пропускается. Это позволяет загружать только новые или изменившиеся файлы.

Удаление файлов

Хранилище поддерживает автоматическое удаление файлов, «supload» позволяет указать сколько времени нужно хранить файл:

supload -u USERNAME -k USERKEY -d 7d files my.doc

Опция -d указывает после какого времени в минутах (m), часах (h) или днях (d) хранилище автоматически выполнит удаление файла. Эта опция действует также при рекурсивной загрузке файлов. Если файл уже был загружен, то повторный запуск команды не меняет ранее установленный (или вообще не заданный) срок хранения файла.

Допустим ваша система архивирования складывает файлы с бэкапом в папку /var/backups/site/ и контролирует удаление файлов через определенный период времени. Можно настроить периодический запуск «supload» для загрузки всех файлов с ограничением времени хранения, например:

supload -u USERNAME -k USERKEY -d 31d -r backups /var/backups/sites

Тогда каждый новый загруженный файл бэкапа будет храниться в хранилище 31 день, а у ранее загруженных — постепенно будет уменьшаться срок их хранения и они будут автоматически удалены так же через 31 дней с момента их загрузки. Чтобы такая схема правильно работала нужно, чтобы у вашей системы архивирования срок удаления файлов был меньше чем указанный в «supload», иначе старые файлы могут загрузиться заново.