Gerando o Mercurial em um servidor Windows (com Nginx)

Recentemente, descobri acidentalmente que o BitBucket, onde estão meus repositórios do Mercurial, deixa de oferecer suporte ao Mercurial: não é mais possível criar novos repositórios, e os existentes serão excluídos de 1.06.2020. Opções possíveis: acesse o Git, escolha um dos outros serviços ou configure a hospedagem do Mercurial no seu servidor. Eu tenho um servidor, não quero desistir do Mercurial e mudar meus hábitos, também não gostei das alternativas ao BitBucket, por isso escolhi a última opção. A tarefa parece ser simples, apenas o servidor está no Windows e parece que durante o processo de configuração eu consegui pisar no rake máximo possível. Espero que este artigo ajude alguém a evitar isso e economize algum tempo.


Várias opções para organizar a hospedagem do Mercurial estão descritas na documentação . Eles podem ser divididos em 3 grupos:


  1. hg servir - ou seja, O Mercurial em si inicia no modo de servidor.
  2. HgWeb.cgi é o script oficial incluído na distribuição Mercurial.
  3. As soluções de desenvolvedores externos são mais funcionais, mas com limitações e geralmente pagas.

HG SERVE


A mais simples e mais lógica é a 1ª opção. De acordo com a documentação, o Mercurial possui um servidor da Web interno que executa o HgWeb - é isso que funciona quando executamos o hg serve . Este servidor não sabe como fazer autenticação, ou seja, não pode solicitar o login / senha do usuário, mas pode autorizar, ou seja, conceder / não conceder este ou aquele tipo de acesso aos repositórios de acordo com as configurações de acesso. Se precisarmos de repositórios particulares, para autenticação, você poderá usar o Nginx como um servidor proxy que solicitará uma senha. A instalação desse circuito é descrita aqui .


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