فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD
اس آرٹیکل میں، میں Plesk کنٹرول پینل اور Github ایکشنز کا استعمال کرتے ہوئے CI/CD ترتیب دینے کے اپنے تجربے کا اشتراک کروں گا۔ آج ہم سیکھیں گے کہ سادہ نام "Helloworld" کے ساتھ ایک سادہ پروجیکٹ کو کیسے ڈیپلائی کرنا ہے۔ یہ Python فریم ورک فلاسک میں لکھا گیا ہے، جس میں سیلری میں کارکنان اور انگولر 8 میں فرنٹ اینڈ ہے۔

ذخیروں کے لنکس: پسدید, فرنٹ اینڈ.

مضمون کے پہلے حصے میں ہم اپنے پروجیکٹ اور اس کے حصوں کو دیکھیں گے۔ دوسرے میں، ہم یہ معلوم کریں گے کہ Plesk کو کنفیگر کرنے اور ضروری ایکسٹینشنز اور اجزاء (DB، RabbitMQ، Redis، Docker، وغیرہ) کو انسٹال کرنے کا طریقہ۔

تیسرے حصے میں، ہم آخر کار اس بات کا پتہ لگائیں گے کہ ڈیو اور پروڈ ماحول میں اپنے پروجیکٹ کو سرور پر تعینات کرنے کے لیے پائپ لائن کیسے ترتیب دی جائے۔ اور پھر ہم سائٹ کو سرور پر لانچ کریں گے۔

اور ہاں، میں اپنا تعارف کرانا بھول گیا۔ میرا نام اولیگ بورزوف ہے، میں ڈومکلک میں رہن قرض دینے والے مینیجرز کے لیے CRM ٹیم میں ایک مکمل اسٹیک ڈویلپر ہوں۔

منصوبے کا جائزہ

سب سے پہلے، آئیے دو پروجیکٹ ریپوزٹریز کو دیکھیں - بیک اینڈ اور فرنٹ - اور کوڈ سے گزریں۔

پسدید حصہ: فلاسک + اجوائن

بیک اینڈ کے لیے، میں نے ایک ایسا مجموعہ لیا جو ازگر کے ڈویلپرز میں کافی مقبول ہے: فلاسک فریم ورک (API کے لیے) اور سیلری (ٹاسک کیو کے لیے)۔ SQLAchemy کو بطور ORM استعمال کیا جاتا ہے۔ Alembic ہجرت کے لئے استعمال کیا جاتا ہے. ہینڈلز میں JSON کی توثیق کے لیے - Marshmallow۔

В ذخیرے ایک Readme.md فائل ہے جس میں ساخت کی تفصیلی وضاحت اور پروجیکٹ شروع کرنے کی ہدایات ہیں۔

ویب پارٹ API بہت آسان، 6 ہینڈلز پر مشتمل ہے:

  • /ping - دستیابی چیک کرنے کے لیے؛
  • رجسٹریشن، اجازت، ڈی اوتھورائزیشن اور ایک مجاز صارف کے حصول کے لیے ہینڈل؛
  • ای میل بھیجنے کا ایک ہینڈل جو کام کو سیلری کی قطار میں رکھتا ہے۔

اجوائن کا حصہ یہ اور بھی آسان ہے، صرف ایک مسئلہ ہے۔ send_mail_task.

فولڈر میں /conf دو ذیلی فولڈرز ہیں:

  • docker دو ڈاکر فائلوں کے ساتھ (base.dockerfile ایک بنیادی تصویر بنانا جو شاذ و نادر ہی تبدیل ہوتا ہے اور Dockerfile اہم اسمبلیوں کے لیے)
  • .env_files - مختلف ماحول کے لیے ماحولیاتی متغیر والی فائلوں کے ساتھ۔

پروجیکٹ روٹ میں چار ڈاکر کمپوز فائلیں ہیں:

  • docker-compose.local.db.yml ترقی کے لیے مقامی ڈیٹا بیس کو بڑھانا؛
  • docker-compose.local.workers.yml ایک کارکن، ڈیٹا بیس، Redis اور RabbitMQ کی مقامی پرورش کے لیے؛
  • docker-compose.test.yml تعیناتی کے دوران ٹیسٹ چلانے کے لیے؛
  • docker-compose.yml تعیناتی کے لیے

اور ہماری دلچسپی کا آخری فولڈر ہے۔ .ci-cd. اس میں تعیناتی کے لیے شیل اسکرپٹ ہیں:

  • deploy.sh - منتقلی اور تعیناتی شروع کرنا۔ Github ایکشنز میں ٹیسٹ بنانے اور چلانے کے بعد سرور پر لانچ کیا گیا۔
  • rollback.sh - اسمبلی کے پچھلے ورژن میں کنٹینرز کو رول بیک کریں۔
  • curl_tg.sh - ٹیلی گرام پر تعیناتی کی اطلاعات بھیجنا۔

کونیی میں فرنٹ اینڈ

سامنے کے ساتھ ذخیرہ بیکوف کے مقابلے میں بہت آسان ہے۔ فرنٹ تین صفحات پر مشتمل ہے:

  • ای میل بھیجنے کے لیے ایک فارم اور لاگ آؤٹ بٹن کے ساتھ ہوم پیج۔
  • لاگ ان صفحہ۔
  • رجسٹریشن کا صفحہ۔

مرکزی صفحہ سنیاسی لگ رہا ہے:

فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD
روٹ میں دو فائلیں ہیں۔ Dockerfile и docker-compose.yml، نیز مانوس فولڈر .ci-cd بیک ریپوزٹری کے مقابلے اسکرپٹس کی قدرے کم تعداد کے ساتھ (چلنے والے ٹیسٹ کے لیے اسکرپٹس کو ہٹا دیا گیا ہے)۔

پلسک میں ایک پروجیکٹ شروع کرنا

آئیے Plesk کو ترتیب دے کر اور اپنی سائٹ کے لیے سبسکرپشن بنا کر شروع کریں۔

ایکسٹینشنز انسٹال کرنا

Plesk میں ہمیں چار ایکسٹینشنز کی ضرورت ہے:

  • Docker Plesk ایڈمن پینل میں کنٹینرز کی حالت کے انتظام اور بصری طور پر ڈسپلے کرنے کے لیے؛
  • Git سرور پر تعیناتی کے مرحلے کو ترتیب دینے کے لیے؛
  • Let's Encrypt مفت TLS سرٹیفکیٹ بنانے (اور خودکار تجدید) کے لیے؛
  • Firewall آنے والی ٹریفک کی فلٹرنگ کو ترتیب دینے کے لیے۔

آپ انہیں ایکسٹینشن سیکشن میں پلسک ایڈمن پینل کے ذریعے انسٹال کر سکتے ہیں:

فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD
ہم ایکسٹینشنز کی تفصیلی ترتیب پر غور نہیں کریں گے؛ ہمارے ڈیمو مقاصد کے لیے، ڈیفالٹ سیٹنگز موزوں ہوں گی۔

سبسکرپشن اور ویب سائٹ بنانا

اس کے بعد، ہمیں اپنی ویب سائٹ helloworld.ru کے لیے سبسکرپشن بنانے اور وہاں ذیلی ڈومین dev.helloworld.ru شامل کرنے کی ضرورت ہے۔

  1. ہم helloworld.ru ڈومین کے لیے سبسکرپشن بناتے ہیں اور سسٹم صارف کے لیے لاگ ان پاس ورڈ بتاتے ہیں:

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD
    صفحہ کے نیچے باکس کو چیک کریں۔ لیٹس انکرپٹ کے ساتھ ڈومین کو محفوظ کریں۔، اگر ہم سائٹ کے لیے HTTPS ترتیب دینا چاہتے ہیں:

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  2. اس کے بعد، اس سبسکرپشن میں، ہم ایک ذیلی ڈومین dev.helloworld.ru بناتے ہیں (جس کے لیے آپ مفت TLS سرٹیفکیٹ بھی جاری کر سکتے ہیں):

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

سرور کے اجزاء کو انسٹال کرنا

ہمارے پاس ایک سرور ہے۔ OS Debian اسٹریچ 9.12 اور انسٹال کنٹرول پینل پلسک اوبسیڈین 18.0.27.

ہمیں اپنے پروجیکٹ کے لیے انسٹال اور کنفیگر کرنے کی ضرورت ہے:

  • PostgreSQL (ہمارے معاملے میں dev اور prod ماحول کے لیے دو ڈیٹا بیس کے ساتھ ایک سرور ہوگا)۔
  • RabbitMQ (ایک ہی چیز، ماحول کے لیے مختلف vhosts کے ساتھ ایک مثال)۔
  • دو Redis مثالیں (dev اور prod ماحول کے لیے)۔
  • ڈوکر رجسٹری (مرتب کردہ ڈاکر امیجز کے مقامی اسٹوریج کے لیے)۔
  • ڈوکر رجسٹری کے لیے UI انٹرفیس۔

PostgreSQL کی

Plesk پہلے سے ہی PostgreSQL DBMS کے ساتھ آتا ہے، لیکن تازہ ترین ورژن نہیں (Plesk Obsidian لکھنے کے وقت حمایت کی پوسٹگریس ورژن 8.4–10.8)۔ ہم اپنی ایپلیکیشن کا تازہ ترین ورژن چاہتے ہیں (تحریر کے وقت 12.3)، لہذا ہم اسے دستی طور پر انسٹال کریں گے۔

ڈیبین آن لائن پر پوسٹگریس انسٹال کرنے کے لیے کافی تفصیلی ہدایات موجود ہیں (مثال کے طور پر)، تو میں ان کو تفصیل سے بیان نہیں کروں گا، میں صرف حکم دوں گا:

wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

اس بات کو مدنظر رکھتے ہوئے کہ PostgreSQL میں معمولی ڈیفالٹ سیٹنگز ہیں، کنفیگریشن کو ایڈجسٹ کرنا ضروری ہے۔ یہ ہماری مدد کرے گا۔ کیلکولیٹر۔: آپ کو اپنے سرور کے پیرامیٹرز درج کرنے اور فائل میں ترتیبات کو تبدیل کرنے کی ضرورت ہے۔ /etc/postgresql/12/main/postgresql.confتجویز کردہ لوگوں کے لیے۔ یہاں یہ واضح رہے کہ ایسے کیلکولیٹر جادوئی گولی نہیں ہیں، اور آپ کے ہارڈ ویئر، ایپلیکیشن اور سوالات کی پیچیدگی کی بنیاد پر بیس کو زیادہ درست طریقے سے ٹیون کیا جانا چاہیے۔ لیکن شروع کرنے کے لیے یہ کافی ہے۔

کیلکولیٹر کی تجویز کردہ ترتیبات کے علاوہ، ہم بھی تبدیل کرتے ہیں۔ postgresql.confڈیفالٹ پورٹ 5432 دوسرے کو تفویض کیا جاتا ہے (ہماری مثال میں - 53983).

کنفیگریشن فائل کو تبدیل کرنے کے بعد، کمانڈ کے ساتھ postgresql-server کو ریبوٹ کریں:

service postgresql restart

ہم نے PostgreSQL کو انسٹال اور کنفیگر کیا۔ اب آئیے ایک ڈیٹابیس بنائیں، صارف برائے دیو اور پروڈ ماحول، اور صارفین کو ڈیٹا بیس کو منظم کرنے کے حقوق دیں:

$ su - postgres
postgres:~$ create database hw_dev_db_name;
CREATE DATABASE
postgres:~$ create user hw_dev_db_user with password 'hw_dev_db_password';
CREATE ROLE
postgres:~$ grant ALL privileges ON database hw_dev_db_name to hw_dev_db_user;
GRANT
postgres:~$ create database hw_prod_db_name;
CREATE DATABASE
postgres:~$ create user hw_prod_db_user with password 'hw_prod_db_password';
CREATE ROLE
postgres:~$ grant ALL privileges ON database hw_prod_db_name to hw_prod_db_user;
GRANT

خرگوش

آئیے سیلری کے لیے ایک میسج بروکر، RabbitMQ انسٹال کرنے کی طرف بڑھتے ہیں۔ اسے ڈیبین پر انسٹال کرنا بہت آسان ہے:

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i erlang-solutions_1.0_all.deb

sudo apt-get update
sudo apt-get install erlang erlang-nox

sudo add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

sudo apt-get update
sudo apt-get install rabbitmq-server

تنصیب کے بعد ہمیں تخلیق کرنے کی ضرورت ہے۔ vhosts، صارفین اور ضروری حقوق فراہم کرتے ہیں:

sudo rabbitmqctl add_user hw_dev_amqp_user hw_dev_amqp_password 
sudo rabbitmqctl set_user_tags hw_dev_amqp_user administrator
sudo rabbitmqctl add_vhost hw_dev_vhost
sudo rabbitmqctl set_permissions -p hw_dev_vhost hw_dev_amqp_user ".*" ".*" ".*"

sudo rabbitmqctl add_user hw_prod_amqp_user hw_prod_amqp_password 
sudo rabbitmqctl set_user_tags hw_prod_amqp_user administrator
sudo rabbitmqctl add_vhost hw_prod_vhost
sudo rabbitmqctl set_permissions -p hw_prod_vhost hw_prod_amqp_user ".*" ".*" ".*"

ریڈس

اب آئیے اپنی ایپلیکیشن - Redis کے لیے آخری جزو کو انسٹال اور کنفیگر کرتے ہیں۔ سیلری کے کاموں کے نتائج کو ذخیرہ کرنے کے لیے اسے بیک اینڈ کے طور پر استعمال کیا جائے گا۔

ہم ایکسٹینشن کا استعمال کرتے ہوئے dev اور prod ماحول کے لیے Redis کے ساتھ دو Docker کنٹینرز اٹھائیں گے۔ Docker Plesk کے لئے.

  1. پلسک پر جائیں، ایکسٹینشن سیکشن پر جائیں، ڈوکر ایکسٹینشن کو تلاش کریں اور اسے انسٹال کریں (ہمیں مفت ورژن کی ضرورت ہے):

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  2. انسٹال کردہ ایکسٹینشن پر جائیں، سرچ کے ذریعے تصویر تلاش کریں۔ redis bitnami اور تازہ ترین ورژن انسٹال کریں:

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  3. ہم ڈاؤن لوڈ کردہ کنٹینر میں جاتے ہیں اور کنفیگریشن کو ایڈجسٹ کرتے ہیں: پورٹ کی وضاحت کریں، زیادہ سے زیادہ مختص RAM سائز، ماحولیاتی متغیرات میں پاس ورڈ، اور والیوم کو ماؤنٹ کریں:

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  4. ہم پروڈ کنٹینر کے لیے 2-3 مراحل انجام دیتے ہیں، ترتیبات میں ہم صرف پیرامیٹرز کو تبدیل کرتے ہیں: پورٹ، پاس ورڈ، RAM سائز اور سرور پر والیوم فولڈر کا راستہ:

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

ڈاکر رجسٹری

بنیادی خدمات کے علاوہ، سرور پر اپنی ڈوکر امیج ریپوزٹری کو انسٹال کرنا اچھا ہوگا۔ خوش قسمتی سے، سرورز پر جگہ اب کافی سستی ہے (یقینی طور پر DockerHub کی سبسکرپشن سے سستی)، اور پرائیویٹ ریپوزٹری کو انسٹال کرنے کا عمل بہت آسان ہے۔

ہم چاہتے ہیں:

ایسا کرنے کے لئے:

  1. آئیے Plesk میں اپنی سبسکرپشن میں دو ذیلی ڈومینز بنائیں: docker.helloworld.ru اور docker-ui.helloworld.ru، اور ان کے لیے Let's Encrypt سرٹیفکیٹ ترتیب دیں۔
  2. فائل کو docker.helloworld.ru ذیلی ڈومین فولڈر میں شامل کریں۔ docker-compose.yml اس طرح کے مواد کے ساتھ:
    version: "3"
    
    services:
      docker-registry:
        image: "registry:2"
        restart: always
        ports:
          - "53985:5000"
        environment:
          REGISTRY_AUTH: htpasswd
          REGISTRY_AUTH_HTPASSWD_REALM: basic-realm
          REGISTRY_AUTH_HTPASSWD_PATH: /auth/.htpasswd
          REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
        volumes:
          - ./.docker-registry.htpasswd:/auth/.htpasswd
          - ./data:/data
    
      docker-registry-ui:
        image: konradkleine/docker-registry-frontend:v2
        restart: always
        ports:
          - "53986:80"
        environment:
          VIRTUAL_HOST: '*, https://*'
          ENV_DOCKER_REGISTRY_HOST: 'docker-registry'
          ENV_DOCKER_REGISTRY_PORT: 5000
        links:
          - 'docker-registry'
    

  3. SSH کے تحت، ہم ڈوکر ریپوزٹری میں بنیادی اجازت کے لیے ایک .htpasswd فائل تیار کریں گے:
    htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
  4. آئیے کنٹینرز کو جمع کریں اور اٹھائیں:
    docker-compose up -d
  5. اور ہمیں Nginx کو اپنے کنٹینرز پر ری ڈائریکٹ کرنے کی ضرورت ہے۔ یہ Plesk کے ذریعے کیا جا سکتا ہے۔

docker.helloworld.ru اور docker-ui.helloworld.ru ذیلی ڈومینز کے لیے درج ذیل اقدامات کرنے کی ضرورت ہے:

کے حصے میں دیو ٹولز۔ ہماری ویب سائٹ پر جائیں ڈوکر پراکسی رولز:

فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD
اور ہمارے کنٹینر پر آنے والی ٹریفک کو پراکسی کرنے کے لیے ایک اصول شامل کریں:

فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  1. ہم چیک کرتے ہیں کہ ہم مقامی مشین سے اپنے کنٹینر میں لاگ ان کر سکتے ہیں:
    $ docker login docker.helloworld.ru -u hw_docker_admin -p hw_docker_password
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    Login Succeeded
  2. آئیے docker-ui.helloworld.ru ذیلی ڈومین کے آپریشن کو بھی چیک کریں:

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD
    جب آپ براؤز ریپوزٹریز پر کلک کرتے ہیں، تو براؤزر اجازت دینے والی ونڈو دکھائے گا جہاں آپ کو ریپوزٹری کے لیے لاگ ان اور پاس ورڈ درج کرنے کی ضرورت ہوگی۔ جس کے بعد ہمیں ذخیروں کی فہرست والے صفحہ پر بھیج دیا جائے گا (ابھی کے لیے یہ خالی ہوگا):

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

پلسک فائر وال میں بندرگاہیں کھولنا

اجزاء کو انسٹال کرنے اور ترتیب دینے کے بعد، ہمیں بندرگاہوں کو کھولنے کی ضرورت ہے تاکہ اجزاء ڈوکر کنٹینرز اور بیرونی نیٹ ورک سے قابل رسائی ہوں۔

آئیے دیکھتے ہیں کہ Plesk کے لیے فائر وال ایکسٹینشن کی مثال کا استعمال کرتے ہوئے اسے کیسے کرنا ہے جسے ہم نے پہلے انسٹال کیا تھا۔

  1. کے پاس جاؤ ٹولز اور سیٹنگز > سیٹنگز > فائر وال:
    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD
  2. کے پاس جاؤ پلسک فائر وال رولز میں ترمیم کریں > کسٹم رول شامل کریں۔ اور ڈوکر سب نیٹ کے لیے درج ذیل ٹی سی پی پورٹس کھولیں (172.0.0.0 / 8):
    RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
    ریڈیس: 32785، 32786

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  3. ہم ایک اصول بھی شامل کریں گے جو PostgreSQL بندرگاہوں اور RabbitMQ مینجمنٹ پینل کو بیرونی دنیا کے لیے کھول دے گا:

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  4. تبدیلیوں کا اطلاق کریں بٹن کا استعمال کرتے ہوئے قواعد کا اطلاق کریں:

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

گیتھب ایکشنز میں CI/CD ترتیب دینا

آئیے سب سے دلچسپ حصے پر آتے ہیں - ایک مسلسل انضمام پائپ لائن قائم کرنا اور اپنے پروجیکٹ کو سرور تک پہنچانا۔

یہ پائپ لائن دو حصوں پر مشتمل ہوگی:

  • تصویر بنانا اور ٹیسٹ چلانا (بیک اینڈ کے لیے) - گیتھب سائیڈ پر؛
  • منتقلی شروع کرنا (بیک اینڈ کے لیے) اور سرور پر کنٹینرز کی تعیناتی۔

Plesk پر تعینات کریں۔

آئیے پہلے دوسرے نکتے سے نمٹتے ہیں (چونکہ پہلا اس پر منحصر ہے)۔

ہم Plesk کے لیے Git ایکسٹینشن کا استعمال کرتے ہوئے تعیناتی کے عمل کو ترتیب دیں گے۔

آئیے بیک اینڈ ریپوزٹری کے لئے پروڈ ماحول کے ساتھ ایک مثال دیکھیں۔

  1. ہم اپنی Helloworld ویب سائٹ کی سبسکرپشن پر جاتے ہیں اور Git سب سیکشن پر جاتے ہیں:

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  2. ہمارے گیتھب ریپوزٹری کے لنک کو "ریموٹ گٹ ریپوزٹری" فیلڈ میں چسپاں کریں اور ڈیفالٹ فولڈر کو تبدیل کریں۔ httpdocs دوسرے کو (مثال کے طور پر، /httpdocs/hw_back):

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  3. پچھلے مرحلے سے SSH پبلک کلید کو کاپی کریں اور شامل کریں یہ Github کی ترتیبات میں ہے۔
  4. مرحلہ 2 میں اسکرین پر اوکے پر کلک کریں، جس کے بعد ہمیں پلسک میں ریپوزٹری پیج پر بھیج دیا جائے گا۔ اب ہمیں ماسٹر برانچ میں کمٹمنٹ کرتے وقت ریپوزٹری کو اپ ڈیٹ کرنے کے لیے کنفیگر کرنے کی ضرورت ہے۔ ایسا کرنے کے لیے، پر جائیں۔ ذخیرہ کی ترتیبات اور قیمت کو محفوظ کریں Webhook URL (گیتھب ایکشنز ترتیب دیتے وقت ہمیں بعد میں اس کی ضرورت ہوگی):

    فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

  5. پچھلے پیراگراف سے اسکرین پر ایکشن فیلڈ میں، تعیناتی شروع کرنے کے لیے اسکرپٹ درج کریں:
    cd {REPOSITORY_ABSOLUTE_PATH}
    .ci-cd/deploy.sh {ENV} {DOCKER_REGISTRY_HOST} {DOCKER_USER} {DOCKER_PASSWORD} {TG_BOT_TOKEN} {TG_CHAT_ID} 

    جہاں:

    {REPOSITORY_ABSOLUTE_PATH} - سرور پر پروڈ بیک اینڈ ریپوزٹری فولڈر کا راستہ؛
    {ENV} - ماحول (dev/prod)، ہمارے معاملے میں prod;
    {DOCKER_REGISTRY_HOST} - ہمارے ڈاکر ریپوزٹری کا میزبان
    {TG_BOT_TOKEN} - ٹیلیگرام بوٹ ٹوکن؛
    {TG_CHAT_ID} - اطلاعات بھیجنے کے لیے چیٹ/چینل آئی ڈی۔

    اسکرپٹ کی مثال:

    cd /var/www/vhosts/helloworld.ru/httpdocs/hw_back/
    .ci-cd/deploy.sh dev docker.helloworld.ru docker_user docker_password 12345678:AAbcdEfghCH1vGbCasdfSAs0K5PALDsaw -1001234567890
  6. ہم اپنی رکنیت سے ایک صارف کو ڈوکر گروپ میں شامل کرتے ہیں (تاکہ وہ کنٹینرز کا انتظام کر سکے):
    sudo usermod -aG docker helloworld_admin

بیک اینڈ ریپوزٹری اور فرنٹ اینڈ کے لیے دیو ماحول اسی طرح ترتیب دیا گیا ہے۔

گیتھب ایکشنز میں تعیناتی پائپ لائن

آئیے گیتھب ایکشنز میں اپنی CI/CD پائپ لائن کا پہلا حصہ ترتیب دینے کی طرف بڑھتے ہیں۔

پسدید

پائپ لائن میں بیان کیا گیا ہے۔ deploy.yml فائل.

لیکن اس کی تجزیہ کرنے سے پہلے، آئیے Github میں ہمیں درکار خفیہ متغیرات کو پُر کریں۔ ایسا کرنے کے لیے، پر جائیں۔ ترتیبات -> راز:

  • DOCKER_REGISTRY - ہمارے ڈوکر ریپوزٹری کا میزبان (docker.helloworld.ru)؛
  • DOCKER_LOGIN - ڈوکر ریپوزٹری میں لاگ ان کریں؛
  • DOCKER_PASSWORD - اس کے لیے پاس ورڈ؛
  • DEPLOY_HOST - ایک میزبان جس پر Plesk ایڈمن پینل دستیاب ہے (مثال: helloworld.ru:8443 یا 123.4.56.78:8443)
  • DEPLOY_BACK_PROD_TOKEN — سرور پر پروڈ ریپوزٹری میں تعیناتی کے لیے ایک ٹوکن (ہم نے اسے پلیسک میں تعیناتی میں موصول کیا، مرحلہ 4)؛
  • DEPLOY_BACK_DEV_TOKEN - سرور پر دیو ریپوزٹری میں تعیناتی کے لیے ٹوکن۔

تعیناتی کا عمل آسان ہے اور تین اہم مراحل پر مشتمل ہے:

  • ہمارے ذخیرہ میں تصویر کی تعمیر اور اشاعت؛
  • ایک تازہ مرتب کردہ تصویر کی بنیاد پر کنٹینر میں ٹیسٹ چل رہے ہیں؛
  • برانچ (dev/master) کے لحاظ سے مطلوبہ ماحول میں تعیناتی۔

فرنٹ اینڈ

فرنٹ ریپوزٹری کے لیے Deploy.yml فائل بیکوف سے زیادہ مختلف نہیں۔ یہ ٹیسٹ چلانے کے مرحلے سے محروم ہوجاتا ہے اور تعیناتی کے لیے ٹوکن کے نام تبدیل کرتا ہے۔ سامنے کے مخزن کے راز، ویسے، الگ سے پُر کرنے کی ضرورت ہے۔

سائٹ سیٹ اپ

Nginx کے ذریعے ٹریفک کو پراکسی کرنا

ٹھیک ہے، ہم اختتام پر آ گئے ہیں. جو کچھ باقی ہے وہ Nginx کے ذریعے ہمارے کنٹینر پر آنے والی اور جانے والی ٹریفک کی پراکسینگ کو ترتیب دینا ہے۔ ہم نے پہلے ہی ڈوکر رجسٹری کو ترتیب دینے کے مرحلہ 5 میں اس عمل کا احاطہ کیا ہے۔ اسی چیز کو دیو اور پروڈ ماحول میں پچھلے اور سامنے والے حصوں کے لیے دہرانے کی ضرورت ہے۔

میں ترتیبات کے اسکرین شاٹس فراہم کروں گا۔

پسدید

فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD

فرنٹ اینڈ

فلاسک+انگولر پروجیکٹ کے لیے گیتھب ایکشنز میں CI/CD
уточнение уточнение. تمام یو آر ایل کو فرنٹ اینڈ کنٹینر سے پراکسی کیا جائے گا، سوائے ان کے جو اس سے شروع ہوں گے۔ /api/ - انہیں پچھلے کنٹینر کے ساتھ پراکسی کیا جائے گا (لہذا پچھلے کنٹینر میں، تمام ہینڈلرز کو شروع کرنا چاہیے۔ /api/).

کے نتائج

اب ہماری سائٹ helloworld.ru اور dev.helloworld.ru (بالترتیب پروڈ اور دیو ماحول) پر قابل رسائی ہونی چاہیے۔

مجموعی طور پر، ہم نے سیکھا کہ فلاسک اور اینگولر میں ایک سادہ ایپلیکیشن کیسے تیار کی جاتی ہے اور اسے Plesk چلانے والے سرور پر رول کرنے کے لیے Github ایکشنز میں ایک پائپ لائن قائم کرنا ہے۔

میں کوڈ کے ساتھ ریپوزٹریوں کے لنکس کی نقل تیار کروں گا: پسدید, فرنٹ اینڈ.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں