في الآونة الأخيرة ، اكتشفت بالصدفة أن BitBucket ، حيث توجد مستودعات Mercurial الخاصة بي ، يتوقف عن دعم Mercurial: لم يعد من الممكن إنشاء مستودعات جديدة ، وسيتم حذف المستودعات الحالية من 1.06.2020. الخيارات الممكنة: انتقل إلى Git ، أو اختر إحدى الخدمات الأخرى ، أو قم بإعداد استضافة Mercurial على الخادم الخاص بك. لدي خادم ، ولا أريد التخلي عن Mercurial وتغيير عاداتي ، ولم يعجبني بدائل BitBucket أيضًا ، لذلك اخترت الخيار الأخير. تبدو المهمة بسيطة ، فقط الخادم يعمل بنظام Windows ، ويبدو أنه خلال عملية الإعداد تمكنت من تجاوز الحد الأقصى الممكن من أشعل النار. نأمل أن تساعد هذه المقالة شخصًا ما على تجنب ذلك وتوفير بعض الوقت.
يتم وصف الخيارات المختلفة لتنظيم استضافة Mercurial في الوثائق . يمكن تقسيمها إلى 3 مجموعات:
- زئبق يخدم - أي يبدأ Mercurial نفسه في وضع الخادم.
- HgWeb.cgi هو البرنامج النصي الرسمي المتضمن في توزيع Mercurial.
- الحلول من المطورين الخارجيين أكثر وظيفية ، ولكن مع قيودها وغالبا ما تدفع.
HG SERVE
الخيار الأبسط والأكثر منطقية هو الخيار الأول. وفقًا للتوثيق ، يحتوي Mercurial على خادم ويب مدمج يقوم بتشغيل HgWeb - وهذا ما يعمل عند تشغيل خدمة hg . لا يعرف هذا الخادم كيفية إجراء المصادقة ، أي لا يمكن طلب تسجيل دخول المستخدم / كلمة المرور ، ولكن يمكنه الحصول على إذن ، أي منح / عدم منح هذا النوع أو ذاك من الوصول إلى المستودعات وفقًا لإعدادات الوصول. إذا كنا بحاجة إلى مستودعات خاصة ، فعندئذ للمصادقة ، يمكنك استخدام Nginx كخادم وكيل يطلب كلمة مرور. يوصف إنشاء مثل هذه الدائرة هنا .
من أجل الراحة ، يتم إطلاق خدمة hg في شكل خدمة تستخدم winsw ، وهي أداة تتيح لك تشغيل أي أمر في شكل خدمة (في هذه الحالة ، يكون هذا ملف خفافيش بشكل عام). ومع ذلك ، لبدء التشغيل ، من الممكن الاستغناء عن الخدمة ، ولكن ، على سبيل المثال ، إنشاء مهمة في "برنامج جدولة المهام" باستخدام المشغل "عند بدء تشغيل النظام" - سيتم تشغيل هذه المهمة عند بدء تشغيل النظام. ولكن هذا خيار أقل موثوقية: في حالة الفشل ، لن يتم إعادة تشغيل المهمة ، ولن تكون هناك معلومات حول ذلك في السجلات.
كن حذرا مع ملفات التكوين (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 , , :-)