Git
Chapters ▾ 2nd Edition

4.2 گیت روی سرور - راه‌اندازی گیت در سرور

راه‌اندازی گیت در سرور

در این بخش درباره راه‌اندازی یک سرور گیت که اینپروتکل‌ها را اجرا می‌کند خواهیم خواند.

یادداشت

ما در اینجا مراحل اولیه و ساده نصب و راه‌اندازی بر روی سرور مبتنی بر لینوکس را یاد خواهیم گرفت، اگرچه راه‌اندازی این سرویس‌ها بر روی مک و ویندوز نیز امکان‌پذیر هستند. در واقع راه‌اندازی چنین سروری در سیستم‌های شما از نظر ابزاری و امنیتی مشکلات و تفاوت‌های زیادی را درپی خواهد داشت اما در هر صورت هدف ما، ارائه یک ایدهٔ کلی درباره راه‌اندازی سرور گیت به شما است.

برای راه‌اندازی اولیه هر سرور گیت، باید یک مخزن موجود را به یک مخزن بِر جدید صادر کنیم — مخزنی که شامل هیچ working directory نباشد. معمولاً این کار بسیار ساده است. برای اینکه مخزن خود را کلون کنید و یک مخزن بر جدید بسازید، دستور clone را با آپشن --bare اجرا می‌کنید. به طور قرار دادی، نام‌های پوشه مخزن بر با پسوند git. تمام می‌شود،‌ به این صورت:

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

در حال حاضر شما باید یک کپی از اطلاعات پوشه گیت در پوشه my_project.git خود داشته باشید.

تقریباً و به طور خیلی کلی این معادل چنین چیزی است:

$ cp -Rf my_project/.git my_project.git

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

قرار دادن مخزن بِر در سرور

حالا که شما یک کپی بِر از مخزنتان دارید،‌ تمام کاری باید انجام دهید این است که آن را در یک سرور قرار دهید و پروتکل‌های خودتان را نصب و راه‌اندازی کنید. فرض کنیم شما سروری با نام git.example.come را نصب و راه‌اندازی کرده‌اید که به آن دسترسی SSH دارید و می‌خواهید تمام مخزن‌های گیت خود را زیر پوشه /srv/git ذخیره کنید. فرض کنیم پوشه /srv/git در سرور وجود دارد، شما می‌توانید مخزن جدید خود را با کپی کردن مخزن بِر به آنجا راه‌اندازی کنید:

$ scp -r my_project.git user@git.example.com:/srv/git

در این لحظه، دیگر کاربران که دسترسی خواندن پوشه /srv/git بر بستر SSH در آن سرور را دارند می‌توانند مخزن را با استفاده از دستور زیر کلون کنند:

$ git clone user@git.example.com:/srv/git/my_project.git

اگر یک کاربر با SSH به سرور وارد شود و دسترسی نوشتن به پوشه /srv/git/my_project.git داشته باشد، به طور خودکار دسترسی پوش نیز خواهد داشت.

اگر دستور git init را با آپشن --shared اجرا کنید،‌ گیت به طور خودکار دسترسی‌های نوشتن گروه را به مخزن اضافه خواهد کرد. توجه داشته باشید که با اجرای این دستور، شما هیچ کامیت، رف، و…​ دیگری را نابود نخواهید کرد:

$ ssh user@git.example.com
$ cd /srv/git/my_project.git
$ git init --bare --shared

حالا می‌بینید که گرفتن یک مخزن گیت، ساخت نسخه‌ بِر و قرار دادن آن روی سروری که شما و مشارکت‌ کنندگان به آن دسترسی دارید، چقدر ساده است. اکنون آماده هستید تا بر روی یک پروژه همکاری کنید.

خیلی مهم است که به خاطر داشته باشید که این به معنای واقعی کلمه تمام چیزی هست که نیاز دارید تا یک سرور گیت کاربردی راه‌اندازی کنید که چندین کاربر به آن دسترسی دارند — فقط حساب‌هایی با قابلیت ‌‌SSH به سرور اضافه کنید و مخزن بِر را جایی بگذارید تا همهٔ کاربران دسترسی خواندن و نوشتن به آن داشته باشند. حالا شما آماده کار هستید — هیچ کار دیگری نیاز نیست.

در چند قسمت بعدی، خواهید دید که نحوه گسترش راه‌اندازی‌های پیچیده‌تر چگونه است. این بحث شامل مجبور نبودن به ساخت حساب‌های کاربری به ازای هر کاربر، اضافه کردن دسترسی خواندن عمومی به مخزن‌ها، راه‌اندازی رابط‌های کاربری وب و بیشتر خواهد بود. با این حال، به خاطر داشته باشید که تمام چیزی که برای مشارکت با تعدادی کمی از افراد بر روی یک پروژه خصوصی لازم دارید، یک مخزن بِر و یک سرور SSH است.

راه‌اندازی‌های کوچک

اگر شما گروه کوچکی هستید یا فقط درحال امتحان گیت در سازمانتان هستید و تعداد کمی توسعه‌دهنده دارید، برای شما خیلی چیزها می‌تواند ساده باشند. یکی از پیچیده‌ترین جنبه‌های راه‌اندازی سرور گیت مدیریت کاربران‌ است. اگر شما بخواهید بعضی از مخزن‌ها، برای کاربران مشخصی فقط خواندنی و برای دیگران نوشتنی/خواندنی باشند، مدیریت و تعیین دسترسی و سطح‌ دسترسی‌ها می‌تواند کمی سخت‌تر باشد.

دسترسی SSH

اگر سروری دارید که همهٔ توسعه‌دهندگان شما از قبل به آن دسترسی SSH دارند، عموماً راحت‌ترین جا برای راه‌اندازی اولین مخزنتان است، چرا که تقریباً هیچ‌کاری نیاز نیست انجام دهید (همانطور که در بخش آخر درباره آن گفته بودیم). اگر انواع پیچیده‌تری از مجوز‌های کنترل دسترسی بر روی مخزنتان می‌خواهید، می‌توانید آن‌ها را به وسیله مجوز‌های معمولی فایل‌سیستم در سیستم‌عامل سرور خود کنترل کنید.

اگر می‌خواهید مخزنتان را در سروری قرار دهید که هیچ حساب کاربری برای هیچ یک از اعضای تیم شما که می‌خواهید به آن‌ها دسترسی نوشتن اعطا کنید ندارد، باید برای آن‌ها دسترسی SSH راه‌اندازی کنید. ما فرض می‌کنیم که اگر شما سروری دارید که می‌خواهید با آن این کار را کنید، از قبل سرور SSH نصب شده دارید و نحوه دسترسی شما به سرور هم همین است.

چندین راه وجود دارد که می‌توانید از طریق آنها اجازه دسترسی به هر شخص در تیمتان بدهید. اول راه‌اندازی حساب‌های کاربری برای همه‌ است که ساده است، اما می‌تواند دست‌وپاگیر باشد. ممکن است نخواهید هربار دستور adduser (یا دستور جایگزین احتمالی useradd) را اجرا کنید و مجبور به تنظیم رمزهای عبور موقتی برای هر کاربر جدید باشید.

دومین روش ساخت یک حساب «git» واحد بر روی دستگاه، درخواست دریافت کلید SSH عمومی از هر کاربری که دسترسی نوشتن دارد و اضافه کردن آن کلید به فایل ~/.ssh/autorized_keys آن حساب جدید «git» است. پس از این، همه قادر به دسترسی به آن ماشین به وسیله همان اکانت «git» هستند. این کار به هیچ وجه هیچ تأثیری بر روی اطلاعات کامیت نخواهد داشت — کاربر SSH که از طریق آن متصل هستید هیچ تأثیری بر کامیت‌هایی که شما ضبط کرده‌اید نمی‌گذارد.

راه دیگری که می‌توانید بروید این است که سرور SSH خود را وادار به احراز هویت از یک سرور LDAP یا نوعی دیگر از منابع تصدیق هویت متمرکزی کنید که شاید از قبل راه‌اندازی کرده‌اید. تا زمانی که هر کاربر بتواند به دستگاه دسترسی شل داشته باشد، هر مکانیزم تصدیق هویت SSH دیگری که می‌توانید به آن فکر کنید باید کار کند.