Tabela de Conteúdos
4.5.1 Git via HTTP(S)
Por vezes é mais prático aceder a um repositório Git através do protocolo https.
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 efetuados 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:~# service 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