GITLAB - резервное копирование и восстановление


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

Для управления сервером gitlab, на этапе когда он находится в рабочем состоянии служит консольная утилита gitlab-ctl, а для создания резервных копий служит утилита gitlab-rake и этих двух механизмов я уже касался в статье "GITLAB - перенос интегрированной базы Postgresql в штатную базу операционной системы".

Создадим резервную копию всех сервисов GITLAB при помощи команды:

# gitlab-rake gitlab:backup:create

В зависимости от объема ваших репозиториев и базы данных эта операция может занять довольно много времени. Если все операции прошли успешно, то в результате вы получите сообщение:

Creating backup archive: 1540360268_2018_10_24_11.2.3-ee_gitlab_backup.tar ... done
Uploading backup archive to remote storage  ... skipped
Deleting tmp directories ... done

Резервные копии находятся в каталоге /var/opt/gitlab/backups:

# ls /var/opt/gitlab/backups
1540360268_2018_10_24_11.2.3-ee_gitlab_backup.tar

А теперь восстановим созданную резервную копию при помощи последовательности команд:

# systemctl start gitlab-runsvdir.service
# gitlab-rake gitlab:backup:restore BACKUP=1540360268_2018_10_24_11.2.3-ee
# systemctl restart gitlab-runsvdir.service

Архив вы естественно должны положить в каталог /var/opt/gitlab/backups и если все прошло успешно, то вы получите подобное сообщение:

Restoring lfs objects ... 
done
This task will now rebuild the authorized_keys file.
You will lose any data stored in the authorized_keys file.
Do you want to continue (yes/no)? yes

.......
Deleting tmp directories ... done

Вручную создавать резервные копии, это не самая лучшая идея и я бы рекомендовал вам автоматизировать создание резервных копий штатными средствами и доставку их на удаленное хранилище. Можно написать простенький shell-скрипт для этих целей:

#!/bin/sh
gitlab-rake gitlab:backup:create
rsync -r /var/opt/gitlab/backups/ backup-0001@backup.gita-dev.ru:/home/backup-0001/git.gita-dev.ru/
rm -R /var/opt/gitlab/backups/*

Резервную копию можно восстановить и на чистую установку сервера gitlab если существующий перестал корректно функционировать, для начала вам конечно его потребуется установить, но на самом деле там дел на 15 минут если следовать моей инструкции "Как установить GITLAB (пошаговое руководство)".

Восстанавливать бэкап вам потребуется именно на такую версию gitlab с которой он и создавался, а в противном случае вы получите ошибку:

GitLab version mismatch:
  Your current GitLab version (11.4.0-ee) differs from the GitLab version in the backup!
  Please switch to the following version and try again:
  version: 11.2.3-ee

Вы можете установить определенную версию gitlab при помощи простой последовательности команд. Во первых получаем все доступные версии пакета:

# apt-cache madison gitlab-ee

Во вторых, удалим текущую конфигурацию gitlab:

# gitlab-ctl cleanse

Деинсталлируем текущую версию гитлаб и устанавливаем версию которая нам требуется:

# apt-get purge gitlab-ee
# apt-get install gitlab-ee=11.2.3-ee.0