Differences between revisions 1 and 8 (spanning 7 versions)
Revision 1 as of 2012-03-09 01:35:39
Size: 2804
Editor: AaronJensen
Comment: Creating page for installing HgWeb on Windows.
Revision 8 as of 2012-03-12 18:50:19
Size: 5299
Editor: AaronJensen
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from HgWebInIISOnWindows
## page was renamed from HgWebOnWindows
Line 3: Line 5:
= Installing HgWeb on Windows = = Installing HgWeb in IIS on Windows =
Line 5: Line 7:
This page describes how to get HgWeb running on Windows Vista/2008 and 7/2008 R2. == Creating the HgWeb Website ==

This page describes how to get Hg``Web running on Windows Vista/2008 and 7/2008 R2.
Line 9: Line 13:
== Installing the Python CGI Handler ==
Line 12: Line 15:
Create a directory for the Hg``Web website. Open Internet Information Services manager. Right-click the '''Sites''' folder and choose '''Add Web Site'''. Fill in your site's settings. (The Physical path should be set to your Hg``Web website directory.) Click OK. Create an Hg``Web website in IIS. We'll call the path to this website's root directory {{{HGWEB_ROOT}}}.
Line 14: Line 17:
Select the Hg``Web website and double-click '''Handler Mappings'''. Click the '''Add Script Map...''' action from the Actions menu (its in the upper right corner). In the '''Add Script Map''' dialog box, enter {{{*.cgi}}} for Request Path, {{{C:\Python26\python.exe -u "%s"}}} for Executable, and {{{Python}}} for Name. Click OK. You will then be prompted to allow the new ISAPI extension. Click Yes. ''If you don't, you'll get 404 errors when you try and execute a cgi script.'' Create a web.config file in {{{HGWEB_ROOT}}}. Edit it to look like this:
Line 16: Line 19:
In your Hg``Web directory, create a text file named test.cgi. Edit it to contain the following text: {{{#!xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="Python" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="PYTHON_HOME\python.exe -u &quot;%s&quot;" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
  </system.webServer>
</configuration>
}}}

You'll then need to enable the Python module. From a command prompt, run:

{{{#!cmd
> C:\Windows\system32\inetsrv\appcmd set config /section:isapiCgiRestriction /+"[path='C:\Python26\python.exe -u %22%s%22',description='Python',allowed='True']"
}}}

You should have everything configured to start running CGI scripts through Python. To test that it's working, create a {{{test.cgi}}} file in {{{HGWEB_ROOT}}}:
Line 25: Line 45:
Save the file. Open a web browser and go to this test.cgi file, e.g. `http://example.com/test.cgi`. If you see '''It Works!''', you've got the Python CGI handler installed correctly.  You can now install Hg``Web. Save the file. Hit the {{{test.cgi}}} file in your web browser. If you see '''It Works!''', you've got the Python CGI handler installed correctly.
Line 27: Line 47:

== Installing HgWeb ==

Create an empty file named {{{hgweb.config}}} in your Hg``Web root directory.
Create an empty file named {{{hgweb.config}}} in your Hg``Web root directory.  This is where the Hg``Web configuration goes once everything is working.
Line 39: Line 56:
config = "DRIVE:\PATH\TO\HGWEB\DIRECTORY\hgweb.config config = "HGWEB_ROOT\hgweb.config"
Line 42: Line 59:
You should now be able to browse to hgweb.cgi (e.g. `http://example.com/hgweb.cgi`) and see the Hg``Web interface. Hit the hgweb.cgi script in your web browse and you should see the Hg``Web interface.

== Configuring URL Rewrite Rules ==

Now, we need to create some URL rewrite rules so that URLs to your repositories don't have {{{hgweb.cgi}}} in them.

First, you'll need to [[http://www.iis.net/download/urlrewrite|download and install version 2 of the Url Rewrite Module]].

Once that is finished, edit the {{{HGWEB_ROOT\web.config}}} file and add the following {{{<rewrite>}}} section under {{{<system.webServer>}}}:

{{{#!xml
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="rewrite to hgwebdir" patternSyntax="Wildcard">
          <match url="*" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          </conditions>
          <action type="Rewrite" url="hgweb.cgi/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
}}}

You should now be able to hit your website ''without'' {{{hgweb.cgi}}} in the URL and see the Hg``Web UI.

== Authenticating Against Active Directory ==

Add the following to your Hg``Web's web.config, in the {{{/configuration/system.webServer/security/authentication}}} section:

{{{#!xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <security>
      <authentication>
        <basicAuthentication enabled="true" realm="YOUR_DOMAIN" defaultLogonDomain="YOUR_DOMAIN" />
        <anonymousAuthentication enabled="true" />
      </authentication>
    </security>
  </system.webServer>
</configuration>
}}}

Replace {{{YOUR_DOMAIN}}} with the name of your Windows domain. Anonymous authentication is enabled so you can support unrestricted repositories (e.g. {{{allow_push=*}}}).

You'll need to unlock the basic authentication configuration section so it can be configured in your web.config:

{{{#!bat
> C:\Windows\system32\inetsrv\appcmd unlock config /section:basicAuthentication
}}}

You can test that authentication is working by adding an {{{allow_push}}} setting to the repository's .hg\hgrc file '''on the server''':

{{{#!ini
allow_push = USERNAME
}}}

Commit a change an attempt a push. You should see a sequence like this:

{{{#!bash
> hg push
pushing to https://localhost:4301/cm
searching for changes
http authorization required
realm: YOUR_DOMAIN
user: USERNAME
password:
}}}

Installing HgWeb in IIS on Windows

1. Creating the HgWeb Website

This page describes how to get HgWeb running on Windows Vista/2008 and 7/2008 R2.

Install Python 2.6. By default, this installs to C:\Python26. On this page, the Python installation folder is referred to as PYTHON_HOME.

Create an HgWeb website in IIS. We'll call the path to this website's root directory HGWEB_ROOT.

Create a web.config file in HGWEB_ROOT. Edit it to look like this:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="Python" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="PYTHON_HOME\python.exe -u &quot;%s&quot;" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
  </system.webServer>
</configuration>

You'll then need to enable the Python module. From a command prompt, run:

> C:\Windows\system32\inetsrv\appcmd set config /section:isapiCgiRestriction /+"[path='C:\Python26\python.exe -u %22%s%22',description='Python',allowed='True']"

You should have everything configured to start running CGI scripts through Python. To test that it's working, create a test.cgi file in HGWEB_ROOT:

   1 print 'Status: 200 OK'
   2 print 'Content-Type: text/html'
   3 print
   4 print '<html><body><h1>It Works!</h1></body></html>'

Save the file. Hit the test.cgi file in your web browser. If you see It Works!, you've got the Python CGI handler installed correctly.

Create an empty file named hgweb.config in your HgWeb root directory. This is where the HgWeb configuration goes once everything is working.

Download and run the Mercurial Python module installer (it's the one whose description says "use this for running hgweb"). After installation, you should see mercurial and hgext directories in your PYTHON_HOME\Lib\site-packages directory. If you don't see those directories, you chose the wrong installer.

Download the hgweb.cgi script for your version of Mercurial. Browse the Mercurial source code. Click the the tag for your version, click Browse in the navigation menu, click the hgweb.cgi script, then right-click Raw from the navigation menu, choose Save As... and save the file into your HgWeb directory.

Open hgweb.cgi and change the value of the config variable to point to the hgweb.config file you created earlier:

   1 config = "HGWEB_ROOT\hgweb.config"

Hit the hgweb.cgi script in your web browse and you should see the HgWeb interface.

2. Configuring URL Rewrite Rules

Now, we need to create some URL rewrite rules so that URLs to your repositories don't have hgweb.cgi in them.

First, you'll need to download and install version 2 of the Url Rewrite Module.

Once that is finished, edit the HGWEB_ROOT\web.config file and add the following <rewrite> section under <system.webServer>:

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="rewrite to hgwebdir" patternSyntax="Wildcard">
          <match url="*" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          </conditions>
          <action type="Rewrite" url="hgweb.cgi/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

You should now be able to hit your website without hgweb.cgi in the URL and see the HgWeb UI.

3. Authenticating Against Active Directory

Add the following to your HgWeb's web.config, in the /configuration/system.webServer/security/authentication section:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <security>
      <authentication>
        <basicAuthentication enabled="true" realm="YOUR_DOMAIN" defaultLogonDomain="YOUR_DOMAIN" />
        <anonymousAuthentication enabled="true" />
      </authentication>
    </security>
  </system.webServer>
</configuration>

Replace YOUR_DOMAIN with the name of your Windows domain. Anonymous authentication is enabled so you can support unrestricted repositories (e.g. allow_push=*).

You'll need to unlock the basic authentication configuration section so it can be configured in your web.config:

> C:\Windows\system32\inetsrv\appcmd unlock config /section:basicAuthentication

You can test that authentication is working by adding an allow_push setting to the repository's .hg\hgrc file on the server:

allow_push = USERNAME

Commit a change an attempt a push. You should see a sequence like this:

> hg push
pushing to https://localhost:4301/cm
searching for changes
http authorization required
realm: YOUR_DOMAIN
user: USERNAME
password:

HgWebInIisOnWindows (last edited 2018-04-16 13:04:02 by PeterSuter)