diff options
Diffstat (limited to 'gitlab-server')
5 files changed, 87 insertions, 14 deletions
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:*:* |