Elevar Mercurial en un servidor de Windows (con Nginx)

Recientemente, accidentalmente encontré que BitBucket, donde se encuentran mis repositorios Mercurial, deja de apoyar Mercurial: ya no es posible crear nuevos repositorios, y las existentes se eliminará de 06.01.2020. Opciones posibles: vaya a Git, elija uno de los otros servicios o configure el alojamiento Mercurial en su servidor. Tengo un servidor, no quiero renunciar a Mercurial y cambiar mis hábitos, tampoco me gustaron las alternativas a BitBucket, así que elegí la última opción. La tarea parece ser simple, solo el servidor está bajo Windows, y parece que durante el proceso de configuración logré pisar el rastrillo máximo posible. Espero que este artículo ayude a alguien a evitar esto y ahorrar algo de tiempo.


En la documentación se describen varias opciones para organizar el alojamiento Mercurial . Se pueden dividir en 3 grupos:


  1. hg servir - es decir Mercurial se inicia en modo servidor.
  2. HgWeb.cgi es el script oficial incluido en la distribución Mercurial.
  3. Las soluciones de desarrolladores externos son más funcionales, pero con sus limitaciones y, a menudo, de pago.

HG SERVE


La más simple y lógica es la primera opción. Según la documentación, Mercurial tiene un servidor web incorporado que ejecuta HgWeb; esto es lo que funciona cuando ejecutamos hg serve . Este servidor no sabe cómo hacer la autenticación, es decir no puede solicitar el inicio de sesión / contraseña del usuario, pero puede hacer una autorización, es decir dar / no dar este o aquel tipo de acceso a los repositorios de acuerdo con la configuración de acceso. Si necesitamos repositorios privados, para la autenticación, puede usar Nginx como un servidor proxy que solicitará una contraseña. La configuración de dicho circuito se describe aquí .


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