Pesquisa de site

O guia definitivo para configurar Apache Subversion SVN e TortoiseSVN para controle de versão


Se o seu trabalho requer o manuseio de documentos, páginas da web e outros tipos de arquivos que são atualizados regularmente, você pode querer usar um mecanismo de controle de versão, caso ainda não esteja fazendo isso.

Entre outras coisas, isso permite que você (e também um grupo de colaboradores em potencial) rastreie as alterações feitas em um determinado arquivo e reverta para uma versão anterior se um problema for encontrado ou quando uma atualização não produziu o resultado esperado. .

No ecossistema de software livre, o sistema de controle de versão mais utilizado é chamado Apache Subversion (ou SVN, para abreviar). Com a ajuda do mod_dav_svn (módulo do Apache para Subversion), você pode acessar um repositório Subversion usando HTTP e um servidor web.

Dito isso, vamos arregaçar as mangas e instalar essas ferramentas em um RHEL/CentOS 7, Fedora 22-24, Debian 8/7 e Servidor Ubuntu 16.04-15.04. Para nossos testes utilizaremos um servidor CentOS 7 com IP 192.168.0.100.

No lado do cliente (uma máquina Windows 7), instalaremos e usaremos o TortoiseSVN (que é baseado no Apache Subversion) como interface para o SVN.

Nosso ambiente de testes


Server - CentOS 7
IP Address - 192.168.0.100
Client - Windows 7

Passo 1 – Instalando e configurando SVN no Linux

Como acabamos de mencionar, contaremos com o Apache para acessar o repositório SVN usando uma interface web. Se ainda não estiver instalado, adicione-o à lista de pacotes conforme mostrado abaixo:


------------------ On CentOS / RHEL / Fedora ------------------ 
yum update && yum install mod_dav_svn subversion httpd -y

------------------ On Debian / Ubuntu ------------------ 
apt-get update && apt-get install libapache2-svn subversion apache2 -y 

Durante a instalação no CentOS 7, um arquivo de configuração do Apache para SVN será criado como /etc/httpd/conf.modules.d/10-subversion.conf. Abra o arquivo e adicione o seguinte bloco de configuração:


<Location /svn>
    DAV svn
    SVNParentPath /websrv/svn
    AuthType Basic
    AuthName "Welcome to SVN"
    AuthUserFile /etc/httpd/subversion-auth
    Require valid-user
</Location>

Nota: No Debian/Ubuntu você precisa adicionar as linhas abaixo em /etc/apache2/mods-enabled/dav_svn.conf arquivo.


<Location /svn>
    DAV svn
    SVNParentPath /websrv/svn
    AuthType Basic
    AuthName "Welcome to SVN"
    AuthUserFile /etc/apache2/subversion-auth
    Require valid-user
</Location>

No Debian/Ubuntu, você precisa ativar o módulo dav_svn Apache:


a2enmod dav_svn

Alguns esclarecimentos:

  1. A diretiva SVNParentPath indica o diretório onde nossos repositórios serão criados posteriormente. Se este diretório não existir (o que provavelmente é o caso), crie-o com:

    
    mkdir -p /websrv/svn
    

    É importante observar que este diretório NÃO deve estar localizado dentro ou sobrepor-se ao DocumentRoot de um host virtual atualmente servido pelo Apache. Isso é um empecilho!

  2. A diretiva AuthUserFile indica o arquivo onde serão armazenadas as credenciais de um usuário válido. Se você deseja permitir que todos acessem o SVN sem autenticação, remova as últimas quatro linhas do bloco Localização. Se for esse o caso, pule a Etapa 2 e vá diretamente para a Etapa 3.
  3. Embora você possa ficar tentado a reiniciar o Apache para aplicar essas alterações recentes, não faça isso ainda, pois ainda precisamos criar o arquivo de autenticação com usuários válidos para SVN e o próprio repositório.

Passo 2 – Adicionar usuários permitidos para acessar o SVN

Agora usaremos htpasswd para criar uma senha para contas que terão permissão para acessar o SVN. Apenas para o primeiro usuário, precisaremos da opção -c.

Contas permitidas e senhas criptografadas com bcrypt (-B) serão armazenadas em /etc/httpd/subversion-auth em pares chave-valor. Observe que, pelos padrões atuais, a criptografia MD5 ou SHA padrão usada pelo htpasswd é considerada insegura.


------------------ On CentOS / RHEL / Fedora ------------------ 
htpasswd -cB /etc/httpd/subversion-auth tecmint

------------------ On Debian / Ubuntu ------------------ 
htpasswd -cB /etc/apache2/subversion-auth tecmint

Não se esqueça de definir a propriedade e as permissões corretas para o arquivo de autenticação:


------------------ On CentOS / RHEL / Fedora ------------------ 
chgrp apache /etc/httpd/subversion-auth
chmod 660 /etc/httpd/subversion-auth

------------------ On Debian / Ubuntu ------------------ 
chgrp www-data /etc/apache2/subversion-auth
chmod 660 /etc/apache2/subversion-auth

Passo 3 – Adicionar Segurança e Criar Repositório SVN

Como você acessará o SVN por meio de uma interface web, será necessário permitir o tráfego HTTP (e opcionalmente HTTPS) através do seu firewall.


------------------ On CentOS / RHEL / Fedora ------------------ 
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload 

Ao recarregar a configuração do firewall com --reload, as configurações permanentes entram em vigor imediatamente.

Crie um repositório SVN inicial chamado tecmint:


svnadmin create /websrv/svn/tecmint

Altere o proprietário e o proprietário do grupo para apache recursivamente:


------------------ On CentOS / RHEL / Fedora ------------------ 
chown -R apache:apache /websrv/svn/tecmint

------------------ On Debian / Ubuntu ------------------ 
chown -R www-data:www-data /websrv/svn/tecmint

Finalmente, você precisará alterar o contexto de segurança de /websrv/svn/tecmint (observe que você terá que repetir esta etapa se decidir criar outros repositórios posteriormente):


------------------ On CentOS / RHEL / Fedora ------------------ 
chcon -R -t httpd_sys_content_t /websrv/svn/tecmint/
chcon -R -t httpd_sys_rw_content_t /websrv/svn/tecmint/

Nota: Os dois últimos comandos podem não se aplicar se você estiver instalando o SVN em um VPS com o SELinux desabilitado.

Leitura sugerida: Aprenda como desativar o SELinux temporária ou permanentemente no Linux

Reinicie o Apache e verifique se o repositório está disponível.


------------------ On CentOS / RHEL / Fedora ------------------ 
systemctl restart httpd

------------------ On Debian / Ubuntu ------------------ 
systemctl restart apache2

Em seguida, inicie um navegador da web e aponte-o para http://192.168.0.100/svn/tecmint. Depois de inserir as credenciais do usuário válido que criamos na Etapa 1, a saída deverá ser semelhante a:

Neste ponto não adicionamos nenhum código ao nosso repositório. Mas faremos isso em um minuto.

Passo 4 – Instale o TortoiseSVN no cliente Windows 7

Como mencionamos na introdução, o TortoiseSVN é uma interface amigável para o Apache Subversion. É um Software Livre licenciado sob a GPL e pode ser baixado em https://tortoisesvn.net/downloads.html.

Escolha a arquitetura (32 ou 64 bits) que corresponde à sua máquina e instale o programa antes de continuar.

Etapa 5 – Configurar o repositório SVN na máquina cliente

Nesta etapa usaremos uma pasta chamada webapp dentro de Documents. Esta pasta contém um arquivo HTML e duas pastas chamadas scripts e estilos com um arquivo Javascript e um arquivo CSS (script.js e styles.css, respectivamente) que queremos adicione ao controle de versão.

Clique com o botão direito em webapp e escolha SVN Checkout. Isso criará uma cópia local do repositório remoto (que está vazio no momento) e inicializará a pasta para controle de versão:

Na URL do repositório, digite http://192.168.0.100/svn/tecmint e certifique-se de que o diretório de checkout local permaneça o mesmo, depois clique em OK:

Digite o nome de usuário e a senha (consulte a Etapa 2) e clique em OK:

Você será perguntado se deseja fazer check-out em um diretório não vazio. Confirme para prosseguir com a finalização da compra. Quando estiver concluído, uma marca de seleção verde aparecerá ao lado do nome da pasta:

Etapa 6 – Confirmar alterações e implantar arquivos no repositório SVN remoto

Clique com o botão direito em webapp novamente e escolha Commit desta vez. A seguir, escreva um comentário descritivo para posteriormente identificar este commit e verifique os arquivos e pastas que deseja implantar no repositório. Por fim, clique em OK:

Dependendo do tamanho dos arquivos, o commit não deve demorar mais de um minuto. Quando estiver concluído, você verá que agora estamos na revisão 1, que corresponde à versão e aos arquivos listados na interface web:

Se houver várias pessoas trabalhando nos mesmos arquivos, você vai querer Atualizar sua cópia local para ter a versão mais recente disponível para trabalhar. Você pode fazer isso clicando com o botão direito em webapp e escolhendo Atualizar no menu de contexto.

Parabéns! Você configurou com sucesso um servidor SVN e enviou/atualizou um projeto simples sob controle de versão.

Resumo

Neste artigo explicamos como instalar e configurar um servidor de repositório Apache Subversion em um servidor CentOS 7 e como submeter alterações a esse repositório usando o TortoiseSVN.

Por favor, note que há muito mais no SVN e no TortoiseSVN do que aquilo que podemos cobrir adequadamente aqui (especialmente como retornar às revisões anteriores), então você pode querer consultar o documento oficial docs (SVN e TortoiseSVN) para mais informações e casos de configuração.

Como sempre, não hesite em nos informar se tiver alguma dúvida! Sinta-se à vontade para usar o formulário de comentários abaixo para entrar em contato conosco a qualquer momento.