Instalando o Mercurial no IIS como um handler ISAPI e integrado ao AD
Estou montando a estrutura para um novo projeto e como não tinhamos licença para o Team Foundation Server, partimos para alternativas livres.
Escolhemos o Mercurial, porém, como eu não queria instalar o Apache no novo servidor somente para o Mercurial, ele deveria rodar no IIS.
Nosso servidor esta rodando o Windows Server 2008 R2 Enterprise (consequentemente, o IIS 7.5 e 64 bits). Segue os passos detalhados (que estão comentados no fonte do Mercurial) que eu segui para instalação:
- Instalar o Python na versão 2.6.6 32 bits (sim, tentei com a 64 bits, mas não consegui fazer funcionar).
- (Opcional) Adicione o Python ao PATH nas variáveis de ambiente do Windows.
- Instale o PyWin32 (Python for Windows extensions).
- Instale o isapi-wsgi - O instalador do não funcionou para mim, então baixei o EGG e fiz os seguintes passos para instala-lo:
- Baixe o Easy Install.
- Compile o Easy Install:
python ez_setup.py - Mande o Easy Install instalar o isapi-wsgi pelo EGG:
easy_install isapi_wsgi-0.4.2-py2.5.egg
- Baixe o código fonte do Mercurial e extraia ele.
- Após compile o Mercurial:
python setup.py --pure build_py -c -d . build_ext -i build_mo --force
python setup.py --pure install –force - Agora vamos gerar a DLL do handler ISAPI:
- Copie o arquivo “hgwebdir_wsgi.py” que está na pasta “contrib\win32” do código fonte do Mercurial para a pasta onde estará sua aplicação do IIS.
- Crie um arquivo “hgweb.config” na pasta onde está o “hgwebdir_wsgi.py” (esse arquivo .config não tem nada haver com os .config do .net).
- O conteúdo do arquivo deve ser assim:
[paths]
yourRepoName = c:\yourRepoLocation - Edite o “hgwebdir_wsgi.py”:
- Coloque o caminho para o “hgweb.config” na variável “hgweb_config”:
hgweb_config = r'C:\inetpub\hg\hgweb.config' - Edite a variável “path_prefix” de acordo com a sua necessidade:
path_prefix = 0- Se você irá configurar o Mercurial como um site raiz no IIS.path_prefix = 1- Se você irá configurar o Mercurial como uma aplicação num diretório no IIS.
- Coloque o caminho para o “hgweb.config” na variável “hgweb_config”:
- Execute o arquivo “hgwebdir_wsgi.py”:
python hgwebdir_wsgy.py - Deverá aparecer a mensagem “installation complete” e a dll “_hgwebdir_wsgy.dll” deverá estar na pasta.
- Agora vamos configurar o IIS (O suporte a ISAPI deverá estar instalado):
- Crie um novo Application Pool:
Name: Mercurial (você que escolhe)
.Net Framework version: No Managed Code
Managed pipeline mode: Integrated - IMPORTANTE: O Application Pool deve permitir aplicações 32 bits:
- Selecione o Application Pool criado.
- Clique em Advanced Settings.
- Coloque “Enable 32-Bit Applications” como “True”.
- Crie um novo site (ou aplicação) e escolha a Application Pool criada no passo anterior e aponte o diretório para onde está o arquivo “hgwebdir_wsgi.py” e a DLL criada.
- Adicione o Handler:
- Escolha o site criado, e vá em “Handler Mappings”.
- Clique em “Add Module Mapping”.
- Na janela que abrir:
Request Path: *
Module: IsapiModule
Executable: A DLL gerada no passo 7.6 (Para mim: C:\inetpub\hg\_hgwebdir_wsgi.dll)
Name: Mercurial-ISAPI (Você que escolhe) - Na mesma janela, clique em “Request Restrictions…” e na aba “Access” marque a opção “Execute”.
- Na tela de “Handler Mappings” clique em “Edit Feature Permissions…” e marque a opção “Execute”.
- Você pode remover todos os outros Mappings se desejar.
- Crie um novo Application Pool:
- O Mercurial deve estar funcionando!
- Vamos agora adicionar autenticação com o AD:
- Selecione o site (ou aplicação) criado e va em “Authentication”.
- Desabilite a “Anonymous Authentication”.
- Habilite a “Basic Authentication” (O Mercurial só suporta Basic).
- Edite a “Basic Authentication” para o seu domínio.
- Uma boa idéia seria configurar o SSL, já que via “Basic Authentication” o usuário e senha trafegam pela rede em texto plano. Não habilitei o SSL pois vamos utilizar o Mercurial somente na Intranet.
- Pronto!
Idéias / Dicas:
- Se você for usar o Mercurial com .Net, remova no “Request Filtering” do IIS, os “File Name Extensions” e os “Hidden Segments”, pois ele nega acesso a várias extensões de arquivos e pastas do .Net.
- Realmente remova os Handler Mappings.
- Não esqueça de liberar o site no Firewall do Windows.
- O “hgweb.config” permite uma série de configurações, entre elas setar uma pasta com vários repositórios para ser publicada.
- Aqui estão os meus arquivos: Download