Mercurial auf einem Windows-Server auslösen (mit Nginx)

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:


  1. hg dienen - d.h. Mercurial selbst startet im Servermodus.
  2. HgWeb.cgi ist das offizielle Skript, das in der Mercurial-Distribution enthalten ist.
  3. 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/ {   # Base -  ,     
       include fastcgi.conf;
       fastcgi_split_path_info ^()(.*)$;
       fastcgi_param  SCRIPT_NAME        "";
       fastcgi_param  PATH_INFO          $fastcgi_path_info;
       fastcgi_param  AUTH_USER          "pub";   #      hg ( )
       fastcgi_param  REMOTE_USER        "pub";
       fastcgi_pass 127.0.0.1:5500;
    }

Base .


, . ( , Python , , :-)

Source: https://habr.com/ru/post/undefined/


All Articles