Setting up mercurial with HTTP authentication - Windows
This page describes a complete set of steps for installing hg as a windows service, along with nginx for HTTP proxy authentication. As it is, it is most appropriate for intranet configurations but by adding HTTPS to the mixture, the world is your sea food...
Wish list: - We use mercurial in "hg serve" mode - For HTTP authentication, we use nginx - For nginx/hg windows service integration, we use “Windows Service Wrapper”
1. Download necessary files
“Windows Service Wrapper” - http://maven.dyndns.org/2/com/sun/winsw/
- nginx windows binary
- mercurial windows binary
2. Configuration
- Unzip nginx in c:\nginx
- Copy winsw-1.9-bin.exe in c:\nginx and rename to nginx-service.exe
- Create file nginx-service.xml with the following contents:
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<executable>c:\nginx\nginx.exe</executable>
<logpath>c:\nginx\servicelogs</logpath>
<logmode>roll</logmode>
<depend>Mercurial</depend>
<startargument>-p c:\nginx</startargument>
<stopargument>-p c:\nginx -s stop</stopargument>
</service>
- Configure nginx with the following setup (save as c:\nginx\nginx.conf)
- server {
- listen 5000; server_name mis-srv; access_log logs/mis-srv.access.log; error_log logs/mis-srv.error.log; location / {
- auth_basic "Mercurial restricted"; auth_basic_user_file passwd;
proxy_pass http://localhost:5500;
- auth_basic "Mercurial restricted"; auth_basic_user_file passwd;
- listen 5000; server_name mis-srv; access_log logs/mis-srv.access.log; error_log logs/mis-srv.error.log; location / {
Create a password file at conf/passwd, using htpasswd (get from an apache installation) WARNING: On Windows, the passwd file can only contain plaintext passwords
- Install mercurial binary
- Create directory for mercurial installation as a service, at c:\nginx\hg
- Copy winsw-1.9-bin.exe in c:\nginx and rename to hg-service.exe
- Create file hg-service.xml with the following contents:
<service>
<id>Mercurial</id>
<name>Mercurial</name>
<description>Mercurial</description>
<executable>cmd.exe</executable>
<logpath>c:\nginx\hg\servicelogs</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>/c "c:\nginx\hg\hg-run start"</startargument>
<stopargument>/c "c:\nginx\hg\hg-run stop"</stopargument>
</service>
- Create file hg-run.bat with the following contents:
- @echo off if "%1"=="start" (goto :start)
:stop
- taskkill /F /IM hg.exe /T goto :end
:start
- "c:\Program Files\Mercurial\hg.exe" serve --address localhost --port 5500 --web-conf c:\nginx\hg\hgweb.conf
:end
- Create file hgweb.conf with the following contents:
[web]
push_ssl = false
allow_push = *
[paths]
test = c:\nginx\hg\repository\test
- Install services, by starting a command line, cd-ing to c:\nginx and executing the following commands:
c:\nginx> nginx-service install
c:\nginx> hg-service install
And that's all!