Augmenter Mercurial sur un serveur Windows (avec Nginx)

RĂ©cemment, j'ai accidentellement dĂ©couvert que BitBucket, oĂč se trouvent mes rĂ©fĂ©rentiels Mercurial, cesse de prendre en charge Mercurial: il n'est plus possible de crĂ©er de nouveaux rĂ©fĂ©rentiels, et les existants seront supprimĂ©s Ă  partir du 1.06.2020. Options possibles: accĂ©dez Ă  Git, choisissez l' un des autres services ou configurez l'hĂ©bergement Mercurial sur votre serveur. J'ai un serveur, je ne veux pas abandonner Mercurial et changer mes habitudes, je n'aimais pas non plus les alternatives Ă  BitBucket, j'ai donc choisi la derniĂšre option. La tĂąche semble ĂȘtre simple, seul le serveur est sous Windows, et il semble que pendant le processus d'installation, j'ai rĂ©ussi Ă  marcher sur le rake maximum possible. J'espĂšre que cet article aide quelqu'un Ă  Ă©viter cela et Ă  gagner du temps.


Diverses options pour organiser l'hĂ©bergement Mercurial sont dĂ©crites dans la documentation . Ils peuvent ĂȘtre divisĂ©s en 3 groupes:


  1. hg servir - c.-Ă -d. Mercurial lui-mĂȘme dĂ©marre en mode serveur.
  2. HgWeb.cgi est le script officiel inclus dans la distribution Mercurial.
  3. Les solutions de développeurs externes sont plus fonctionnelles, mais avec leurs limites et souvent payantes.

HG SERVE


La plus simple et la plus logique est la 1Úre option. Selon la documentation, Mercurial dispose d'un serveur Web intégré qui exécute HgWeb - c'est ce qui fonctionne lorsque nous exécutons hg serve . Ce serveur ne sait pas comment faire l'authentification, c'est-à-dire ne peut pas demander le login / mot de passe de l'utilisateur, mais peut faire une autorisation, par ex. donner / ne pas donner tel ou tel type d'accÚs aux référentiels conformément aux paramÚtres d'accÚs. Si nous avons besoin de référentiels privés, pour l'authentification, vous pouvez utiliser Nginx comme serveur proxy qui demandera un mot de passe. La configuration d'un tel circuit est décrite ici .


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