Tabela de Conteúdos

Página desactualizada Esta página contém uma versão anterior deste guia que pode estar desatualizada. Para a consultar a versão mais recente clique aqui.

4.5.1 Git via HTTP(S)

Objetivo

Por vezes é mais prático aceder a um repositório Git através do protocolo https.

Atenção

A configuração do servidor Git via http(s) depende da instalação prévia do pacote de software 3.8.2 Git, um sistema de controle de versões.

Configuração

A configuração do acesso aos repositórios git através do protocolo http ou https é efetuada em duas fases: a criação dos repositórios e a configuração do servidor http(s).

Criação dos repositórios

Os repositórios git serão mantidos na diretoria /var/cache/git. Esta diretoria deverá ter sido criada durante a instalação do 3.8.2 Git.

Sempre que se desejar adicionar um novo repositório git deverão ser efetuasdos os seguintes passos:

Deverá ser criada uma sub-diretoria que será inicializada como um repositório git.

 
root@server:~# cd /var/cache/git
root@server:/var/cache/git# mkdir test_project
root@server:/var/cache/git# cd test_project
root@server:/var/cache/git/test_project# git init --bare --shared
Initialized empty Git repository in /var/cache/git/test_project/

Para que o servidor http possa ler e escrever nessa diretoria, deverão ser alterados os atributos dos ficheiros do repositório:

root@server:/var/cache/git/test_project# chown -R www-data:www-data .

E finalmente:

root@server:/var/cache/git/test_project# git update-server-info

A criação do repositório está terminada; a fase seguinte é a configuração do servidor http.

Servidor http(s)

Verificar que o módulo dav do apache2 está ligado:

root@server:~# a2enmod dav

Para limitar o acesso apenas a utilizadores autenticados e autorizados, o módulo de autenticação auth_digest também deve estar ativo:

root@server:~# a2enmod auth_digest

Na configuração deverá ser indicada a URL do repositório e a localização dos repositórios no sistema. O acesso aos repositórios será também restringido a utilizadores autorizados. O mecanismo de autenticação será do tipo “Digest”.

A configuração é mantida no ficheiro /etc/apache2/conf.d/git.

/etc/apache2/conf.d/git
Alias /git   /var/cache/git
<Location /git>
        Options Indexes
        DAV On
        AuthType Digest
        AuthName "Git Repository"
        AuthUserFile /etc/apache2/git.passwd
        # <LimitExcept GET OPTIONS>
        Require valid-user
        # </LimitExcept>

        Order allow,deny
        Allow from 192.168.1.0/24
        #Allow from All
</Location>

A opção Allow from 192.168.1.0/24 limita o acesso apenas a partir da rede interna. Caso se pretenda aceder a partir de qualquer endereço, basta especificar Allow from All.

Criação de utilizadores

Antes de poder aceder ao servidor git, deverão ser definidos os utilizadores e respetivas palavras-passe, que serão guardadas no ficheiro /etc/apache2/git.passwd. Ao criar o primeiro utilizador deverá ser criado o ficheiro, o que é conseguido com a opção -c:

root@server:~# htdigest -c /etc/apache2/git.passwd "Git Repository" fribeiro
Adding password for fribeiro in realm Git Repository.
New password:
Re-type new password:

Para adicionar os utilizadores seguintes, não usar a opção -c, pois iria criar um novo ficheiro, eliminando os utilizadores anteriores:

root@server:~# htdigest -c /etc/apache2/git.passwd "Git Repository" user2
Adding user user2 in realm Git Repository
New password:
Re-type new password:

Reiniciar o servidor apache2:

root@server:~# /etc/init.d/apache2 restart

Opção: Acesso anónimo em leitura

A configuração acima restringe os acessos apenas a utilizadores autenticados.

Opcionalmente, pode-se permitir o acesso anónimo apenas em leitura, abrindo exceções para as operações GET, PROPFIND, OPTIONS e REPORT:

/etc/apache2/conf.d/git
# [...]

  # The following three lines allow anonymous read, but make
  # committers authenticate themselves.  It requires the 'authz_user'
  # module (enable it with 'a2enmod').
  <LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
  </LimitExcept>

# [...]

Verificação

Como verificação basta tentar clonar o repositório recém criado:

fribeiro@server:~$ git clone http://server.home.lan/git/test_project
Cloning into 'test_project'...
Username for 'http://server.home.lan': fribeiro
Password for 'http://fribeiro@server.home.lan':
warning: You appear to have cloned an empty repository.

O repositório foi clonado, embora esteja vazio. Caso não seja necessário, poderá ser apagado:

fribeiro@server:~$ rm -r test_project

Referências: