Estou usando GitLab em docker (porque adoro containerizacao) e estou muito satisfeito com isso porque posso mover o ambiente GitLab para qualquer lugar se precisar e posso me sentir mais elastico quando uso docker.

Os backups do GitLab sao realmente muito importantes porque voce esta mantendo todo o codigo fonte e talvez wiki, talvez mais que todo o codigo fonte, e o backup e a primeira coisa se voce tem um servico rodando em nivel critico.

Certifique-se sobre seu comando docker run


Eu executo meu GitLab em docker com este conjunto de comandos:

[ercan@gitlab ~]$ docker run --detach \
  --hostname gitlab.ercanermis.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

Primeiro, precisamos saber qual e o nome do container docker do GitLab. Na minha configuracao, estou usando GitLab Community Edition e dei o nome de "gitlab" para o docker. Se voce nao sabe o nome do docker do seu gitlab, ha uma maneira facil de descobrir.

[ercan@gitlab ~]$ docker ps -a | grep gitlab-ce

A ultima coluna mostra o nome do container docker. Aqui esta a saida:

9c787206fbda gitlab/gitlab-ce:latest "/assets/wrapper" 8 hours ago Up 8 hours (healthy) 0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp gitlab

Fazer um backup e saber o caminho do backup

Na verdade, o backup do GitLab e realmente facil. Aqui esta o comando para acionar o mecanismo de backup do GitLab.

docker exec gitlab gitlab-rake gitlab:backup:create DIRECTORY=gitlab

O comando de acionamento nao e suficiente porque voce deve fazer backup dos arquivos gitlab.rb e gitlab-secrets.json localizados no caminho /srv/gitlab/config/. Prefiro copiar (com comando cp) esses arquivos para o caminho /srv/gitlab/data/backups/ porque o gitlab-rake exporta para o mesmo diretorio.

Meu script bash de Backup GitLab Docker se parece com isso:

#!/bin/bash
#Autor: Ercan Ermis - https://ercanermis.com

docker exec gitlab gitlab-rake gitlab:backup:create DIRECTORY=gitlab cp /srv/gitlab/config/gitlab.rb /srv/gitlab/data/backups/$(date +%F_%H-%M)gitlab.rb cp /srv/gitlab/config/gitlab-secrets.json /srv/gitlab/data/backups/$(date +%F%H-%M)_gitlab-secrets.json

Quais arquivos voce tem apos executar o backup bash?

O gitlab gera o nome do arquivo de backup como 1600262658_2020_09_16_13.3.6_gitlab_backup.tar. Isso significa epochtime_ano_mes_dia_versaoGitlab_gitlab_backup.tar. Essa e a razao pela qual uso a funcao $date ao copiar gitlab.rb e gitlab-secrets.json para a pasta /srv/gitlab/data/backups/.

Estou usando o servico S3 da aws para manter meus backups com seguranca e redundancia e, quando o backup e concluido e fica pronto em /srv/gitlab/data/backups/, estou sincronizando os arquivos de backup para o S3 com o comando aws s3 sync /srv/gitlab/data/backups/ s3://ercanermis-backup/gitlab/ e excluindo o arquivo de backup no servidor.

Voce tambem pode usar sua propria solucao para manter seu backup redundante e seguro, como SMB, sFTP ou outra solucao de armazenamento em bloco de outro provedor.

Final: Vamos Automatizar o Backup

Aqui esta o bash final para automatizar o GitLab Docker Backup localizado em /opt/gitlab-backup.sh

#!/bin/bash
#Autor: Ercan Ermis - https://ercanermis.com

docker exec gitlab gitlab-rake gitlab:backup:create DIRECTORY=gitlab cp /srv/gitlab/config/gitlab.rb /srv/gitlab/data/backups/$(date +%F_%H-%M)gitlab.rb cp /srv/gitlab/config/gitlab-secrets.json /srv/gitlab/data/backups/$(date +%F%H-%M)_gitlab-secrets.json aws s3 sync /srv/gitlab/data/backups/ s3://ercanermis-backup/gitlab/ && rm -rf /srv/gitlab/data/backups/*

Apos criar seu arquivo .sh, voce pode usar seu crontab para acionar a execucao de seu proprio /opt/gitlab-backup.sh