Gitlab backup

Making backup

  • block gitlab access (but leave maintenance web page)
    • gitlab-ctl deploy-page up
    • sudo gitlab-ctl stop unicorn
    • sudo gitlab-ctl stop sidekiq
  • Store configuration file manually (/etc/gitlab)
  • Trigger backup creation
    • gitlab-rake gitlab:backup:create
  • Start gitlab
    • gitlab-ctl start
    • gitlab-ctl deploy-page down

Make backup without repository

gitlab-rake gitlab:backup:create SKIP=repositories,uploads

For possible rake tasks to skip see into file /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/backup.rake. For now it cane be: repositories,db,builds,uploads,artifacts,lfs

Automating backups

crontab -e

0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

What is in backup

Backup file e.g.: 1462327272_gitlab_backup.tar is simple tar archive with example content:

|-- artifacts.tar.gz
|-- backup_information.yml
|-- builds.tar.gz
|-- db
|   `-- database.sql.gz
|-- lfs.tar.gz
|-- repositories
|   |-- group1
|   |   |-- http-server.bundle
|   |   |-- kernel.bundle
|   |-- group2
|   |   |-- buildroot.bundle
|   |   |-- linux-stable.bundle
|   |   |-- u-boot.bundle
|   |   `-- yocto.bundle
|   `-- user1
|       |-- buildroot.bundle
|       |-- linux-stable.bundle
|       |-- linux.bundle
|       |-- uboot.bundle
`-- uploads.tar.gz

Where .bundle filesa re simple tar archives of bare git repos.

Restoring backup

  • install exactly the same version from backup comes
  • install default gitlab package and make sure it is running
    • use `/etc/gitlab` from backup
    • run gitlab-ctl reconfigure
  • stop gitlab
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
# Verify
sudo gitlab-ctl status
  • Prepare backup file/directory
    • Make sure that backup pointed by `gitlab_rails['backup_path']` is owned by `git` user.
  • Restore backup
    • sudo gitlab-backup restore
    • OR sudo gitlab-backup restore BACKUP=1393513186
  • Start GitLab
    • sudo gitlab-ctl start
  • Check GitLab
    • sudo gitlab-rake gitlab:check SANITIZE=true