Kürzlich habe ich versehentlich herausgefunden , dass BitBucket, in dem sich meine Mercurial-Repositorys befinden, Mercurial nicht mehr unterstützt: Es ist nicht mehr möglich, neue Repositorys zu erstellen, und vorhandene werden ab dem 1.06.2020 gelöscht. Mögliche Optionen: Gehen Sie zu Git, wählen Sie einen der anderen Dienste aus oder richten Sie das Mercurial-Hosting auf Ihrem Server ein. Ich habe einen Server, möchte Mercurial nicht aufgeben und meine Gewohnheiten ändern. Die Alternativen zu BitBucket haben mir auch nicht gefallen, daher habe ich die letzte Option gewählt. Die Aufgabe scheint einfach zu sein, nur der Server befindet sich unter Windows, und es scheint, dass ich es während des Setup-Vorgangs geschafft habe, auf den maximal möglichen Rake zu treten. Hoffe, dieser Artikel hilft jemandem, dies zu vermeiden und Zeit zu sparen.
In der Dokumentation werden verschiedene Optionen zum Organisieren von Mercurial-Hosting beschrieben . Sie können in 3 Gruppen unterteilt werden:
- hg dienen - d.h. Mercurial selbst startet im Servermodus.
- HgWeb.cgi ist das offizielle Skript, das in der Mercurial-Distribution enthalten ist.
- Lösungen von externen Entwicklern sind funktionaler, aber mit ihren Einschränkungen und oft bezahlt.
HG SERVE
Die einfachste und logischste ist die 1. Option. Laut Dokumentation verfügt Mercurial über einen integrierten Webserver, auf dem HgWeb ausgeführt wird - genau das funktioniert, wenn wir hg serve ausführen . Dieser Server weiß nicht, wie eine Authentifizierung durchzuführen ist, d. H. kann kein Benutzer-Login / Passwort anfordern, kann aber eine Autorisierung durchführen, d.h. Geben Sie diesen oder jenen Zugriff auf Repositorys gemäß den Zugriffseinstellungen. Wenn wir private Repositorys benötigen, können Sie Nginx zur Authentifizierung als Proxyserver verwenden, der ein Kennwort anfordert. Der Aufbau einer solchen Schaltung wird hier beschrieben .
hg serve winsw — , ( bat-). , , , , Task Scheduler "At system startup" — . : , .
(hgweb.conf / hgrc):
- : , ,
[Web]
[web]
— . - :
push_ssl=false
— , push_ssl = false
.
, Mercurial push , "Hello world", . Nginx :
client_max_body_size 500M;
proxy_read_timeout 120s;
, , .
hgweb.conf . ( ), : /.hg/hgrc , , , .
, Mercurial , Nginx. : Mercurial , Nginx . Nginx :
proxy_set_header REMOTE_USER $remote_user;
:
proxy_set_header X-Forwarded-User $remote_user;
:( HgWeb, ENV('REMOTE_USER'), — .
, Nginx 2 ( ) hg serve, hgweb.conf
. , hgweb.conf
( ) . , . .
HgWeb.cgi
, Python- HgWeb. Mercurial , . , (CGI) , — WSGI FCGI.
Nginx CGI, WSGI WSGI- ( Windows ), FCGI — FastCGI. Python, , Python , Mercurial — 2.7. , 2.7. HgWeb Python Flup, , ( Python 2.7). :
pip install flup==1.0.3.dev-20110405
hgweb.fcgi — ( ) , ( ):
WSGIServer(application, bindAddress=("127.0.0.1",5500)).run()
Nginx:
location / {
auth_basic "My Repos";
auth_basic_user_file passwd;
include fastcgi.conf;
fastcgi_split_path_info ^()(.*)$;
fastcgi_param SCRIPT_NAME "";
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_pass 127.0.0.1:5500;
}
location /static/ {
root e:/Mercurial/templates;
}
fastcgi.conf
, fastcgi location
. PATH_INFO
— . url , PATH_INFO.
:
python hgweb.fcgi
!
hg serve, HgWeb . winsw. bat-:
@echo off
if "%1"=="start" (goto :start)
:stop
taskkill /F /IM python-hg.exe /T
goto :end
:start
"c:\Python27\python-hg.exe" e:\Mercurial-5.3\hgweb.fcgi
:end
, python.exe
python-hg.exe
taskkill
.
: "Local System" — ! , .
, HgWeb ( hg serve) . : , , Nginx location
. :
location /Base/ {
include fastcgi.conf;
fastcgi_split_path_info ^()(.*)$;
fastcgi_param SCRIPT_NAME "";
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param AUTH_USER "pub";
fastcgi_param REMOTE_USER "pub";
fastcgi_pass 127.0.0.1:5500;
}
— Base
.
, . ( , Python , , :-)