Git
Chapters ▾ 2nd Edition

4.6 گیت روی سرور - HTTP هوشمند

HTTP هوشمند

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

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

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

این کار همچنین ماژول‌های mode_cgi، mode_alias و mode_env را فعال می‌کند که احتمالاً همه لازمه کارکرد درست این اسکریپت هستند.

همچنین نیاز خواهید داشت که گروه کاربری یونیکس (Unix user group) پوشه‌های /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 را مجاز بداند و به طریقی نوشتن‌ها را احراز شده کند:

<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 بررسی کنید.