terça-feira, 26 de janeiro de 2010

Os Modos de Configuração do SVN (Server Configuration)

O SVN (ou Subversion) é um controlador de versões dentre os mais populares, que pode ser usado não só por desenvolvedores, mas por qualquer um que queira fazer cópias de segurança versionadas de seus arquivos de trabalho, quaisquer que sejam estes.
Este artigo explana sobre os 3 modos de configuração do servidor. Note que nossa intenção não é ensinar como se configura cada modo detalhadamente, mas apenas descrever e caracterizar o seu uso, para contribuir na escolher mais apropriada. Há um outro artigo contendo um tutorial de configuração mais avançado, que pode ser acessado aqui.

  • Modo Serviço
Este é o modo mais simples e fácil de configurar. Muito possivelmente deve ser o primeiro a ser testado, para quem está configurando o subversion pela primeira vez. Neste modo, o SVN entra em cena como um serviço (deamon) e fica rodando ininterruptamente, esperando por requisições.

Suas principais características: fácil e rápido de configurar, funciona mais rápido, não usa senhas nem configuração de contas no SVN.

Como funciona?
O administrador inicia o SVN no boot do linux, como um serviço, ou digitando o comando:

svnserve -d

(-d de deamon, para iniciar o serviço). Lembre-se de liberar no firewall a porta padrão: 3690, ou especifique outra porta, com as opções --listen-port= e --listen-host= no servidor e no cliente svn.
O usuário deve ter uma conta no sistema linux e vai usar a sua conta para acessar o serviço. O acesso deve usar o protocolo svn://, como no exemplo:

svn checkout svn://maquina/opt/svn/projeto

Desvantagens: todo mundo que vai usar precisa ter uma conta no sistema!! Além disso, este modo expõe o caminho do repositório, não tem encriptação ou qualquer forma de segurança, não exige senhas e está sujeito a problemas de permissão de arquivos e diretórios (que vira rapidamente um verdadeiro inferno, mesmo para poucos usuários!!).

Recomendamos para situações muito simples, como:
- Um usuário que quer manter um backup mais ou menos constante de algumas pastas de seu diretório de trabalho (em outra partição do HD ou outro local externo qualquer, como um HD externo ou um super pendrive) .
- Pode ser usado por grupos muito pequenos de desenvolvedores, como um grupo da faculdade, um grupo de colegas, etc., que resolveram montar um servidor a partir de uma máquina antiga para desenvolver um projeto único e específico, num prazo pequeno e temporário.

Nestes casos, não se perde tempo com configurações sofisticadas e não se deixa de aproveitar as incríveis vantagens de se ter o trabalho todo versionado. Não esqueça de fazer backups constantes e de procurar manter o repositório em um local diferente, como outra partição ou outro HD.


  • SVN sobre SSH

Esta é uma opção semelhante à anterior, porém com a segurança dos dados transmitidos e recebidos sempre sobre um túnel de SSH. Ela é possível porque o SSH permite que seja passado, via linha de comando, um argumento contendo o comando a ser chamado após aberta a conexão. Isto provoca um tunelamento: o SSH abre a conexão, roda imediatamente o comando (o svnserve -t) e fecha automaticamente a conexão, depois que o comando terminou de executar.
Nesta opção, o SVN não precisa ser carregado na memória como serviço. Na verdade, ele é carregado com a opção "-t" (de tunnel) e encerrado a cada requisição. Todo o tráfego de dados ocorre pela entrada e saída padrão, via SSH.
O servidor pode ser acessado pelo protocolo svn+ssh://, como no exemplo:

svn checkout svn+ssh://usuario@maquina/opt/svn/projeto
usuario@maquina's password: ******

Importante:
- É preciso liberar a porta do firewall para o SSH tornar-se acessível.
- O segredo deste modo está na configuração correta do SSH, que não poderá enviar mensagens de boas-vindas, pois, como o tráfego é via entrada e saída padrão, estas mensagens vão gerar erros de interpretação no SVN. Um artigo que escrevi ensinando a configurar o SSH para o SVN funcionar corretamente pode ser encontrado aqui.
- Todos os usuários precisam ter contas no sistema linux do servidor e, portanto, é preciso que se tome muito cuidado com as permissões do usuário para acessar o repositório.

Recomendamos para:
- Grupos de desenvolvedores, em locais diferentes, que acessam o servidor pela internet ou intranet.


  • Modo WebDAV: Usando o Serviço HTTP ou HTTPS do Apache
Este é o modo mais sofisticado, mais flexível e seguro, sendo largamente utilizado, especialmente para grandes projetos com inúmeros desenvolvedores.
Funciona da seguinte maneira: apenas um usuário vai realmente acessar o subversion. Este usuário será utilizado pelo servidor HTTP Apache, pois este servidor pode incluir um módulo que suporta o protocolo WebDAV/DeltaV, uma extensão do HTTP que permite a usuários autenticar-se e autorizar-se para manipular arquivos remotamente, de forma colaborativa. O usuário remoto apenas faz as chamadas HTTP para o Apache, que as traduz para o SVN. Este protocolo pode, obviamente, ser encriptado via SSL, tornando o tráfego mais seguro.

Vantagens:
- Não é preciso criar contas locais para os desenvolvedores;
- É possível se obter todas as vantagens do servidor HTTP Apache, como a encriptação via SSL, uso do Apache Logging e uma navegação gráfica pelo repositório na tela do navegador;
- O repositório pode ser montado como um dispositivo (drive) de rede;
- Pode ser integrado com LDAP, Active Directory, NTLM e congêneros.

Desvantagens:
- Certamente, é muito mais lento, devido à complexidade e à multiplicidade de camadas;
- É muito mais complexo de se configurar;
- Necessita de um servidor mais poderoso, para rodar o SVN e o Apache com todos os requisitos do WebDAV e suportando múltiplas Threads sem perda de desempenho (o módulo mod_dav_svn do Apache necessita do Apache 2).


  • Finalizando...

Uma excelente tabela comparativa entre os 3 modos pode ser encontrada aqui.

- Os seus dados estão sempre no repositório, e não no SVN. O repositório pode sofrer Dumps e backups, podendo ser acessado de diferentes formas e modos. Seus dados podem ser exportados e importados para outros repositórios. Portanto, começar usando um modo mais simples não o impede de, mais tarde, reconfigurar o SVN e migrar para o Apache com WebDAV.

- Preocupe-se em escolher o modo que mais se encaixa no seu contexto de trabalho: não vale a pena perder horas instalando e configurando corretamente o Apache 2, o módulo DAV e o SVN para um projeto muito pequeno e de poucos desenvolvedores. Por outro lado, um projeto grande e importante não pode ficar sujeito a criação de muitas contas no servidor, problemas de permissão e acessos sem segurança...

- O que quer que você faça: sempre mantenha rotina de backup e, se possível, use o repositório em outro local diferente da partição ou disco onde está instalado seu sistema. Se algo der errado e seu sistema de arquivos se corromper, os dados estarão sempre seguros...

2 comentários:

Roger disse...

Muito bom esse artigo. Atualmente estou aprendendo mais sobre SVN e não sabia que existia esses três modos.

O Pajé disse...

Beleza, Roger!! Existem outros artigos sobre SVN no Pajé. Boa leitura e boa sorte!!