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 | |
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
6 files changed, 88 insertions, 14 deletions
diff --git a/gitlab-server.morph b/gitlab-server.morph index 6142b8c6..8dc9f3cf 100644 --- a/gitlab-server.morph +++ b/gitlab-server.morph @@ -6,6 +6,7 @@ configuration-extensions: - nfsboot - install-files - gitlab +- fstab description: system which hosts a gitlab server kind: system name: gitlab-server diff --git a/gitlab-server/usr/share/gitlab-install/backup-gitlab b/gitlab-server/usr/share/gitlab-install/backup-gitlab index a6c3e3f5..1320df81 100644 --- a/gitlab-server/usr/share/gitlab-install/backup-gitlab +++ b/gitlab-server/usr/share/gitlab-install/backup-gitlab @@ -4,19 +4,13 @@ # /home/git/gitlab-backup.tar . A separate backup host will need to # back that up. # -# This script be run as the git user on a GitLab host. +# This script be run as the postgres user on a Baserock GitLab host. set -e export PATH=/usr/local/bin:/usr/bin:/bin -cd /home/git/gitlab -mkdir -p /home/git/gitlab/tmp/backups -bundle exec rake gitlab:backup:create RAILS_ENV=production - -ls /home/git/gitlab/tmp/backups/[0-9]*.tar | -tail -n1 | -while read filename -do - mv "$filename" /home/git/gitlab-backup.tar -done +mkdir -p /home/postgres/dumps +cd /home/postgres/dumps +pg_dumpall > new.dump +mv new.dump gitlab.pg_dumpall diff --git a/gitlab-server/usr/share/gitlab-install/gitlab-remote-backup.sh b/gitlab-server/usr/share/gitlab-install/gitlab-remote-backup.sh new file mode 100644 index 00000000..85618811 --- /dev/null +++ b/gitlab-server/usr/share/gitlab-install/gitlab-remote-backup.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# +# Copy relevant files of a Baserock Gitlab instance out of the instance. +# +# Usage: backup.sh ADDR +# where ADDR is the address (domain name, IP address) of the instance. +# The files are copied to the current directory. + +set -eux + +ADDR="$1" + +backup() +{ + rsync -ahHS --delete "root@$ADDR:$1" "$2" +} + +mkdir -p dumps repositories uploads +backup /home/postgres/dumps/. dumps/. +backup /home/git/repositories/. repositories/. +backup /home/git/gitlab/public/uploads/. uploads/. + 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 diff --git a/gitlab-server/usr/share/gitlab-install/systemd-units/gitlab-backup.service b/gitlab-server/usr/share/gitlab-install/systemd-units/gitlab-backup.service index 967a65e3..8672c36d 100644 --- a/gitlab-server/usr/share/gitlab-install/systemd-units/gitlab-backup.service +++ b/gitlab-server/usr/share/gitlab-install/systemd-units/gitlab-backup.service @@ -7,5 +7,5 @@ WantedBy=gitlab.target [Service] ExecStart=/usr/share/gitlab-install/backup-gitlab -User=git -Group=git +User=postgres +Group=postgres diff --git a/gitlab-server/usr/share/gitlab-install/systemd-units/gitlab-backup.timer b/gitlab-server/usr/share/gitlab-install/systemd-units/gitlab-backup.timer index 1c2f57ba..1686843f 100644 --- a/gitlab-server/usr/share/gitlab-install/systemd-units/gitlab-backup.timer +++ b/gitlab-server/usr/share/gitlab-install/systemd-units/gitlab-backup.timer @@ -5,4 +5,4 @@ Description=GitLab Backup Timer WantedBy=gitlab.target [Timer] -OnCalendar=*-*-* 00/4:00:00 +OnCalendar=*-*-* 00:*:* |