Chapters ▾ 2nd Edition

4.2 Git no Servidor - Colocando o Git em um Servidor

Colocando o Git em um Servidor

Agora, abordaremos a configuração de um serviço Git executando esses protocolos no seu próprio servidor.

Note

Aqui estaremos demonstrando os comandos e passos necessários para fazer instalações básicas e simplificadas em um servidor baseado em Linux, embora também seja possível executar esses serviços em servidores macOS ou Windows. Na verdade, configurar um servidor de produção na sua infraestrutura certamente acarretará diferenças nas medidas de segurança ou nas ferramentas do sistema operacional, mas esperamos que isso lhe dê uma ideia geral do que está envolvido.

Para configurar inicialmente qualquer servidor Git, você deve exportar um repositório existente para um novo repositório nu (bare repository) — um repositório que não contém um diretório de trabalho. Geralmente é simples de fazer. Para clonar o seu repositório a fim de criar um novo repositório nu, você executa o comando clone com a opção --bare. Por convenção, os nomes de diretório de repositórios nus terminam com o sufixo .git, assim:

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

Agora você deve ter uma cópia dos dados do diretório Git no seu diretório my_project.git.

Isso é aproximadamente equivalente a algo como:

$ cp -Rf my_project/.git my_project.git

Existem algumas pequenas diferenças no arquivo de configuração, mas, para o seu propósito, isso é quase a mesma coisa. Ele pega o repositório Git por si só, sem um diretório de trabalho, e cria um diretório especificamente apenas para ele.

Colocando o Repositório Nu (Bare) em um Servidor

Agora que você tem uma cópia nua do seu repositório, tudo o que você precisa fazer é colocá-la em um servidor e configurar os seus protocolos. Digamos que você configurou um servidor chamado git.example.com ao qual você tem acesso SSH e deseja armazenar todos os seus repositórios Git no diretório /srv/git. Supondo que /srv/git exista nesse servidor, você pode configurar o seu novo repositório copiando o seu repositório nu:

$ scp -r my_project.git user@git.example.com:/srv/git

Neste ponto, outros usuários que tenham acesso de leitura baseado em SSH ao diretório /srv/git naquele servidor podem clonar o seu repositório executando:

$ git clone user@git.example.com:/srv/git/my_project.git

Se um usuário fizer SSH em um servidor e tiver acesso de gravação ao diretório /srv/git/my_project.git, ele também terá acesso de push automaticamente.

O Git adicionará automaticamente permissões de gravação de grupo a um repositório adequadamente se você executar o comando git init com a opção --shared. Observe que, ao executar este comando, você não destruirá nenhum commit, referência, etc. no processo.

$ ssh user@git.example.com
$ cd /srv/git/my_project.git
$ git init --bare --shared

Você vê como é fácil pegar um repositório Git, criar uma versão nua e colocá-lo em um servidor ao qual você e os seus colaboradores tenham acesso SSH. Agora você está pronto para colaborar no mesmo projeto.

É importante notar que isso é literalmente tudo o que você precisa fazer para executar um servidor Git útil ao qual várias pessoas tenham acesso — basta adicionar contas com acesso SSH em um servidor e colocar um repositório nu em algum lugar onde todos esses usuários tenham acesso de leitura e gravação. Você está pronto para começar — nada mais é necessário.

Nas próximas seções, você verá como expandir para configurações mais sofisticadas. Essa discussão incluirá não ter que criar contas de usuário para cada usuário, adicionar acesso público de leitura a repositórios, configurar IUs da web e muito mais. No entanto, tenha em mente que para colaborar com algumas pessoas em um projeto privado, tudo o que você precisa é de um servidor SSH e um repositório nu.

Pequenas Configurações

Se você é uma pequena equipe ou está apenas experimentando o Git na sua organização e tem apenas alguns desenvolvedores, as coisas podem ser simples para você. Um dos aspectos mais complicados da configuração de um servidor Git é o gerenciamento de usuários. Se você quiser que alguns repositórios sejam somente leitura para determinados usuários e leitura/gravação para outros, o acesso e as permissões podem ser um pouco mais difíceis de organizar.

Acesso SSH

Se você tem um servidor ao qual todos os seus desenvolvedores já têm acesso SSH, geralmente é mais fácil configurar o seu primeiro repositório lá, porque você não tem quase nenhum trabalho (como abordamos na última seção). Se você quiser permissões de tipo de controle de acesso mais complexas nos seus repositórios, pode lidar com elas com as permissões normais do sistema de arquivos do sistema operacional do seu servidor.

Se você quiser colocar os seus repositórios em um servidor que não tenha contas para todos na sua equipe para quem você deseja conceder acesso de gravação, você deve configurar o acesso SSH para eles. Nós assumimos que se você tiver um servidor para fazer isso, você já tem um servidor SSH instalado, e é assim que você está acessando o servidor.

Existem algumas maneiras de dar acesso a todos na sua equipe. A primeira é configurar contas para todos, o que é simples, mas pode ser trabalhoso. Você pode não querer executar adduser (ou a possível alternativa useradd) e ter que definir senhas temporárias para cada novo usuário.

Um segundo método é criar uma única conta de usuário 'git' na máquina, pedir a todos os usuários que terão acesso de gravação que lhe enviem uma chave pública SSH e adicionar essa chave ao arquivo ~/.ssh/authorized_keys dessa nova conta 'git'. Nesse ponto, todos poderão acessar essa máquina através da conta 'git'. Isso não afeta os dados do commit de forma alguma — o usuário SSH como o qual você se conecta não afeta os commits que você gravou.

Outra maneira de fazer isso é fazer com que o seu servidor SSH se autentique a partir de um servidor LDAP ou alguma outra fonte de autenticação centralizada que você já possa ter configurado. Desde que cada usuário possa obter acesso shell na máquina, qualquer mecanismo de autenticação SSH que você imaginar deve funcionar.