Após você ter criado o Gitlab, colocado em produção, tenha em mente que este ambiente é crítico, todos os desenvolvedores, arquitetos, sysadmins, devops etc vão armazenar os códigos e documentações no GitLab.
Você tem a obrigação de ter no mínimo um backup íntegro do Gitlab, e dependendo da empresa é interessante colocar o GitLab em HA, mas para a maioria dos casos um backup bem feito é mais que suficiente.
Tem ainda um porém, se um dia acontecer um problema, e merdas acontecem, você vai preferir o Kid Bengala te fungando no cangote, do que falar para os times que não tem backup do ambiente, neste caso se prepare, pois a mandioca vai vir sem vaselina. FAÇA BACKUP.
1. Backup dos arquivos de configuração, chaves de autenticação e certificados SSL.
# mkdir BACKUP-GITLAB
# tar cvzf /BACKUP-GITLAB/gitlab.tar.gz /etc/gitlab/
Os arquivos mais importantes são: gitlab.rb (configuração), gitlab-secrets.json (chaves de acessos dos usuários), e os certificados ".crt" e ".key".
2. Backup do banco de dados, repositórios e anexos.
Por padrão os backups serão armazenados no diretório /var/opt/gitlab/backups, porém isto pode ser alterado editando o arquivo
/etc/gitlab/gitlab.rb.
# gitlab-rake gitlab:backup:create
Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
done
Dumping repositories ...
* StreetFighter/Newgame ... [DONE]
* StreetFighter/Newgame.wiki ... [SKIPPED]
done
Dumping uploads ...
done
Dumping builds ...
done
Dumping artifacts ...
done
Dumping lfs objects ...
done
Creating backup archive: 1455574026_gitlab_backup.tar ... done
Uploading backup archive to remote storage ... skipped
Deleting tmp directories ... done
done
Deleting old backups ... skipping
# ls /var/opt/gitlab/backups/
1455574026_gitlab_backup.tar
Cada backup é gerado com um número de identificação único, no caso 1455574026, este id vai ser utilizado no restore.
O Gitlab permite que você faça o upload automático dos backups para o S3 da Amazon, Rackspace CloudFiles, Google Storage entre outros, isto tem na documentação oficial do Gitlab.
3. Restore Full do Gitlab.
O restore só funciona com a mesma versão do Gitlab, se você fez backup da verão gitlab-ce-8.4.4, então o restore tem que ser na mesma versão gitlab-ce-8.4.4. Se você quiser fazer um upgrade, terá que restaurar o backup e depois o fazer upgrade.
Simularemos que perdemos tudo, então crie uma máquina zerada e instale apenas o Gitlab, siga os capítulos 2 e 3 deste tutorial.
Assumindo que você tenha um servidor do Gitlab instalado e funcional, vamos restaurar a pasta /etc/gitlab.
# tar xvzf gitlab.tar.gz -C /
etc/gitlab/
etc/gitlab/ssl/
etc/gitlab/ssl/gitlab.devopslab.com.br.key
etc/gitlab/ssl/gitlab.devopslab.com.br.crt
etc/gitlab/gitlab.rb
etc/gitlab/gitlab-secrets.json
Restauração da base de dados.
Pare os processos que utilizam o banco de dados.
# gitlab-ctl stop unicorn
# gitlab-ctl stop sidekiq
# gitlab-ctl status
Faça a correção da permissão do arquivo de backup.
# chown git. /var/opt/gitlab/backups/1455574026_gitlab_backup.tar
Este comando vai restaurar o banco.
# gitlab-rake gitlab:backup:restore BACKUP=1455574026
Unpacking backup ... done
Restoring database ...
Restoring PostgreSQL database gitlabhq_production ... SET
SET
DROP INDEX
CREATE INDEX
WARNING: no privileges could be revoked for "public"
REVOKE
WARNING: no privileges could be revoked for "public"
GRANT
[DONE]
done
Restoring repositories ...
* StreetFighter/Newgame ... [DONE]
Put GitLab hooks in repositories dirs [DONE]
Restoring uploads ... done
Restoring builds ... done
Restoring artifacts ... done
Restoring lfs objects ...done
This will rebuild an authorized_keys file.
You will lose any data stored in authorized_keys file.
Do you want to continue (yes/no)? yes
Deleting tmp directories ... done
done
Inicie o Gitlab:
# gitlab-ctl start
# gitlab-ctl status
Verificando a integridade do restore:
# gitlab-rake gitlab:check SANITIZE=true
Se tiver algum erro, o script vai pedir para corrigir já com a solução, no meu caso deu um erro de permissão.
# gitlab-rake gitlab:check SANITIZE=true
Checking GitLab Shell ...
GitLab Shell version >= 2.6.10 ? ... OK (2.6.10)
Repo base directory exists? ... yes
Repo base directory is a symlink? ... no
Repo base owned by git:git? ... yes
Repo base access is drwxrws---? ... yes
hooks directories in repos are links: ... 11/3 ... ok
Running /opt/gitlab/embedded/service/gitlab-shell/bin/check
Check GitLab API access: OK
Check directories and files:
/var/opt/gitlab/git-data/repositories: OK
/var/opt/gitlab/.ssh/authorized_keys: OK
Test redis-cli executable: redis-cli 2.8.21
Send ping to redis server: PONG
gitlab-shell self-check successful
Checking GitLab Shell ... Finished
Checking Sidekiq ...
Running? ... yes
Number of Sidekiq processes ... 1
Checking Sidekiq ... Finished
Checking Reply by email ...
Reply by email is disabled in config/gitlab.yml
Checking Reply by email ... Finished
Checking LDAP ...
LDAP is disabled in config/gitlab.yml
Checking LDAP ... Finished
Checking GitLab ...
Git configured with autocrlf=input? ... yes
Database config exists? ... yes
Database is SQLite ... no
All migrations up? ... yes
Database contains orphaned GroupMembers? ... no
GitLab config exists? ... yes
GitLab config outdated? ... no
Log directory writable? ... yes
Tmp directory writable? ... yes
Uploads directory setup correctly? ... skipped (no tmp uploads folder yet)
Init script exists? ... skipped (omnibus-gitlab has no init script)
Init script up-to-date? ... skipped (omnibus-gitlab has no init script)
projects have namespace: ...
11/3 ... yes
Redis version >= 2.8.0? ... yes
Ruby version >= 2.1.0 ? ... yes (2.1.8)
Your git bin path is "/opt/gitlab/embedded/bin/git"
Git version >= 1.7.10 ? ... yes (2.6.2)
Active users: 12
Checking GitLab ... Finished
Reconfigure o gitlab mais uma vez:
# gitlab-ctl reconfigure
Backup restaurado com sucesso, basta se logar na url do Gitlab e verificar os projetos, usuários, arquivos, chaves de autenticação e etc, backup 100%. Este projeto Gitlab é muito bom, todos os scripts funcionam corretamente, sem erros, tudo redondinho, boa documentação.
Tudo que foi abordado neste tutorial pode ser encontrado neste endereços:
Espero ter contribuído um pouco, até a próxima.