From 86905537c3956e9e1f3d107091835aec45db8ec1 Mon Sep 17 00:00:00 2001 From: msfernandes Date: Thu, 7 May 2015 11:34:08 -0300 Subject: [PATCH] Add rake backup and restore tasks --- .gitignore | 1 + Rakefile | 28 ++++++++++++++++++++++++++++ utils/migration/backup_integration.sh | 28 ++++++++++++++++++++++++++++ utils/migration/backup_social.sh | 15 +++++++++++++++ utils/migration/restore_integration.sh | 25 +++++++++++++++++++++++++ 5 files changed, 97 insertions(+), 0 deletions(-) create mode 100755 utils/migration/backup_integration.sh create mode 100755 utils/migration/backup_social.sh create mode 100755 utils/migration/restore_integration.sh diff --git a/.gitignore b/.gitignore index e6c7130..36ef895 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /local.rake *.swp *.swo +/backups diff --git a/Rakefile b/Rakefile index b0c6f7e..80807b8 100644 --- a/Rakefile +++ b/Rakefile @@ -47,6 +47,34 @@ file 'config/local/ssh_config' => ['nodes.yaml', 'config/local/ips.yaml', 'ssh_c puts 'ERB %s' % t.name end +task :backup => ssh_config_file do + #cleanup before + sh 'ssh', '-F', ssh_config_file, 'integration', 'sudo', 'rm -rf /tmp/backups' + sh 'ssh', '-F', ssh_config_file, 'social', 'sudo', 'rm -rf /tmp/backups' + sh 'mkdir', '-p', 'backups' + #integration + sh 'scp', '-F', ssh_config_file, 'utils/migration/backup_integration.sh', 'integration:/tmp' + sh 'ssh', '-F', ssh_config_file, 'integration', 'sudo', '/tmp/backup_integration.sh' + sh 'scp', '-F', ssh_config_file, 'integration:/tmp/backups/*', 'backups/' + sh 'ssh', '-F', ssh_config_file, 'integration', 'sudo', 'rm -rf /tmp/backups' + #social + sh 'scp', '-F', ssh_config_file, 'utils/migration/backup_social.sh', 'social:/tmp' + sh 'ssh', '-F', ssh_config_file, 'social', 'sudo', '/tmp/backup_social.sh' + sh 'scp', '-F', ssh_config_file, 'social:/tmp/backups/*', 'backups/' + sh 'ssh', '-F', ssh_config_file, 'social', 'sudo', 'rm -rf /tmp/backups' +end + +task :restore => ssh_config_file do + #integration + sh 'scp', '-r', '-F', ssh_config_file, 'backups', 'integration:/tmp' + sh 'scp', '-F', ssh_config_file, 'utils/migration/restore_integration.sh', 'integration:/tmp' + sh 'ssh', '-F', ssh_config_file, 'integration', 'sudo', '/tmp/restore_integration.sh' + #social + sh 'scp', '-r', '-F', ssh_config_file, 'backups', 'social:/tmp' + sh 'scp', '-F', ssh_config_file, 'utils/migration/restore_social.sh', 'social:/tmp' + sh 'ssh', '-F', ssh_config_file, 'social', 'sudo', '/tmp/restore_social.sh' +end + task :bootstrap_common => 'config/local/ssh_config' unless ENV['nodeps'] diff --git a/utils/migration/backup_integration.sh b/utils/migration/backup_integration.sh new file mode 100755 index 0000000..b616bb1 --- /dev/null +++ b/utils/migration/backup_integration.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +echo 'I: starting integration backup...' + +echo 'I: Creating /tmp/backups/ on integration' +mkdir -p /tmp/backups/ + +# Colab Backup +echo 'I: dumping colab data' +colab-admin dumpdata > /tmp/backups/colab_dump.json + +# GitLab Backup +cd /usr/lib/gitlab +echo 'I: creating gitlab backup' +sudo -u git bundle exec rake gitlab:backup:create RAILS_ENV=production > /dev/null +# TODO fix regular expression +mv /var/lib/gitlab/backups/*_gitlab_backup.tar /tmp/backups + +echo 'I: creating gitlab shell ssh backup' +tar -czf /tmp/backups/gitlab_shell_ssh.tar.gz /var/lib/gitlab-shell/.ssh/ 2> /dev/null + +# Mailman Backup +cd /var/lib/mailman +echo 'I: creating mailman backups' +tar -czf /tmp/backups/mailman_backup.tar.gz lists/ data/ archives/ + +echo 'I: integration backup done.' + diff --git a/utils/migration/backup_social.sh b/utils/migration/backup_social.sh new file mode 100755 index 0000000..d84b40b --- /dev/null +++ b/utils/migration/backup_social.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +echo 'I: starting social backup...' + +echo 'I: Creating /tmp/backups/ on social' +mkdir -p /tmp/backups/ + +#Noosfero backup +cd /usr/lib/noosfero +echo 'I: creating Noosfero backup' +RAILS_ENV=production sudo -u noosfero bundle exec rake backup 2> /dev/null 1> /dev/null +# TODO fix regular expression +mv tmp/backup/*.tar.gz /tmp/backups/noosfero_backup.tar.gz + +echo 'I: social backup done.' diff --git a/utils/migration/restore_integration.sh b/utils/migration/restore_integration.sh new file mode 100755 index 0000000..3849707 --- /dev/null +++ b/utils/migration/restore_integration.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +echo 'Starting restore on integration...' +# Colab Restore +echo 'restoring colab...' +colab-admin loaddata /tmp/backups/colab_dump.json > /dev/null +echo 'done.' + +# Gitlab Restore +echo 'restoring gitlab...' +echo 'cleaning gitlab backups directory' +sudo rm -rf /var/lib/gitlab/backups/* +#TODO: fix wildcard +mv /tmp/backups/*_gitlab_backup.tar /var/lib/gitlab/backups/ +cd /usr/lib/gitlab +sudo -u git bundle exec rake gitlab:backup:restore RAILS_ENV=production force=yes 1> /dev/null 2>/dev/null +echo 'done.' + +# Mailman Restore +echo 'restoring mailman...' +mv /tmp/backups/mailman_backup.tar.gz /var/lib/mailman/ +cd /var/lib/mailman +tar -vxzf mailman_backup.tar.gz 1> /dev/null 2> /dev/null + +echo 'done.' -- libgit2 0.21.2