Как стать автором
Обновить

Резервное копирование Rails проектов без затей

Время на прочтение3 мин
Количество просмотров4.5K
Как известно, люди делятся на тех кто еще не делает резервных копий, тех кто уже делает, и тех кто уже делает и проверяет возможность восстановления

К счастью, 20 минут назад, когда кривой админ рецепт Capistrano напрочь снес на «боевом» сервере каталог с загруженными картинками из статей юзеров, я уже относился к категории делающих бэкапы. Вот, заодно и проверил.

А делаем мы резервные копии через gem backup


У нас на облачном хостинге на нескольких серверах сейчас крутится порядка 20 пользовательских сайтов, которые мы же и разработали плюс одно маленькое, но гордое (и тяжелое) приложение с VoIP, RTMP, J2ME и гейшами и веб-админкой. Когда несколько месяцев назад админ при обновлении затер конфиги Asterisk PBX и потом с трясущимся подбородком и синими губами восстанавливал их из запущенного демона, стало ясно — без бэкапов дальше слишком опасно. Но делать бэкапы «в лоб» для 20 приложений, каждое из которых использовало свою базу в MySQL со своими логинами и паролями было слишком неинтересно и скучно. Это был бы длинный-длинный баш скрипт, на который бы сразу же после успешного запуска забили бы пришлось бы тратить много времени чтобы поддерживать актуальность этого скрипта.

Вот тут нам и пригодился гем backup.

Гем backup делает вот что:
  • читает свой конфиг
  • дампит указанные базы (поддерживаются разные СУБД) во временный каталог
  • тарит указанные каталоги во временный каталог
  • жмет все
  • шифрует все
  • кладет на удаленный сервер по FTP, SCP, RSync и другие
  • поддерживает цикличность в месте хранения
  • пишет мне письмо


Надо всего лишь сделать три простые вещи:

1. Поставить гем (gem install backup)

2. Написать конфиг (по умолчанию исполняемый файл гема ищет конфиг в каталоге ~/Backup/config.rb, можно это изменить дополнительными опциями). Пример конфига для одного из наших сайтов:

Backup::Model.new(:kodepru, 'kodepru_backup') do

archive :my_archive do |archive|
archive.add '/path/to/dir/www.kodep.ru'
end

database MySQL do |db|
db.name = "wwwkodepru_production"
db.username = "user"
db.password = "password"
db.host = "mysql.local"
db.port = 3306
db.additional_options = ['--quick', '--single-transaction']
end

store_with SCP do |server|
server.username = 'backup'
server.password = 'verydifficultpassword'
server.ip = 'backup.local'
server.port = 22
server.path = '~/www.kodep.ru/'
server.keep = 14
end

compress_with Gzip do |compression|
compression.best = true
compression.fast = false
end

notify_by Mail do |mail|
mail.on_success = true
mail.on_failure = true

mail.from = 'backup@kodep.ru'
mail.to = 'sysadmin@kodep.ru'
mail.address = 'smtp.kodep.ru'
mail.port = 25
mail.domain = 'kodep.ru'
mail.user_name = 'backup@kodep.ru'
mail.password = 'password_ot_pochty'
mail.authentication = 'plain'
mail.enable_starttls_auto = true
end

end


Этот конфиг говорит гему, что надо взять дамп базы wwwkodepru_production, сдампить во временный каталог, взять каталог, где лежит сайт, все это заархивировать, положить через SCP на сервер бэкапов, убедившись что хранится не более 14 последних бэкапов и отправить радостное сообщение админу.

3. Записать в крон запуск команды backup perform --trigger kodepru скажем в полночь.



PROFIT!!!

Естественно, мы не пишем этот конфиг суровой админской рукой! Есть специальная панелька, написанная на коленке на рельсах.

Кстати, что-то говорит мне что не только Rails приложения состоят из каталога с кодом и базы…

Надеюсь, кому-то будет интересно, а я, пожалуй, буду продолжать писать про наши нехитрые приемчики.
Теги:
Хабы:
Всего голосов 28: ↑27 и ↓1+26
Комментарии16

Публикации

Истории

Работа

Ruby on Rails
6 вакансий

Ближайшие события