Ali Torki
Ali Torki
خواندن ۶ دقیقه·۵ سال پیش

سناریو کامل CI&CD با گیت لب و داکر و Traefik و Reactjs

CI & CD with gitlab and docker and traefik
CI & CD with gitlab and docker and traefik


توی این مقاله قصد دارم که شما رو با سناریو هایی در حول محور Continues integration و Continues Deployment & Delivery آشنا کنم و سعی کنیم که این موارد رو با گیت لب روی سرور خودمون پیاده سازی کنیم.

برای شروع باید موارد زیر رو آماده داشته باشید:

  1. سروری با حداقل ۵۰ گیگ هارد و ۲ گیگ رم و ۱ هسته سی پی یو(پیشنهاد میکنم سیستم عامل رو Ubuntu v18 بگیرید)
  2. یک دامنه آماده که روی DNS های Cloudflare ست شده
  3. حداقل دانشی در حوزه Linux و کار با command line
اگر سرور ندارید! و میخواید از روش های Pay as you go استفاده کنید(بدین معنی که هرچقدر منابع مصرف کردید پول بدید) میتونید از زیرساخت های آروان کلاد کمک بگیرید که خیلی قدرتمند عمل کردن(از روی تجربه ای که باهاشون داشتم میگم)

هدف نهایی:

دیپلوی شدن پروژه Reactjs بر حسب نوع کامیت ها و برنچ ها روی یک ساب دامنه اختصاصی و اجراء تمامی تست ها بعد از کامیت روی هر برنچ. بدین معنی که اگر روی برنچ feature/test کامیت کردین٬ سیستم بیاد اتوماتیک تست ها رو اجراء‌کنه و در صورت pass شدن همه تست ها٬ در انتها بیاد سیستم رو دیپلوی کنه و روی ادرس زیر بالا بیاره

https://test.feat.domain.ir

یا مثال های دیگه ای از این قبیل:

Branch name: hotfix/test

URL: https://test.fix.domain.ir


Branch name: develop

URL: https://stg.domain.ir


Branch name: master

URL: https://prod.domain.ir



تکنولوژی هایی که میخوایم باهاشون کار کنیم:

  1. Docker & docker-compose(Deploy codes in a isolated container)
  2. Gitlab CI(Gitlab devops infrastructure)
  3. Gitlab runner(A connection between gitlab CI website and our server)
  4. Traefik(A DNS manager in order to connect domain to the docker containers)
  5. Portainer(for monitoring all docker containers, stacks, volumes, images, networks and etc...)


مراحل در پیش رو:

  1. ساخت یک پروژه در گیت لب
  2. نصب Gitlab runner روی سرور
  3. اتصال gitlab-runner به ریپازیتوری گیت لب
  4. نصب داکر و docker-compose
  5. نصب Nodejs
  6. نصب Traefik , Portainer
  7. نوشتن داکر فایل های بیلد گرفتن از پروژه
  8. نوشتن کانفیگ nginx برای سرو کردن کد بلید شده درون داکر روی پورت ۸۰
  9. نوشتن pipeline ها اجرایی در فایل gitlab-ci.yml
  10. تنظیم Couldflare روی IP سرور و تنظیمات DNS ساب دامنه ها


نصب Gitlab runner روی سرور

  1. برای اتصال گیت لب به سرور خودمون باید Gitlab-runner رو روی سرور نصب داشته باشید. مراحل نصب:

۱. در ابتدا باینری فایلش رو میتونید از اینجا طبق مشخصات سیستم عامل ubuntu خودتون دانلود کنید:

# Linux x86-64 sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 # Linux x86 sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386 # Linux arm sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm # Linux arm64 sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64

۲. دسترسی های لازم رو بهش بدیم

sudo chmod +x /usr/local/bin/gitlab-runner

۳. یک یوزر اختصاصی براش بسازیم

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

۳. سرویسش رو اجراء کنیم

sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner sudo gitlab-runner start


اتصال gitlab-runner به ریپازیتوری گیت لب

بدین منظور به صفحه اصلی پروژتون برید و به settings > CI / CD settings > Runner مراجعه کنید.

توی این صفحه اگر روی تب Runners کلیک کنید دوتا باکس میبینید به عناوین:

  1. Specific runners
  2. Shared runners

که باید روی دکمه Disable shared runners کلیک کنید و غیرفعال کنید این ویژگی رو(خودم به باگی روی همین یه تیکه کوچیک خورده بودم که سه روز از وقتم رو درگیرش بودم تا فهمیدم مشکل shared runner ها هستن که باید غیرفعال می‌شدن).

ما از ویژگی Specific runners استفاده خواهیم کرد طبق تصویر زیر

Setup a specific gitlab runner
Setup a specific gitlab runner

حالا برگردید به سرور خودتون و کامند زیر رو اجراء کنید توی ترمینال:

sudo gitlab-runner register

بعد از اجراء کردن دستور بالا٬ ازتون میخواد که آدرس گیت لبتون رو وارد کنید که مقدار زیر رو وارد کنید:

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):

https://gitlab.com/

Please enter the gitlab-ci token for this runner:

در مرحله بعد ازتون توکن میخواد. توکن توی صفحه specific runners هستش که توی عکس بالا من هایلایتش کردم چون برای هر ریپازیتوری فرق میکنه این توکن. مقدارش رو کپی کنید و توی ترمینالتون وارد کنید.

Please enter the gitlab-ci description for this runner:

توی مرحله بعدی ازتون میخواد که یک توضیحی حتی کوتاه درباره این runner بنویسید

Please enter the gitlab-ci tags for this runner (comma separated):

مرحله بعدش میگه یکسری تگ که با comma جدا شدن برای دسته بندی بنویس که نمیخواد چیزی بنویسید و Enter رو بزنید و برید به مرحله بعد.

Please enter the executor: custom, docker-ssh, shell, docker+machine, docker-ssh+machine, docker, parallels, ssh, virtualbox, kubernetes:

توی این مرحله میگه میخواین executor این runner چی باشه که پیشنهاد میکنم shell رو بنویسید براش و Enter رو بزنید.

تمام. با موفقیت runner شما رجیستر شد و به اکانت گیت لب شما وصل شد.


نصب داکر و docker-compose

برای نصب این دو مورد هم مراحل زیر رو طی کنید:

۱. بروزرسانی دیتابیس پکیج های نصب شده

sudo apt update

۲. نصب پکیج های پیش نیاز apt برای نصب پکیج های روی بستر https

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

۳. نصب کلید GPG برای docker official

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

۴. اضافه کردن ریپازیتوری داکر به منابع apt

sudo add-apt-repository &quotdeb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable&quot

۵. بروز رسانی کردن دیتابیس پکیج های همراه با ریپازیتوری داکر که اضافش کردیم

sudo apt update

اطمینال از این که میخوایم داکر رو از روی ریپازیتوری خودش نصب کنیم نه ریپازیتوری پیش فرض اوبونتو

apt-cache policy docker-ce

نتیجه اجراء کامند بالا

docker-ce: Installed: (none) Candidate: 18.03.1~ce~3-0~ubuntu Version table: 18.03.1~ce~3-0~ubuntu 500 500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages

تا اینجا ما هنوز Docker-ce رو نصب نکردیم بلکه اون رو یه کاندید برای نصب میدونیم

۶. در نهایت نصب خود داکر

sudo apt install docker-ce

۷. بعد از اجراء‌ کامند بالا دستور زیر رو وارد کنید که از صحت سلامت اجراء داکر مطمئن بشید.

sudo systemctl status docker

نتیجه دستور بالا باید همچین چیزی باشه:

docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago Docs: https://docs.docker.com Main PID: 10096 (dockerd) Tasks: 16 CGroup: /system.slice/docker.service ├─10096 /usr/bin/dockerd -H fd:// └─10113 docker-containerd --config /var/run/docker/containerd/containerd.toml


نصب Nodejs

برای نصب Nodejs مراحل زیر رو طی کنید

۱. بروزرسانی دیتابیس پکیج های نصب شده

sudo apt update

۲. نصب Nodejs و npm

sudo apt install nodejs npm

۳. اطمینان از نصب nodejs و npm

nodejs -v npm -v


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

devopsgitlab cidockerdocker composereact
Technical Team Lead
شاید از این پست‌ها خوشتان بیاید