diff options
author | Lars Wirzenius <lars.wirzenius@codethink.co.uk> | 2014-07-24 16:46:33 +0000 |
---|---|---|
committer | Lars Wirzenius <lars.wirzenius@codethink.co.uk> | 2014-07-24 16:46:33 +0000 |
commit | 56308755c59d8cde87526016bbdec885627e2169 (patch) | |
tree | 6642b60a740e47ebb284a27104cb84c9e4709570 /gitlab-server/usr/share/gitlab-install/gitlab-remote-restore.sh | |
parent | 53e48f5777aa0575c0d0935d9211d49455594cec (diff) | |
parent | c661f1349f44120b3cfcfc718ebb44b72f299cb8 (diff) | |
download | definitions-56308755c59d8cde87526016bbdec885627e2169.tar.gz |
Merge remote-tracking branch 'origin/baserock/liw/gitlab-repoless-backups'
Reviewed-by: Richard Maw
Reviewed-by: Adam Coldrick
Diffstat (limited to 'gitlab-server/usr/share/gitlab-install/gitlab-remote-restore.sh')
-rw-r--r-- | gitlab-server/usr/share/gitlab-install/gitlab-remote-restore.sh | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/gitlab-server/usr/share/gitlab-install/gitlab-remote-restore.sh b/gitlab-server/usr/share/gitlab-install/gitlab-remote-restore.sh new file mode 100644 index 00000000..78ff691a --- /dev/null +++ b/gitlab-server/usr/share/gitlab-install/gitlab-remote-restore.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# +# Restore a Baserock Gitlab system backup to a fresh instance. +# +# Usage: restore.sh ADDR +# where ADDR is the address (domain name, IP address) of the instance. +# +# What this does is a) stop services b) copy files over c) reset the Postgres +# databases. + +set -eux + +ADDR="$1" + +restore() +{ + rsync -ahHS --delete "$2" "root@$ADDR:$1" +} + +# Stop services so we don't modify files and databases from underneath +# them, and also so they don't modify things while restore is happening. + +ssh "root@$ADDR" systemctl stop \ + crond gitlab-backup.service \ + gitlab-ci-sidekiq.service \ + gitlab-ci-unicorn.service \ + gitlab-sidekiq.service \ + gitlab-unicorn.service \ + gitlab.target \ + gitlab-backup.timer \ + nginx.service \ + redis.service + +# Create the directory where postgres dump files go. + +ssh "root@$ADDR" install -d -o postgres -g postgres /home/postgres/dumps + +# Restore the various files. + +restore /home/postgres/dumps/. dumps/. +restore /home/git/repositories/. repositories/. +restore /home/git/gitlab/public/uploads/. uploads/. + +# And thier uid/gid +ssh "root@$ADDR" chown -R git:git /home/git/repositories /home/git/gitlab/public/uploads + +# Delete tables and roles from Postgres so that the restore can happen. + +ssh "root@$ADDR" sudo -u postgres psql <<EOF +drop database gitlabhq_production; +drop database gitlab_ci_production; +drop role git, gitlab_ci; +EOF + +# Restore the Postgres databases from the latest dump. + +ssh "root@$ADDR" sudo -u postgres psql -q -f /home/postgres/dumps/gitlab.pg_dumpall |