GitLab یک اپلیکیشن مدیریت منبع رایگان Git است که می‌توانید آن را همانند GitHub یا Bitbucket در سرور خود اجرا کنید. در این آموزش به شما نحوه نصب اپلیکیشن GitLab را با استفاده از داکر ایمیج رسمی GitLab نشان می‌دهیم. با ما همراه باشید.

اپلیکیشن GitLab بر پایه برخی سرویس‌ها مانند PostgreSQL، Nginx و Redis عمل می‌کند. مزیّت اصلی استفاده از Docker برای نصب GitLab در این است که همه این سرویس‌ها در یک ایمیج خلاصه می‌شوند و به راحتی نیز می‌توان آن را بروزرسانی کرد.

قبل از شروع به کار

انتخاب ابعاد مناسب در سرور

اپلیکیشن GitLab به میزان قابل‌ملاحظه‌ای از منابع استفاده می‌کند. برای ایجاد بهترین کارآیی GitLab توصیه می‌شود که از یک سرور با حداقل حافظه  ۸ گیگابایت و ۲ هسته در پردازنده استفاده کنید. اطلاعات بیشتر در مورد نیازهای سخت‌افزاری GitLab در صفحه رسمی این اپلیکیشن در دسترس خواهند بود.

نکته: این ‌آموزش برای اوبونتو 18.04 نوشته و آزمایش شده است. در همین حال، می‌توانید آن را در سایر سیستم‌عامل‌هایی که از Docker پشتیبانی می‌کنند، استفاده کنید. در هر صورت، زمانی که می‌خواهید این کار را در سیستم‌عامل دیگری انجام دهید، از دستورالعمل‌های نصب Docker برای آن سیستم‌عامل پیروی نمایید.

ارتقای امنیت سرور

اقدامات موجود برای ارتقای امنیت سرور و از جمله ایجاد یک کاربری با دسترسی محدود را بررسی و اجرا  کنید.

تغییر پورت پیش‌فرض SSH سرور

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

برای این منظور، باید پورت پیش‌فرض ورودی سرویس SSH را عوض کنید.  این کار می‌تواند با ویرایش فایل تنظیمات /etc/ssh/sshd_config انجام شود. در مثال زیر، پورت از شماره 22 به 26 تغییر یافته است.


/etc/ssh/sshd_config

...

Port 26

...

در هنگام ویرایش این فایل، ممکن است لازم باشد که خط مربوط به پورت را با برداشتن علامت هشتگ #، از حالت توضیح (کامنت) خارج کنید. پس از بروزرسانی این فایل و ثبت تغییرات، با کمک فرمان زیر سرویس SSH را دوباره راه‌اندازی کنید.


sudo systemctl restart sshd

اجرای کنونی SSH را خاتمه دهید و دوباره آن را اجرا کنید. حتماً دقت کنید که پورت جدید را مشخص نمایید. این کار با استفاده از گزینه -p در فرمان انجام می‌گیرد.


ssh your_limited_user@192.0.2.2 -p 26

بروزرسانی رکوردهای DNS (اختیاری)

یک دامین یا ساب‌دامین به سرور GitLab اختصاص دهید. البته این گام اختیاری انجام می‌شود. چرا که شما هر زمان می‌توانید به اپلیکیشن GitLab از طریق IP سرور دسترسی داشته باشید. با این وجود، در صورتی که می‌خواهید از قابلیت‌های پشتیبانی داخلی  SSH در GitLab بهره‌مند شوید، حتماً باید از یک دامین استفاده کنید. در نتیجه، از Let’s Encrypt برای ایجاد گواهی استفاده خواهد شد. در این آ‌موزش، آدرس نمونه gitlab.example.com را به کار می‌بریم.

برای انتقال تغییرات DNS به اینترنت، اندکی زمان لازم خواهد بود. بنابراین، پیشنهاد می‌شود که این کار را قبل از تنظیمات اپلیکیشن GitLab انجام دهید. در هر صورت، برای بروزرسانی رکوردهای DNS باید از دستورالعمل‌های مربوط به تنظیم یک «رکورد A» مربوط به ارائه‌دهنده این سرویس کمک بگیرید.

برای مشاهده وضعیت انتقال تغییرات DNS می‌توانید از فرمان dig استفاده کنید.


dig +short gitlab.example.com

192.0.2.2

وقتی تغییرات انتشار پیدا کردند، می‌تواند به سراغ نصب اپلیکیشن GitLab بروید.

نصب Docker

برای ادامه کار، حتماً باید Docker را در سرور نصب کرده باشید.

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

۱) نصب‌های قدیمی Docker را در سیستم‌تان حذف کنید.


sudo apt remove docker docker-engine docker.io

۲) حتماً دقت کنید که بسته‌های لازم را برای استفاده از منبع Docker در اختیار دارید.


sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg

۳) اضافه‌کردن کلید GPG برای Docker


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

۴) تأیید «اثر انگشت» کلید GPG


sudo apt-key fingerprint 0EBFCD88

در نتیجه باید خروجی‌‌ای مشابه زیر ببینید.


pub   rsa4096 2017-02-22 [SCEA]

9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88

uid           [ unknown] Docker Release (CE deb)

sub   rsa4096 2017-02-22 [S]

۵) اضافه‌کردن نسخه پایدار منبع Docker


sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

نکته: برای اوبونتو 19.04، اگر با پیغام خطای “E: Package ‘docker-ce’ has no installation candidate” روبرو شدید، احتمالاً به این دلیل است که نسخه پایدار یا stable از Docker هنوز ارائه نشده است. بنابراین، در این حالت باید از منبع آزمایشی استفاده کنید.


sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable edge test"

۶) فهرست بسته‌های خود را بروزرسانی کنید و Docker CE را نصب نمایید.


sudo apt update

sudo apt install docker-ce

۷) اکانت محدود لینوکس خود را به گروه docker اضافه کنید.


sudo usermod -aG docker $USER

نکته: پس از وارد کردن فرمان usermod، لازم است که سرویس SSH را ببندید و آن را دوباره اجرا کنید تا این تغییرات اِعمال شوند.

۸) بررسی وضعیت نصب با اجرای برنامه داخلی “Hello World”:


docker run hello-world

نصب ایمیج GitLab EE

پس از نصب Docker، آخرین داکر ایمیج Gitlab اینترپرایز ادیشن را از DockerHub دریافت کنید. این ایمیج شامل تمام ابزارهای مورد نیاز برای اجرای GitLab خواهد بود؛ از جمله PostgreSQL، Nginx، Redis و … . برای دریافت این ایمیج، فرمان pull را مطابق زیر اجرا نمایید.


sudo docker pull gitlab/gitlab-ee:latest

نسخه کامیونیتی یا اینترپرایز؟

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

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


sudo docker pull gitlab/gitlab-ce:latest

تنها چند دقیقه برای دریافت این ایمیج لازم است. وقتی دانلود به اتمام رسید، با استفاده از فرمان images می‌توانید به لیستی از کل داکر ایمیج‌های نصب‌شده، دسترسی پیدا کنید.


sudo docker images

تنظیم و اجرای اپلیکیشن GitLab

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

۱) فرمان زیر را مطابق با مشخصات سرور خود برای شروع به کار کانتینر GitLab تنظیم کنید.


sudo docker run --detach \

--hostname gitlab.example.com \

--publish 443:443 --publish 80:80 --publish 22:22 \

--name gitlab-ariaservice \

--restart always \

--volume /srv/gitlab/config:/etc/gitlab \

--volume /srv/gitlab/logs:/var/log/gitlab \

--volume /srv/gitlab/data:/var/opt/gitlab \

--env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.com/';" \

gitlab/gitlab-ee:latest

توضیح برای هر کدام از گزینه‌ها

–detach کانتینر داکر را به عنوان یک فرآیند پس‌زمینه اجرا می‌کند.

–hostname عنوان هاست داخلی کانتینر را تعریف می‌کند.

–publish پورت‌ یا سری پورت‌های انتقال و انتشار به هاست را برای کانتینر مشخص می‌کند. به دلیل اینکه اپلیکیشن GitLab ارتباط‌ها را در پورت HTTP شماره 80، پورت HTTPS شماره 443 و پورت SSH شماره 22  قبول می‌کند۷ این گزینه سه بار فراخوانی شده است. در صورتی که بخواهید از یک پورت غیر استاندارد در هاست به GitLab دسترسی پیدا کنید، ابتدا باید پورت هاست را معرفی کنید و پس از علامت نقل قول (:) پورت کانتینر را وارد نمایید. به عنوان مثال، اگر بخواهید از پورت SSH شماره 3333 به اپلیکیشن GitLab دسترسی داشته باشید، عبارت –publish 3333:22 را تایپ می‌کنید.

–name به شما اجازه می‌دهد که یک عنوان را برای کانتینر انتخاب کنید. این عنوان در هنگام ارجاع به کانتینر درون شبکه داکر به کار می‌آید.

–restart سیاست راه‌اندازی دوباره برای کانتینر مشخص می‌کند. در اینجا این گزینه به صورت همیشگی تنظیم شده است. به این معنا که کانتینر به صورت خودکار ری‌استارت خواهد شد.

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

–env متغیر GITLAB_OMNIBUS_CONFIG را ارائه می‌کند که می‌تواند مجموعه‌ای از مقادیر را در بر بگیرد. این متغغیر با تنظیمات GitLab Omnibus در ارتباط خواهد بود. در اینجا، یک آدرس اینترنتی خارجی وارد شده است. برخی موارد اضافی می‌توانند شامل مقادیر تنظیمات SMTP باشند. در نتیجه اپلیکیشن GitLab می‌تواند ایمیل فعالیت‌ها را ارسال کند.

در نسخه GitLab 10.7 اگر یک آدرس خارجی با پروتکل HTTP وارد کنید، به صورت اتوماتیک گواهی SSL با استفاده از Let’s Encrypt انجام می‌شود و تمام ترافیک به HTTPS ارجاع داده می‌شود.

به عنوان یک جایگزین برای تعیین متغیر GITLAB_OMNIBUS_CONFIG با استفاده از گزینه –env، می‌توانید فایل تنظیمات GitLab را مستقیماً ویرایش کنید.

نکته: اگر از ایمیج GitLab کامیونیتی ادیشن استفاده می‌کند، حتماً عبارت gitlab/gitlab-ee:latest را با gitlab/gitlab-ce:latest جایگزین کنید.

۲) اجرای کانتینر ممکن است به اندکی زمان نیاز داشته باشد. پس از شروع به کار، یک شناسه کانتینر مشابه زیر دریافت می‌کنید.


1093d89f9a0af8e4c79e0352e57721b09050d07c86c37d601145a856f3ed1502

۳) همچنین چند دقیقه دیگر زمان لازم است تا بتوانید از طریق مرورگر به اپلیکیشن GitLab دسترسی داشتته باشید. برای اطلاعات بیشتر در مورد شروع به کار فرآیند می‌توانید ثبت‌وقایع را بررسی کنید.


sudo docker logs -f gitlab-ariaservice

برای خروج از وضعیت پایش فرآیندها، CTRL-C را بزنید. این کار باعث توقف کانتینر نخواهد شد.

۴) سایت  GitLab را در مرورگر خود بارگذاری کنید. اگر سعی کنید بلافاصله بعد از شروع به کار کانتینر، آن را بارگذاری کنید، احتمالاً با پیغام خطای HTTP 502 روبرو می‌شوید. در این صورت، چند دقیقه منتظر بمانید و سپس دوباره صفحه را بارگذاری کنید.

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

۶) به صورت روت به سایت GitLab وارد شوید و پسورد مرحله قبلی را وارد کنید.

ساخت اولین پروژه اپلیکیشن GitLab

هر منبعی در GitLab متعلق به یک پروژه خواهد بود. هر پروژه شامل یک منبع برای فایل‌ها، یک ابزار ردیاب مشکلات، بخشی برای جمع‌آوری درخواست‌ها، یک ویکی یا راهنما، شبکه هماهنگ‌سازی و تحویل لحظه‌ای (CI/CD) و دیگر ابزارها برای پشتیبانی از توسعه پروژه شماست.

۱)  برای ساخت اولین منبع، روی گزینه “Create a project” کلیک کنید.

در صفحه خوشامدگویی اپلیکیشن GitLab روی "Create a project" کلیک کنید.

۲) به صفحه پروژه جدید هدایت می‌شوید. عنوان پروژه را وارد کنید. در اینجا می‌توانید مشخصات و توضیحات پروژه و همین‌طور، دسترسی عمومی به آن را تنظیم نمایید. پس از این کار، روی  دکمه “Create project” کلیک کنید.

وارد کردن اطلاعات موردنیاز برای ایجاد یک پروژه جدید

۳) پس از ساخته‌شدن پروژه، یک منبع پروژه خالی در اختیار شما قرار می‌گیرد.

۴) اگر در طول نصب پروژه، فایل README.md را برای GitLab نساخته باشید، دستورالعمل‌هایی برای شروع به کار با منبع از طریق خط فرمان نمایش داده خواهند شد.

این فرمان‌ها برای ایجاد یک README.md در منبع وارد کنید و آن را به منبع GitLab انتقال دهید. حتماً دقت کنید که در فرمان git clone، آدرس دامین خودتان را تایپ کنید.


git clone https://gitlab.example.com/testuser/example-project.git

cd example-project

touch README.md  # Or create the file in your editor and enter a project description

git add README.md

git commit -m "add README"

git push -u origin master

مدیریت کانتینر GitLab

برای مشاهده تمام کانتینرهای در حال اجرا، می‌توانید از فرمان ps استفاده کنید.


sudo docker ps

برای توقف کانتینر GitLab، در فرمان stop شناسه یا عنوان کانتینر را وارد نمایید.


sudo docker stop gitlab-linode

برای اجرای کانتینری که متوقف‌شده، فرمان start را با شناسه یا عنوان کانتینر همراه کنید.


sudo docker start gitlab-linode

وقتی کانتینر متوقف شد، می‌توانید با فرمان rm آن را حذف کنید. در اینجا نیز باید شناسه یا عنوان کانتینر را وارد کنید.


sudo docker container rm gitlab-linode

نکته: حذف تمام کانتینرها باعث از دست رفتن پروژه‌ها و منابع شما نخواهد شد.

ارتقای اپلیکیشن GitLab

به منظور بروزرسانی اپلیکیشن GitLab، ابتدا باید کانتینر را متوقف و حذف کنید. سپس ایمیج جدید را انتقال دهید و دوباره کانتینر را بسازید.


sudo docker stop gitlab-ariaservice

sudo docker rm gitlab-ariaservice

sudo docker pull gitlab/gitlab-ee:latest

sudo docker run --detach \

--hostname gitlab.example.com \

--publish 443:443 --publish 80:80 --publish 22:22 \

--name gitlab-linode \

--restart always \

--volume /srv/gitlab/config:/etc/gitlab \

--volume /srv/gitlab/logs:/var/log/gitlab \

--volume /srv/gitlab/data:/var/opt/gitlab \

--env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.com/';" \

gitlab/gitlab-ee:latest

به خاطر داشته باشید که حتماً از عنوان هاست و آدرس اینترنتی خودتان استفاده کنید. همچنین اگر از نسخه کامیونیتی GitLab استفاده می‌کنید، آدرس انتهایی را به gitlab/gitlab-ce:latest تغییر دهید.

جمع‌بندی

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