... | ... | @@ -52,6 +52,8 @@ sudo gitlab-ctl restart |
|
|
|
|
|
Por fim, realize a [ativação do GitLab](https://docs.gitlab.com/ee/administration/license.html), caso você tenha uma licença. Instituições de ensino podem participar do [GitLab for Education](https://about.gitlab.com/solutions/education/join/).
|
|
|
|
|
|
É também recomendável aprender e configurar uma rotina de [backup do GitLab](https://docs.gitlab.com/ee/administration/backup_restore/). Em **Lições Aprendidas**, abaixo, descrevemos a rotina de backup configurada para o GitLab do LabES.
|
|
|
|
|
|
|
|
|
|
|
|
## Como usar/aplicar?
|
... | ... | @@ -97,6 +99,105 @@ Vide [GitLab Pipelines](ferramentas/gitlab-pipelines) para instruções de como |
|
|
|
|
|
Caso tenha algum projeto que não irá utilizar CI/CD, é interessante configurar o GitLab para não incluir uma _pipeline_ automática nos projetos. Na área administrativa, siga para **Settings > CI/CD**, expanda a seção **Continuous Integration and Deployment** e desmarque a opção **Default to Auto DevOps pipeline for all projects**.
|
|
|
|
|
|
### Backup do GitLab:
|
|
|
|
|
|
O LabES utiliza a [infraestrutura de TI do Departamento de Informática da UFES](https://informatica.ufes.br/pt-br/lar-laboratorio-de-administracao-de-redes), que nos ofereceu, além das máquinas virtuais para o GitLab e para o [servidor de CI/CD](ferramentas/gitlab-pipelines), um espaço num servidor separado para armazenamento de backups, que pode ser acessado via [NFS (Network File System)](https://ubuntu.com/server/docs/service-nfs). O backup é configurado para rodar todos os dias de madrugada via [Crontab](https://pt.wikipedia.org/wiki/Crontab) e manter o backup dos últimos 7 dias.
|
|
|
|
|
|
Para seguir esta fórmula, em primeiro lugar deve ser configurado no servidor de backups um diretório para ser compartilhado via NFS com o seu servidor GitLab, cujo dono deve ser o usuário `gitlab-redis`. Relatamos abaixo apenas as instruções do lado do servidor GitLab, assumindo que o diretório `/mnt/nfs2/git-labes` num servidor chamado `backups.inf.ufes.br` já foi preparado para acesso via NFS e que, dentro dele, existe um subdiretório `gitlab` também de propriedade de `gitlab-redis`.
|
|
|
|
|
|
Em primeiro lugar, assegure-se que `rsync` e `nfs-common` estão instalados no servidor GitLab:
|
|
|
|
|
|
```shell
|
|
|
sudo apt install rsync nfs-common
|
|
|
```
|
|
|
|
|
|
Em seguida, como `root`, edite o arquivo `/etc/fstab` e adicione a seguinte linha de configuração:
|
|
|
|
|
|
```shell
|
|
|
backups.inf.ufes.br:/mnt/nfs2/git-labes /mnt/backups nfs defaults 0 0
|
|
|
```
|
|
|
|
|
|
Feita a configuração do sistema de arquivo em rede, crie o diretório na máquina local que é mencionado na configuração e faça a montagem do sistema de arquivos:
|
|
|
|
|
|
```shell
|
|
|
sudo mkdir /mnt/backups
|
|
|
sudo mount -a
|
|
|
```
|
|
|
|
|
|
Edite o arquivo de configuração do GitLab `/etc/gitlab/gitlab.rb`, procure as chaves abaixo e realize as seguintes configurações:
|
|
|
|
|
|
```rb
|
|
|
###! The duration in seconds to keep backups before they are allowed to be deleted
|
|
|
gitlab_rails['backup_keep_time'] = 604800
|
|
|
|
|
|
gitlab_rails['backup_upload_connection'] = {
|
|
|
'provider' => 'Local',
|
|
|
'local_root' => '/mnt/backups/gitlab'
|
|
|
}
|
|
|
gitlab_rails['backup_upload_remote_directory'] = '.'
|
|
|
```
|
|
|
|
|
|
Reconfigure e reinicie o GitLab:
|
|
|
|
|
|
```shell
|
|
|
sudo gitlab-ctl reconfigure
|
|
|
sudo gitlab-ctl restart
|
|
|
```
|
|
|
|
|
|
Para testar se tudo está OK, faça um backup manualmente com os seguintes comandos (o primeiro deles pode demorar um bom tempo, a depender do tamanho do seu GitLab):
|
|
|
|
|
|
```shell
|
|
|
sudo /opt/gitlab/bin/gitlab-backup create CRON=1 STRATEGY=copy
|
|
|
sudo /usr/bin/rsync -tp /etc/gitlab/gitlab-secrets.json /mnt/backups/
|
|
|
sudo /usr/bin/rsync -tp /etc/gitlab/gitlab.rb /mnt/backups/
|
|
|
```
|
|
|
|
|
|
Se tudo estiver funcionando (verifique se os arquivos foram copiados para `/mnt/backups`), configure o `cron` para executar seu backup todo dia num determinado horário. Para isso, execute `sudo crontab -e` e inclua comandos, por exemplo, para fazer o backup mais demorado do GitLab às 3:00 da manhã e copiar arquivos de configuração menores e excluir arquivos antigos às 6:00 da manhã, diariamente:
|
|
|
|
|
|
```shell
|
|
|
# backup gitlab
|
|
|
0 3 * * * /opt/gitlab/bin/gitlab-backup create CRON=1 STRATEGY=copy
|
|
|
# clean old backup gitlab files [/mnt/backups/gitlab]
|
|
|
0 6 * * * /usr/bin/find /mnt/backups/gitlab -mtime +7 -delete
|
|
|
# clean old backup gitlab files [/var/opt/gitlab/backups]
|
|
|
0 6 * * * /usr/bin/find /var/opt/gitlab/backups -mtime +7 -delete
|
|
|
# clean old backup gitlab files [/etc/gitlab/config_backup]
|
|
|
0 6 * * * /usr/bin/find /etc/gitlab/config_backup -mtime +7 -delete
|
|
|
# backup gitlab configuration files [/etc/gitlab/gitlab-secrets.json]
|
|
|
0 6 * * * /usr/bin/rsync -tp /etc/gitlab/gitlab-secrets.json /mnt/backups/
|
|
|
# backup gitlab configuration files [/etc/gitlab/gitlab.rb]
|
|
|
0 6 * * * /usr/bin/rsync -tp /etc/gitlab/gitlab.rb /mnt/backups/
|
|
|
```
|
|
|
|
|
|
Se quiser uma garantia ainda maior, crie um script para fazer o upload do seu backup para um serviço de armazenamento na nuvem. Seguem abaixo instruções para uso do [OneDrive, da Microsoft](https://www.microsoft.com/pt-br/microsoft-365/onedrive/free-online-cloud-storage/):
|
|
|
|
|
|
1. Visite o [Portal da Microsoft Azure](https://portal.azure.com/#home) e faça login com sua conta Microsoft;
|
|
|
|
|
|
2. No menu, clique em **Todos os serviços**, depois **Registros de aplicativo** e em seguida **Novo registro**;
|
|
|
|
|
|
3. Dê um nome ao seu aplicativo (ex.: `onedrive-uploader`), escolha a opção **Contas em qualquer diretório organizacional (qualquer locatário do Microsoft Entra ID - multilocatário) e contas pessoais da Microsoft (por exemplo, Skype, Xbox)**, indique uma URI de redirecionamento **Web** com valor `http://localhost:53682/` e clique em **Registrar**;
|
|
|
|
|
|
4. Copie em algum lugar o **ID do aplicativo (cliente)**; > 3f864717-6846-40a1-a4b3-53d9bcea5775
|
|
|
|
|
|
5. No menu, clique em **Certificados e segredos**, em seguida **Novo segredo do cliente**, dê um nome (ex.: `ufes-labes`), escolha uma data de expiração e clique em **Adicionar**;
|
|
|
|
|
|
6. Copie em algum lugar o **Valor** (não o ID) do segredo criado; > 3S48Q~m1WvYRUI8fOlf9YA_MlRi5ow~8jiXOPcbh
|
|
|
|
|
|
7. No menu, clique em **Permissões de APIs**, clique em **Adicionar uma permissão**, escolha **Microsoft Graph**, escolha **Permissões delegadas**, procure e adicione as seguintes permissões: `Files.ReadWrite.AppFolder`, `offline_access`, `User.Read`. Clique em **Adicionar permissões** ao final;
|
|
|
|
|
|
8. Numa máquina com um navegador Web, instale a ferramenta [onedrive-uploader](https://github.com/virtualzone/onedrive-uploader) (vide instruções no [README](https://github.com/virtualzone/onedrive-uploader#readme)), configure e faça login na sua conta do OneDrive:
|
|
|
|
|
|
```shell
|
|
|
onedrive-uploader config
|
|
|
onedrive-uploader login
|
|
|
```
|
|
|
|
|
|
> No momento da configuração, serão solicitados os valores copiados anteriormente (ID do aplicativo e valor do segredo), bem como a indicação se o acesso será completo ou apenas ao diretório do aplicativo (`App Root`). Se preferir o acesso completo, é preciso adicionar às **Permissões de APIs** as demais permissões listadas pela ferramenta.
|
|
|
|
|
|
9. Caso o servidor GitLab não tenha navegador Web e você tenha feito a configuração e o login numa outra máquina, a ferramenta indica onde encontrar o arquivo `config.json`. Copie-o da máquina em que o login foi feito para o servidor do GitLab, observando o local adequado (no Linux, `~/.config/onedrive-uploader/`). Será necessário também instalar a ferramenta [onedrive-uploader](https://github.com/virtualzone/onedrive-uploader) lá também;
|
|
|
|
|
|
10. Utilize o comando `onedrive-uploader upload <arquivo local> <pasta na nuvem>` para enviar o arquivo de backup do GitLab em sua máquina local para uma determinada pasta na nuvem do OneDrive.
|
|
|
|
|
|
### Instalação conjunta com o site do LabES:
|
|
|
|
|
|
Em sua primeira encarnação no LabES, o GitLab foi instalado no mesmo servidor que hospeda a [página do laboratório](http://labes.inf.ufes.br/). Neste caso, visto que o GitLab é baseado no servidor HTTP [nginx](https://nginx.org/) e o site do LabES estava sendo hospedado numa instância do servidor [Apache](https://httpd.apache.org/), ajustes tiveram que ser realizados no procedimento de instalação.
|
... | ... | |