حالا به راهاندازی سرویس گیت که این پروتکلها را روی سرور خودتان اجرا میکند، میپردازیم.
|
Note
|
در اینجا دستورات و مراحل لازم برای نصبهای ساده و پایه روی یک سرور مبتنی بر لینوکس را نشان میدهیم، هرچند امکان اجرای این سرویسها روی سرورهای macOS یا ویندوز هم وجود دارد. راهاندازی دقیق یک سرور تولیدی در زیرساخت شما قطعاً به تفاوتهایی در اقدامات امنیتی یا ابزارهای سیستمعامل نیاز دارد، اما امیدواریم این راهنما ایده کلی آنچه لازم است را به شما بدهد. |
برای راهاندازی اولیه هر سرور گیت، باید یک مخزن موجود را به یک مخزن بیکاربرد (bare repository) جدید تبدیل کنید — مخزنی که دایرکتوری کاری ندارد.
این کار معمولاً بسیار ساده است.
برای کلون کردن مخزن و ایجاد یک مخزن بیکاربرد جدید، دستور 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.com راهاندازی کردهاید که به آن دسترسی SSH دارید و میخواهید تمام مخازن گیت خود را زیر دایرکتوری /srv/git ذخیره کنید.
با فرض اینکه دایرکتوری /srv/git روی آن سرور وجود دارد، میتوانید مخزن جدید خود را با کپی کردن مخزن بیکاربرد راهاندازی کنید:
$ scp -r my_project.git user@git.example.com:/srv/gitدر این مرحله، سایر کاربران که دسترسی خواندن مبتنی بر SSH به دایرکتوری /srv/git روی آن سرور دارند، میتوانند مخزن شما را با اجرای دستور زیر کلون کنند:
$ git clone user@git.example.com:/srv/git/my_project.gitاگر کاربری با SSH وارد سرور شود و دسترسی نوشتن به دایرکتوری /srv/git/my_project.git داشته باشد، به طور خودکار دسترسی ارسال (push) هم خواهد داشت.
گیت به طور خودکار مجوزهای نوشتن گروهی را به یک مخزن به درستی اضافه میکند اگر دستور 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/authorized_keys حساب «git» اضافه کنید.
در این صورت همه میتوانند از طریق حساب «git» به آن سرور دسترسی پیدا کنند.
این موضوع به هیچ وجه روی دادههای کامیت تأثیر نمیگذارد — کاربری که از طریق SSH به آن وصل میشوید، روی کامیتهای ثبتشده تأثیری ندارد.
روش دیگر این است که سرور SSH شما از طریق یک سرور LDAP یا منبع احراز هویت متمرکز دیگری که ممکن است قبلاً راهاندازی کرده باشید، کاربران را احراز هویت کند. تا زمانی که هر کاربر بتواند به شل سرور دسترسی داشته باشد، هر مکانیزم احراز هویتی که به آن فکر کنید باید کار کند.