Chapters ▾ 2nd Edition

4.5 Git no Servidor - Git Daemon

Git Daemon

Em seguida, configuraremos um daemon para servir repositórios usando o protocolo “Git”. Esta é uma escolha comum para acesso rápido e não autenticado aos seus dados Git. Lembre-se de que, como este não é um serviço autenticado, qualquer coisa que você sirva através deste protocolo será pública dentro da sua rede.

Se você estiver executando isso em um servidor fora do seu firewall, deve ser usado apenas para projetos que são publicamente visíveis para o mundo. Se o servidor em que você o executa estiver dentro do seu firewall, você pode usá-lo para projetos aos quais um grande número de pessoas ou computadores (servidores de integração contínua ou de build) tem acesso de leitura, quando você não quer ter que adicionar uma chave SSH para cada um.

De qualquer forma, o protocolo Git é relativamente fácil de configurar. Basicamente, você precisa executar este comando de maneira daemonizada (em segundo plano):

$ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

A opção --reuseaddr permite que o servidor reinicie sem esperar que as conexões antigas atinjam o tempo limite, enquanto a opção --base-path permite que as pessoas clonem projetos sem especificar o caminho inteiro, e o caminho no final informa ao Git daemon onde procurar os repositórios a serem exportados. Se você estiver executando um firewall, também precisará abrir um buraco (punch a hole) nele na porta 9418 da máquina em que está configurando isso.

Você pode daemonizar esse processo de várias maneiras, dependendo do sistema operacional que estiver executando.

Como o systemd é o sistema init mais comum entre as distribuições Linux modernas, você pode usá-lo para esse fim. Basta colocar um arquivo em /etc/systemd/system/git-daemon.service com este conteúdo:

[Unit]
Description=Start Git Daemon

[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Restart=always
RestartSec=500ms

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon

User=git
Group=git

[Install]
WantedBy=multi-user.target

Você deve ter notado que o Git daemon é iniciado aqui com git como grupo e usuário. Modifique-o para atender às suas necessidades e certifique-se de que o usuário fornecido exista no sistema. Além disso, verifique se o binário do Git está realmente localizado em /usr/bin/git e altere o caminho se necessário.

Finalmente, você executará systemctl enable git-daemon para iniciar o serviço automaticamente na inicialização, e pode iniciar e parar o serviço com, respectivamente, systemctl start git-daemon e systemctl stop git-daemon.

Em outros sistemas, você pode querer usar xinetd, um script no seu sistema sysvinit, ou alguma outra coisa — desde que você consiga que esse comando seja daemonizado e monitorado de alguma forma.

Em seguida, você precisa informar ao Git a quais repositórios ele deve permitir o acesso não autenticado baseado no servidor Git. Você pode fazer isso em cada repositório criando um arquivo chamado git-daemon-export-ok.

$ cd /path/to/project.git
$ touch git-daemon-export-ok

A presença desse arquivo informa ao Git que não há problema em servir este projeto sem autenticação.