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:
- hg servir - ou seja, O Mercurial em si inicia no modo de servidor.
- HgWeb.cgi é o script oficial incluído na distribuição Mercurial.
- 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/ {
include fastcgi.conf;
fastcgi_split_path_info ^()(.*)$;
fastcgi_param SCRIPT_NAME "";
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param AUTH_USER "pub";
fastcgi_param REMOTE_USER "pub";
fastcgi_pass 127.0.0.1:5500;
}
— Base
.
, . ( , Python , , :-)