Chapters ▾ 2nd Edition

4.6 گیت روی سرور (Git on the server) - HTTP هوشمند (Smart HTTP)

HTTP هوشمند (Smart HTTP)

ما اکنون دسترسی احراز هویت شده از طریق SSH و دسترسی بدون احراز هویت از طریق git:// داریم، اما پروتکلی نیز وجود دارد که می‌تواند هر دو را همزمان انجام دهد. راه‌اندازی Smart HTTP اساساً فقط فعال کردن یک اسکریپت CGI است که با گیت ارائه می‌شود و در سرور git-http-backend نام دارد. (دستورات گیت، "http-backend") این CGI مسیر و هدرهای ارسال شده توسط git fetch یا git push به یک URL HTTP را می‌خواند و تعیین می‌کند که آیا کلاینت می‌تواند از طریق HTTP ارتباط برقرار کند (که برای هر کلاینتی از نسخه ۱.۶.۶ به بعد درست است). اگر CGI ببیند که مشتری باهوش است، با او هوشمندانه ارتباط برقرار می‌کند؛ در غیر این صورت به رفتار ساده‌لوحانه بازمی‌گردد (بنابراین برای خواندن با مشتریان قدیمی‌تر سازگار با نسخه‌های قبلی است).

بیایید یک راه‌اندازی بسیار ساده را مرور کنیم. ما این را با آپاچی به عنوان سرور CGI راه‌اندازی خواهیم کرد. اگر آپاچی را راه‌اندازی نکرده‌اید، می‌توانید این کار را روی یک سرور لینوکس با چیزی شبیه این انجام دهید:

$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env

این همچنین ماژول‌های mod_cgi، mod_alias و mod_env را فعال می‌کند که همگی برای عملکرد صحیح این کار لازم هستند.

همچنین باید گروه کاربری یونیکس دایرکتوری‌های /srv/git را روی www-data تنظیم کنید تا سرور وب شما بتواند به مخازن دسترسی خواندن و نوشتن داشته باشد، زیرا نمونه آپاچی که اسکریپت CGI را اجرا می‌کند (به طور پیش‌فرض) با آن کاربر اجرا خواهد شد:

$ chgrp -R www-data /srv/git

بعداً باید چیزهایی به پیکربندی آپاچی اضافه کنیم تا git-http-backend را به عنوان هندلر هر چیزی که به مسیر /git سرور وب شما می‌آید، اجرا کنیم.

SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

اگر متغیر محیطی GIT_HTTP_EXPORT_ALL را حذف کنید، گیت فقط مخزن‌هایی را که فایل git-daemon-export-ok در آن‌ها وجود دارد، درست مانند گیت دیمون، به کلاینت‌های بدون احراز هویت سرویس می‌دهد.

در نهایت، می‌خواهید به آپاچی بگویید که درخواست‌ها به git-http-backend را مجاز کند و نوشتن‌ها را به نوعی احراز هویت کند، احتمالاً با یک بلوک Auth مانند این:

<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /srv/git/.htpasswd
    Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
    Require valid-user
</Files>

این کار مستلزم ایجاد یک فایل .htpasswd است که حاوی رمز عبور تمام کاربران معتبر باشد. در اینجا نمونه‌ای از اضافه کردن کاربر “schacon” به فایل آورده شده است:

$ htpasswd -c /srv/git/.htpasswd schacon

راه‌های زیادی برای احراز هویت کاربران توسط آپاچی وجود دارد، شما باید یکی از آن‌ها را انتخاب و پیاده‌سازی کنید. این فقط ساده‌ترین مثالی بود که توانستیم به آن برسیم. همچنین تقریباً مطمئناً می‌خواهید این را روی SSL راه‌اندازی کنید تا تمام این داده‌ها رمزگذاری شوند.

ما نمی‌خواهیم خیلی وارد جزئیات پیکربندی آپاچی شویم، زیرا ممکن است شما از سرور دیگری استفاده کنید یا نیازهای احراز هویت متفاوتی داشته باشید. ایده این است که گیت همراه با یک CGI به نام git-http-backend ارائه می‌شود که هنگام فراخوانی، تمام مذاکرات برای ارسال و دریافت داده‌ها از طریق HTTP را انجام می‌دهد. خودش هیچ احرازی هویت را پیاده‌سازی نمی‌کند، اما این را می‌توان به راحتی در لایه وب سروری که آن را فراخوانی می‌کند، کنترل کرد. شما می‌توانید این کار را تقریباً با هر سرور وب دارای قابلیت CGI انجام دهید، بنابراین سروری را انتخاب کنید که بهترین شناخت را از آن دارید.

یادداشت

برای اطلاعات بیشتر در مورد پیکربندی احراز هویت در آپاچی، مستندات آپاچی را در اینجا بررسی کنید: https://httpd.apache.org/docs/current/howto/auth.html [^].

scroll-to-top