GitLab CE یا Community Edition یک برنامه متن باز است؛ که اصولا برای مدیریت مخازن گیت مورد استفاده قرار می‌گیرد و دارای ویژگی‌های مرتبط با توسعه نرم افزار، مانند ردیابی پروژه در میان اعضای تیم توسعه است. GitLab به گونه ای طراحی شده است؛ که می تواند با استفاده از زیرساخت‌های شخصی کاربر میزبانی شود و انعطاف پذیری در استقرار را به عنوان یک مخزن داخلی برای تیم توسعه فراهم می‌کند؛ بدین معنی که به عنوان یک رابط برای کاربران یا ابزار مدیریتی برای مشارکت کنندگان پروژه عمل می‌نماید.

پروژه GitLab، به راحتی یک نمونه GitLab را بر روی سخت افزار شخصی شما با یک روند نصب آسان تنظیم می‌نماید. در این راهنما نحوه نصب و پیکربندی GitLab برروی سرور Ubuntu 18.04 شرح داده می‌شود.

آنچه شما برای نصب GitLab در این مقاله نیاز دارید، یک سرور Ubuntu 18.04 با یک کاربر sudo غیر ریشه و فایروال اولیه است.

الزامات سخت افزاری GitLab برروی یک سرور عبارت است از: یک CPUی ۲ هسته ای و رم ۸ گیگابایتی

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

برای نصب GitLab به یک نام دامنه نیز برای سرور خود نیاز دارید. برای اطلاعات بیشتر، به مستندات ما در مورد چگونگی شروع کار با DNS مراجعه کنید. در این مقاله، از نام دامنه shembull.com استفاده می‌شود.

مرحله ۱ – نصب برنامه‌های پیش نیاز

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

در ابتدا که از apt برای نصب GitLab استفاده می‌کنید، باید لیست بسته‌های محلی را بروزرسانی کرده و سپس با تایپ کردن دستورات زیر نرم افزارهای پایه را نصب نمایید:

    $ sudo apt update
    $ sudo apt install ca-certificates curl openssh-server postfix

به احتمال زیاد، برخی از این نرم افزارها را از قبل برروی سیستم خود بصورت نصب شده دارید. برای نصب postfix، پس از درخواست از شما Internet Site را انتخاب کنید. در صفحه بعدی، نام دامنه سرور خود را وارد نمایید؛ تا نحوه ارسال ایمیل به سیستم تعیین شود.

مرحله ۲ – نصب GitLab

اکنون که نرم افزارهای پایه در سیستم موجود هستند، می‌توانید GitLab را نصب کنید. این یک فرایند ساده است؛ که از یک اسکریپت نصب برای پیکربندی سیستم شما با مخازن GitLab استفاده می‌کند.

به دایرکتوری tmp/ بروید و سپس اسکریپت نصب را دانلود کنید:

    $ cd /tmp
    $ curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh

می‌توانید اسکریپت دانلود را بررسی نمایید؛ تا مطمئن شوید که با اقداماتی که انجام خواهد داد مطابقت دارد. علاوه بر این، می‌توانید یک نسخه میزبانی شده از اسکریپت را در اینجا بیابید:

$ less /tmp/script.deb.sh

هنگامی‌که از امنیت اسکریپت راضی شدید، می‌توانید نصب را به صورت زیر اجرا کنید:

$ sudo bash /tmp/script.deb.sh

این اسکریپت، سرور شما را برای استفاده از مخازن نگهداری شده GitLab تنظیم می‌کند. بدین صورت به شما امکان می‌دهد تا GitLab را با همان ابزارهای مدیریت بسته ای مدیریت نمایید؛ که برای سایر بسته‌های سیستم خود استفاده می‌کنید. پس از اتمام این کار، می‌توانید برنامه واقعی GitLab را با دستور apt نصب کنید:

$ sudo apt install gitlab-ce

این کار عناصر مورد نیاز را برروی سیستم شما نصب می‌کند.

مرحله ۳ – تنظیم قوانین فایروال

قبل از پیکربندی GitLab، باید اطمینان حاصل کنید؛ که قوانین فایروال شما اجازه عبور ترافیک وب را می‌دهند. اگر از راهنمایی ارائه شده در ابتدای این مقاله پیرامون فایروال پیروی کرده باشید، باید اکنون یک فایروال ufw فعال داشته باشید.

وضعیت فعلی فایروال فعال خود را می توانید با تایپ کردن دستور زیر مشاهده نمایید:

$ sudo ufw status

در این صورت، خروجی زیر را مشاهده خواهید کرد:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)

همانطور که مشاهده می‌کنید، قوانین فعلی امکان عبور ترافیک SSH را فراهم می‌کند، اما دسترسی به سایر سرویس‌ها محدود است. از آنجا که GitLab یک برنامه وب است، باید دسترسی به HTTP امکان پذیر باشد. همچنین به دلیل این‌که ما از مزیت توانایی GitLab در درخواست و فعال سازی یک گواهی TLS/SSL از Let’s Encrypt استفاده خواهیم کرد، اجازه دسترسی HTTPS نیز باید ارائه شود.

پروتکل نگاشت پورت برای HTTP و HTTPS در فایل etc/services/ در دسترس است، بنابراین می‌توانیم اجازه عبور ترافیک را با نام‌های نگاشت شده بدهیم. اگر قبلاً ترافیک OpenSSH را فعال نکرده اید، باید اکنون عبور این ترافیک را نیز به صورت زیر مجاز کنید:

$ sudo ufw allow http
    $ sudo ufw allow https
    $ sudo ufw allow OpenSSH

اکنون دوباره وضعیت ufw status را بررسی کنید.

$ sudo ufw status

دسترسی باید حداقل برای این دو سرویس پیکربندی شده باشد:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
۸۰/tcp                     ALLOW       Anywhere                  
۴۴۳/tcp                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
۸۰/tcp (v6)                ALLOW       Anywhere (v6)             
۴۴۳/tcp (v6)               ALLOW       Anywhere (v6)

خروجی فوق نشان می‌دهد؛ که رابط وب GitLab پس از پیکربندی برنامه قابل دسترسی خواهد بود.

مرحله ۴ – ویرایش فایل پیکربندی GitLab

قبل از استفاده از برنامه، باید فایل پیکربندی را به روز کرده و یک دستور تنظیم مجدد را اجرا نمایید. ابتدا فایل پیکربندی Gitlab را باز کنید:

$ sudo nano /etc/gitlab/gitlab.rb

در بین اولین خطوط موجود در فایل، خط تنظیمات external_url قرار دارد. آن را به روز نمایید؛ تا با دامنه شما مطابقت پیدا کند. http را به https تغییر دهید؛ تا GitLab بطور خودکار، کاربران را به سایتی که توسط گواهی رمزگذاری Let’s Encrypt محافظت می‌شود هدایت کند:

                    /etc/gitlab/gitlab.rb

##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
external_url 'https://example.com'

در مرحله بعدی، به دنبال تنظیمات letsencrypt [‘contact_emails’] بگردید. این تنظیمات لیستی از آدرس‌های ایمیل را تعریف می‌کند؛ که پروژه Let’s Encrypt در صورت بروز مشکل با دامنه‌تان می‌تواند از طریق آن با شما تماس بگیرد. بهتر است برای اطلاع از هرگونه مشکل، این بخش را از حالت کامنت خارج کرده و تکمیل نمایید:

                     /etc/gitlab/gitlab.rb

letsencrypt['contact_emails'] = ['sammy@example.com']

فایل را ذخیره کرده و ببندید. برای پیکربندی مجدد Gitlab دستور زیر را اجرا کنید:

$ sudo gitlab-ctl reconfigure

این دستور، GitLab را با استفاده از اطلاعاتی که در مورد سرور یافته است، راه‌اندازی اولیه می‌کند. این یک فرآیند کاملاً خودکار است، بنابراین نیازی به پاسخگویی به هیچ گونه سؤالی نیست. این فرایند همچنین گواهی Let’s Encrypt را برای دامنه شما پیکربندی می‌کند.

مرحله ۵ – تنظیم اولیه از طریق رابط وب

با اجرای GitLab و دسترسی مجاز، می‌توانیم برخی از تنظیمات اولیه برنامه را از طریق رابط وب انجام دهیم.

ورود به سیستم برای اولین بار

نام دامنه سرور GitLab خود را در مرورگر وب‌تان وارد کنید:

https://example.com

در اولین بازدید شما، باید یک درخواست اولیه برای تنظیم رمز ورود برای حساب کاربری مدیر به صورت زیر دریافت نمایید:

در درخواست پسورد اولیه، رمز عبور ایمن را برای حساب مدیر تهیه و تأیید کنید. پس از اتمام بر روی دکمه Change your password کلیک کنید.

همانطور که در شکل زیر مشاهده می‌کنید، اکنون شما به صفحه ورود اصلی GitLab هدایت می‌شوید:

در اینجا می‌توانید با رمز عبوری که تازه تنظیم کرده اید وارد شوید. گواهی‌ها عبارتند از:

نام کاربری: root

پسورد: [رمز عبوری که تنظیم کردید]

این مقادیر را در قسمت‌های مربوطه، برای کاربران موجود وارد کرده و روی دکمه Sign in کلیک کنید. با این کار شما وارد برنامه شده و به صفحه ای هدایت می‌شوید (مانند شکل زیر)، که در آن از شما خواسته می‌شود، اضافه کردن پروژه‌ها را شروع کنید:

اکنون می‌توانید برخی تغییرات ساده را انجام دهید؛ تا GitLab با تنظیمات مورد نظر شما پیکربندی شود.

اعمال تنظمیات پروفایل

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

برای ایجاد تغییرات لازم، همانطور که در شکل زیر نشان داده شده است، بر روی نماد کاربر در گوشه سمت راست بالای رابط کلیک کنید. در منوی کشویی که ظاهر می‌شود، Setting را انتخاب کنید:

سپس به بخش Profile از تنظیمات‌تان منتقل می‌شوید:

نام و آدرس ایمیل را از “Administrator” و “admin@example.com” به مقادیر مورد نظر و دقیق تر تنظیم کنید. نامی که انتخاب می‌نمایید، برای سایر کاربران نمایش داده می‌شود؛ در حالی که ایمیل برای تشخیص نماد پیش فرض، اعلان‌ها، اقدامات Git از طریق رابط و … استفاده می‌شود.

پس از اتمام این کار، روی دکمه Update Profile settings کلیک کنید:

یک ایمیل تأیید به آدرسی که ارائه داده اید ارسال می‌شود. برای تأیید حساب کاربری خود، دستورالعمل‌های موجود در ایمیل را دنبال کنید؛ تا بتوانید از آن در GitLab استفاده نمایید.

تغییر نام حساب کاربری

در مرحله بعد، روی گزینه Account در نوار منوی سمت چپ کلیک کنید:

در اینجا، می‌توانید توکن API خصوصی خود را پیدا کنید، یا تأیید هویت دو عاملی را پیکربندی نمایید. با این حال، موردی که در حال حاضر به آن علاقه مند هستیم، بخش Change username است.

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

برای اعمال تغییر، بر روی دکمه Update username کلیک کنید:

از آن پس هر زمان که به GitLab وارد شدید، به یاد داشته باشید که از نام کاربری جدیدتان استفاده نمایید.

افزودن کلید SSH به حساب کاربری

در بیشتر موارد، کاربران می‌خواهند از کلیدهای SSH با Git برای تعامل با پروژه‌های GitLabشان استفاده کنند. برای این کار، باید کلید عمومی SSH را به حساب کاربری GitLab اضافه کرد.

اگر قبلاً یک جفت کلید SSH در کامپیوتر محلی ایجاد کرده اید، می‌توانید با تایپ کردن دستور زیر، کلید عمومی را مشاهده کنید:

$ cat ~/.ssh/id_rsa.pub

در این صورت در خروجی باید یک متن طولانی شبیه متن زیر ببینید:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFd/nGGl2oojkCBoSIpTokZDVZoXRZZ4vPkfEhFsfwgcQaP8XTVGS8pIR2slO0z6nITp1smA1QWUyhCxr/ZO8yRk7bk5eMp7IghGWImtaKYddsJaRUcu250ng5FdzFGa7nilj0HamkP5fhvBaVc45c94DDyI/urFEtwQqnwQdnPNxCFhQwL6daqx9Gpu3+Vhg81Rfej245fu1zEBx4iCeE3UCxR+POsn3m6YT19uYFLnzmDrlBM/+WURLdkVLoNs/A9oIgphH9SuUnwqwvVgk3BpFji/zJ44N+/qr6dzdkTeKOOk05NsdJV/140zX1AgN6ReFPzRjMwYJjActBkWPp hosni

این متن را کپی کرده و به صفحه تنظیمات پروفایل در رابط وب GitLab برگردید.

اگر در خروجی به جای مشاهده کلید عمومی، پیامی شبیه به پیام زیر دریافت کردید، معلوم می‌شود؛ که قبلاً یک جفت کلید SSH در دستگاه‌تان تنظیم نشده است:

cat: /home/sammy/.ssh/id_rsa.pub: No such file or directory

در این صورت، می‌توانید با وارد کردن دستور زیر، یک جفت کلید SSH ایجاد نمایید:

$ ssh-keygen

پارامترهای پیش فرض را بپذیرید و به صورت اختیاری یک رمزعبور برای ایمن کردن کلید ارائه کنید:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/sammy/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:I8v5/M5xOicZRZq/XRcSBNxTQV2BZszjlWaIHi5chc0 sammy@gitlab.docsthat.work
The key's randomart image is:
+---[RSA 2048]----+
|          ..%o==B|
|           *.E =.|
|        . ++= B  |
|         ooo.o . |
|      . S .o  . .|
|     . + .. .   o|
|      +   .o.o ..|
|       o .++o .  |
|        oo=+     |
+----[SHA256]-----+

پس از این کار، مانند قبل می‌توانید با تایپ کردن دستور زیر کلید عمومی خود را مشاهده نمایید:

$ cat ~/.ssh/id_rsa.pub

کلید عمومی، متنی شبیه به متن زیر است:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop

بلوک متن نمایش داده شده را کپی کنید و به Settings پروفایل خود در رابط وب GitLab برگردید.

در منوی سمت چپ روی عبارت SSH Keys کلیک کنید:

در فضای مشخص شده، کلید عمومی را که از دستگاه محلی خود کپی کرده اید، قرار دهید. یک عنوان توصیفی به آن بدهید و روی دکمه Add key کلیک کنید:

اکنون می‌توانید بدون نیاز به ارائه گواهی‌های حساب کاربری GitLab خود، پروژه‌ها و مخازن GitLab خود را از دستگاه محلی خود مدیریت نمایید.

مرحله ۶ – محدود کردن یا غیرفعال کردن ثبت نام‌های عمومی (اختیاری)

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

برای این کار، در ابتدا با کلیک کردن بروی نماد آچار (wrench icon) در نوار منوی اصلی در بالای صفحه، به منطقه مدیریتی خود بروید:

در صفحه زیر می‌توانید یک نمای یک کلی از نمونه GitLab خود را  مشاهده کنید. روی گزینه Setting در پایین منوی سمت چپ کلیک نمایید:

بدین ترتیب به بخش تنظیمات سراسری GitLabتان منتقل می‌شوید. در اینجا، شما می‌توانید تعدادی از تنظیمات را که در عدم امکان ثبت نام کاربران جدید و میزان دسترسی آنها تأثیر می‌گذارد، تنظیم کنید.

غیرفعال کردن ثبت نام

اگر می‌خواهید ثبت نام‌های کاربران را به طور کامل غیرفعال کنید (البته با این کار همچنان می‌توانید برای کاربران جدید به صورت دستی حساب کاربری ایجاد کنید)، به پایین صفحه و بخش Sign-up Restriction بروید.

گزینه Sign-up enabled را غیرفعال نمایید:

به پایین بروید و بر روی دکمه Save changes کلیک کنید:

اکنون بخش ثبت نام‌ها باید از صفحه فرود GitLab شما حذف شده باشد.

محدود کردن ثبت نام براساس دامنه

اگر از GitLab به عنوان بخشی از سازمانی استفاده می‌کنید؛ که آدرس‌های ایمیل مرتبط با یک دامنه را ارائه می‌دهد، می‌توانید به جای غیر فعال کردن کامل ثبت نام‌ها، آن‌ها را بر اساس دامنه محدود نمایید.

برای این کار در بخش Sign-up Restrictions، گزینه Send confirmation email on sign-up را انتخاب کنید. پس از آن، به کاربران امکان می‌دهد، تنها پس از تأیید ایمیل‌شان وارد سیستم شوند.

در مرحله بعد، دامنه یا دامنه‌های خود را در Whitelisted domains for sign-ups (در هر خط یک دامنه) اضافه کنید. برای مشخص کردن مجموعه دامنه‌هایی که بخشی از نام آن‌ها شبیه به هم هستند، می‌توانید از کاراکتر “*” استفاده کنید:

به پایین بروید و بر روی دکمه Save changes کلیک کنید:

با این کار، بخش ثبت نام باید از صفحه فرود GitLab حذف شده باشد.

محدود کردن ایجاد پروژه

به طور پیش فرض، کاربران جدید می‌توانند حداکثر ۱۰ پروژه ایجاد کنند. اگر بخواهید اجازه دهید، کاربران جدید خارج از سیستم بتوانند پروژه‌ها را ببینند و در آن‌ها مشارکت نمایند؛ ولیکن دسترسی آنها را برای ایجاد پروژه‌های جدید محدود کنید، می‌توانید در بخش Account and Limit Settings این کار را انجام دهید.

در داخل این بخش، می‌توانید محدودیت پروژه‌های پیش فرض را به مقدار ۰ تغییر دهید؛ تا قابلیت ایجاد پروژه‌ها برای کاربران جدید به طور کامل غیرفعال شوند:

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

به پایین بروید و بر روی دکمه Save changes کلیک کنید:

کاربران جدید اکنون قادر به ایجاد حساب کاربری هستند؛ اما قادر به ایجاد پروژه نیستند.

تمدید کردن گواهی‌های Let’s Encrypt

به طور پیش فرض، GitLab وظیفه برنامه ریزی شده ای را برای تمدید گواهی‌های Let’s Encrypt بصورت هرچهار روز یکبار و پس از نیمه شب دارد؛ که ساعت دقیق آن بر اساس مقدار external_url مورد نظر شما مشخص می شود. شما می‌توانید این تنظیمات را در فایل etc/gitlab/gitlab.rb/ تغییر دهید. به عنوان مثال، اگر بخواهید هر هفت روز یکبار، راس ساعت ۱۲:۳۰ این تمدید گواهی اجرا شود، می‌توانید به صورت زیر عمل کنید.

                /etc/gitlab/gitlab.rb

letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"

علاوه براین می‌توانید، با افزودن یک تنظیمات اضافی به‌صورت زیر به etc/gitlab/gitlab.rb/، تمدید خودکار را غیرفعال کنید:

                /etc/gitlab/gitlab.rb

letsencrypt['auto_renew'] = false

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