Meningkatkan Mercurial di server Windows (dengan Nginx)

Baru-baru ini, saya secara tidak sengaja menemukan bahwa BitBucket, tempat repositori Mercurial saya berada, berhenti mendukung Mercurial: tidak mungkin lagi membuat repositori baru, dan yang sudah ada akan dihapus dari 1.06.2020. Opsi yang memungkinkan: buka Git, pilih salah satu layanan lain , atau atur hosting Mercurial di server Anda. Saya memiliki server, saya tidak ingin menyerah Mercurial dan mengubah kebiasaan saya, saya juga tidak suka alternatif untuk BitBucket, jadi saya memilih opsi terakhir. Tugasnya tampaknya sederhana, hanya server di bawah Windows, dan tampaknya selama proses pengaturan saya berhasil menginjak penggaruk semaksimal mungkin. Semoga artikel ini membantu seseorang menghindari ini dan menghemat waktu.


Berbagai opsi untuk mengatur hosting Mercurial dijelaskan dalam dokumentasi . Mereka dapat dibagi menjadi 3 kelompok:


  1. hg serve - i.e. Mercurial sendiri dimulai dalam mode server.
  2. HgWeb.cgi adalah skrip resmi yang termasuk dalam distribusi Mercurial.
  3. Solusi dari pengembang eksternal lebih fungsional, tetapi dengan keterbatasan dan sering dibayar.

HG MELAYANI


Pilihan paling sederhana dan paling logis adalah pilihan pertama. Menurut dokumentasi, Mercurial memiliki server web built-in yang menjalankan HgWeb - itulah yang berfungsi ketika kita menjalankan hg serve . Server ini tidak tahu bagaimana melakukan otentikasi, mis. tidak dapat meminta login / kata sandi pengguna, tetapi dapat melakukan otorisasi, yaitu berikan / tidak berikan ini atau itu jenis akses ke repositori sesuai dengan pengaturan akses. Jika kita memerlukan repositori pribadi, maka untuk otentikasi kita dapat menggunakan Nginx sebagai server proxy yang akan meminta kata sandi. Menyiapkan sirkuit seperti itu dijelaskan di sini .


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