Estive em busca de uma interface git para hospedar os meus projetos em meu próprio servidor, para de certa forma servir de meu portifólio.
Eu já tinha conhecimento de que o gitlab permite que os usuários criem a sua própria instância(self-host) em seus servidores, e eu mesmo já hospedei uma instância do gitlab em minha VPS.
Porém, achei a plataforma muito pesada, necessitando de muita memória RAM, e o “fresh install” do gitlab já consumia 8 GB de armazenamento.
Então iniciei a minha pesquisa a procura de uma interface git que fosse, simples e leve.
Início das pesquisas
Primeiro me lembrei que o projeto suckless faz a hospedagem de seus próprios repositórios utilizando uma interface git bem simples.
Pesquisando um pouco descobri que se trata do [stagit], uma ferramenta que gera páginas estáticas para os seus repositórios git.
Gostei da proposta do [stagit], porém, esta ferramenta precisa ser rodada periódicamente para gerar as páginas dos repositórios(ou a cada alteração).
Pesquisando mais um pouco, eu encontrei um post no blog paritybit citando algumas plataformas que ele encontrou em sua jornada em busca de um servidor git.
Neste post o autor cita vários servidores, mas um deles me chamou a atenção por ser escrito utilizando a linguagem C.
Este software se chama cgit. O que me chamou a atenção a respeito do cgit é o fato de ele poder ser rodado via CGI, e também por poder rendererizar as páginas a todo a acesso do usuário(não necessáriamente a toda alteração do projeto). O cgit também atende aos meus requisitos de ser um software leve e simples e de quebra é um software que segue a filosofia suckless.
Com estas informações em mãos eu decidi que o cgit será a minha interface git.
Configurando o cgit
Para começar a configuração do cgit eu li o verbete do cgit na Arch Wiki. Este verbete descreve com clareza os passos para instalar o cgit na sua VPS.
Após seguir as etapas de instalação descritas na Arch Wiki eu apliquei um css com tema dark que encontrei na internet.
O meu arquivo de css para o cgit pode ser encontrado no meu repositório: cgit.
Servidor git
Para eu poder ver meus repositórios renderizados pelo cgit eu preciso ter o meu próprio servidor git, não é mesmo?
Consegui configurar o meu próprio servidor git com facilidade seguindo o guia de referência do git.
Foi algo bem simples não tive problemas algum ao seguir os passos.
Após a configuração do servidor git eu apenas informei ao cgit em qual diretório os meus repositórios estavam armazenados preenchendo o arquivo de configuração localizado em /etc/cgitrepos.
Configurando mirrors
Após configurar o servidor git eu precisei espelhar no meu servidor, os meus projetos hospedados tanto no Github tanto no Gitlab.
Para isso utilizei um script que encontrei no Github, chamado git-mirror.
O git-mirror é uma ferramenta simples e escrito em shell script.
Para espelhar os meus projetos eu criei um diretório no meu computador para armazenar os meus repositórios, em seguida eu utilizei o seguinte comando para criar o espelho:
git-mirror setup path/to/directory https://someserver.domain/user/tomirror [email protected]/user/mirrorEste script tem que ser chamado com frequência para atualizar os remotos a cada alteração, para isso o próprio desenvolvedor criou um target do systemd para realizar a ação de update a cada 5 minutos.
Infelizmente os meus espelhos estão configurados apenas no meu computador pessoal no momento, logo, se eu realizar alguma alteração em algum dos meus projetos, e o meu computador estiver desligado, esta alteração não poderá ser vista no meu servidor git em git.calebe.dev.br.
E infelizmente também os espelhos são feitos em apenas uma direção, ou seja, somente as alterações enviadas para os remotos do Gitlab e Github podem ser vistas no meu servidor git.
Exemplo:
Gitlab Meu Servidor
HEAD ----> Git
| |
Commit Commit
cb35f94 cb35f94
Futuramente eu quero descobrir um jeito de criar espelhos bidirecionais, ou seja, as alterações poderão ser feitas em ambos os remotos.
Exemplo:
Gitlab Meu Servidor
HEAD <>----> Git
| |
Commit Commit
cb35f94 cb35f94
Conclusão
Configurar o cgit é uma tarefa relativamente fácil se você já tem um conhecimento de como aplicações [CGI] funcionam, de como configurar o nginx, de como funciona o ssh e conhecimentos intermediários do uso de comandos de linha de comando.
Lendo as documentações do git e do cgit eu consegui hospedar um servidor git simples e leve, e pode ser acessado em git.calebe.dev.br.
Veja também
- servidor-de-email-privado — servidor de email self-hosted com Yunohost
- migrando-do-gitlab-para-o-github — migrando repositórios do Gitlab para o Github
- glossary — termos como self-hosted, VPS, CGI, cgit, stagit, Suckless
