CI/CD Github Actions for a Flask+Angular Project

CI/CD Github Actions for a Flask+Angular Project
هن آرٽيڪل ۾، مان شيئر ڪندس سي آءِ / سي ڊي ترتيب ڏيڻ جو تجربو Plesk ڪنٽرول پينل ۽ Github عمل استعمال ڪندي. اڄ اسان سکنداسين ته هڪ سادي پراجيڪٽ کي ڪيئن ٺاهجي، جنهن ۾ غير پيچيده نالو "Helloworld" آهي. اهو فلاسڪ پٿون فريم ورڪ ۾ لکيل آهي، سيلري ڪارڪنن ۽ هڪ Angular 8 فرنٽ اينڊ سان.

مخزنن جا لنڪ: پس منظر, اڳيون.

مضمون جي پهرين حصي ۾، اسان اسان جي منصوبي ۽ ان جي حصن تي نظر ڪنداسين. ٻئي ۾، اسان اهو معلوم ڪنداسين ته Plesk کي ڪيئن سيٽ ڪرڻ ۽ ضروري ملائڻ ۽ اجزاء (DB، RabbitMQ، Redis، Docker، وغيره) کي انسٽال ڪرڻ.

ٽئين حصي ۾، اسان آخرڪار اهو معلوم ڪنداسين ته اسان جي پروجيڪٽ کي ديو ۽ پروڊ ماحول ۾ سرور تائين پهچائڻ لاء هڪ پائپ لائن ڪيئن قائم ڪجي. ۽ پوءِ اسان سائيٽ کي سرور تي لانچ ڪنداسين.

۽ ها، مون پنهنجو تعارف ڪرائڻ وساري ڇڏيو. منهنجو نالو Oleg Borzov آهي، مان Domclick تي گروي مينيجرز لاءِ CRM ٽيم ۾ مڪمل اسٽيڪ ڊولپر آهيان.

پروجيڪٽ جو جائزو

پهرين، اچو ته ڏسو ٻه پروجيڪٽ ريپوزٽريز - پس منظر ۽ سامهون - ۽ وڃو ڪوڊ مٿان.

پس منظر: فلاسڪ + سليري

پوئين حصي لاءِ، مون ھڪڙو جھنڊو ورتو جيڪو پٿون ڊولپرز ۾ ڪافي مقبول آھي: فلاسڪ فريم ورڪ (اي پي آءِ) ۽ سيلري (ٽاسڪ جي قطار لاءِ). SQLAchemy ORM طور استعمال ڪيو ويندو آھي. Alembic لڏپلاڻ لاء استعمال ڪيو ويندو آهي. هينڊلز ۾ JSON جي تصديق لاءِ - Marshmallow.

В ذخيرو هتي هڪ Readme.md فائل آهي جنهن ۾ ساخت جي تفصيلي وضاحت ۽ پروجيڪٽ کي هلائڻ لاءِ هدايتون آهن.

ويب پارٽ API بلڪل غير پيچيده، 6 قلمن تي مشتمل آهي:

  • /ping - دستيابي چيڪ ڪرڻ لاء؛
  • رجسٽريشن، اختيار ڏيڻ، غير اختيار ڏيڻ ۽ هڪ بااختيار صارف حاصل ڪرڻ لاء هٿيار؛
  • هڪ اي ميل هينڊل جيڪو ڪم کي سيلري جي قطار ۾ رکي ٿو.

سليري جو حصو اڃا به آسان، صرف هڪ مسئلو آهي send_mail_task.

فولڊر ۾ /conf اتي ٻه ذيلي فولڊر آهن:

  • docker ٻن Dockerfiles سان (base.dockerfile هڪ نادر بدلجندڙ بنيادي تصوير ٺاهڻ ۽ Dockerfile مکيه اسيمبلين لاء؛
  • .env_files - فائلن سان گڏ مختلف ماحول لاء ماحولياتي متغير سان.

پروجيڪٽ جي روٽ تي چار ڊاکر-ڪپوز فائلون آهن:

  • docker-compose.local.db.yml ترقي لاء مقامي ڊيٽابيس کي وڌائڻ لاء؛
  • docker-compose.local.workers.yml ڪم ڪندڙ، ڊيٽابيس، ريڊس ۽ RabbitMQ جي مقامي اڀار لاءِ؛
  • docker-compose.test.yml تعیناتي دوران ٽيسٽ هلائڻ لاء؛
  • docker-compose.yml لڳائڻ لاء.

۽ آخري فولڊر جنهن ۾ اسان کي دلچسپي آهي - .ci-cd. ان ۾ شامل ڪرڻ لاء شيل اسڪرپٽ شامل آهن:

  • deploy.sh - لڏپلاڻ ۽ تعیناتي جي شروعات. Github Actions ۾ ٽيسٽ ٺاهڻ ۽ هلائڻ کانپوءِ سرور تي هلندو آهي؛
  • rollback.sh - ڪنٽينرز جو رولبڪ اسيمبليءَ جي پوئين ورزن ڏانهن؛
  • curl_tg.sh - ٽيليگرام ڏانهن موڪلڻ جا اطلاع موڪلڻ.

Angular تي اڳيون

مخزن سان گڏ مخزن بيڪ جي ڀيٽ ۾ تمام آسان. اڳيون ٽن صفحن تي مشتمل آهي:

  • مکيه صفحو هڪ فارم سان اي ميل موڪلڻ لاءِ ۽ هڪ نڪرڻ وارو بٽڻ.
  • لاگ ان صفحو.
  • رجسٽريشن جو صفحو.

مکيه صفحو سجيل نظر اچي ٿو:

CI/CD Github Actions for a Flask+Angular Project
روٽ تي ٻه فائلون آهن Dockerfile и docker-compose.yml، گڏوگڏ واقف فولڊر .ci-cd پوئتي مخزن جي ڀيٽ ۾ ٿورڙي اسڪرپٽ سان (هٽايو ويو اسڪرپٽس ھلندڙ ٽيسٽن لاءِ).

Plesk ۾ هڪ منصوبو شروع ڪرڻ

اچو ته شروع ڪريون Plesk قائم ڪرڻ ۽ اسان جي سائيٽ لاءِ سبسڪرپشن ٺاهي.

ايڪسٽينشن کي انسٽال ڪرڻ

Plesk ۾، اسان کي چار واڌارن جي ضرورت آھي:

  • Docker Plesk منتظم پينل ۾ ڪنٽينرز جي حالت کي منظم ۽ بصري طور تي ڊسپلي ڪرڻ لاء؛
  • Git سرور تي ترتيب ڏيڻ واري قدم کي ترتيب ڏيڻ لاء؛
  • Let's Encrypt ٺاهڻ لاءِ (۽ خودڪار تجديد) مفت TLS سرٽيفڪيٽ؛
  • Firewall ايندڙ ٽرئفڪ جي فلٽرنگ کي ترتيب ڏيڻ لاء.

توھان انھن کي انسٽال ڪري سگھو ٿا Plesk ايڊمن پينل ذريعي ايڪسٽينشن سيڪشن ۾:

CI/CD Github Actions for a Flask+Angular Project
اسان توسيع لاءِ تفصيلي سيٽنگن تي غور نه ڪنداسين، ڊفالٽ سيٽنگون اسان جي ڊيمو مقصدن لاءِ ڪندا.

سبسڪرپشن ۽ سائيٽ ٺاهيو

اڳيون، اسان کي اسان جي helloworld.ru ويب سائيٽ لاءِ سبسڪرپشن ٺاهڻو پوندو ۽ اتي dev.helloworld.ru ذيلي ڊومين شامل ڪرڻو پوندو.

  1. helloworld.ru ڊومين لاءِ سبسڪرپشن ٺاهيو ۽ سسٽم استعمال ڪندڙ لاءِ لاگ ان-پاسورڊ بيان ڪريو:

    CI/CD Github Actions for a Flask+Angular Project
    صفحي جي تري ۾ دٻي کي چيڪ ڪريو Let's Encrypt سان ڊومين کي محفوظ ڪريوجيڪڏهن اسان سائيٽ لاءِ HTTPS سيٽ اپ ڪرڻ چاهيون ٿا:

    CI/CD Github Actions for a Flask+Angular Project

  2. اڳيون، هن رڪنيت ۾، هڪ ذيلي ڊومين ٺاهيو dev.helloworld.ru (جنهن لاءِ توهان مفت TLS سرٽيفڪيٽ پڻ جاري ڪري سگهو ٿا):

    CI/CD Github Actions for a Flask+Angular Project

انسٽال ڪرڻ سرور اجزاء

اسان وٽ هڪ سرور آهي او ايس ڊيبين اسٽريچ 9.12 ۽ انسٽال ٿيل ڪنٽرول پينل پلسڪ آبسيڊين 18.0.27.

اسان کي اسان جي منصوبي لاء انسٽال ۽ ترتيب ڏيڻ جي ضرورت آهي:

  • PostgreSQL (اسان جي صورت ۾، اتي هڪ سرور هوندو ٻن ڊيٽابيس سان گڏ ديو ۽ پروڊ ماحول لاء).
  • RabbitMQ (ساڳيو، ساڳيو مثال ماحول لاءِ مختلف ويسٽن سان).
  • ٻه Redis مثال (dev ۽ prod ماحول لاء).
  • Docker رجسٽري (تعمير ٿيل Docker تصويرن جي مقامي اسٽوريج لاءِ).
  • UI Docker رجسٽري لاءِ.

PostgreSQL

Plesk اڳ ۾ ئي PostgreSQL DBMS سان گڏ اچي ٿو، پر جديد نسخو نه آهي (لکڻ وقت Plesk Obsidian حمايت ڪئي پوسٽ گريس ورزن 8.4-10.8). اسان چاهيون ٿا ته اسان جي ايپليڪيشن لاء جديد نسخو (12.3 هن لکڻ جي وقت تي)، تنهنڪري اسان ان کي دستي طور تي انسٽال ڪنداسين.

نيٽ تي Debian تي Postgres انسٽال ڪرڻ لاءِ تمام گهڻيون تفصيلي هدايتون آهن (مثال)، تنهنڪري مان انهن کي تفصيل سان بيان نه ڪندس، مان صرف حڪم ڏيندس:

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. ھاڻي اچو ھڪ ڊيٽابيس ٺاھيون، صارفين لاءِ dev- ۽ prod- ماحول، ۽ صارفين کي ڊيٽابيس کي منظم ڪرڻ جا حق ڏيو:

$ 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، Celery لاءِ هڪ پيغام بروکر. ڊيبين تي انسٽال ڪرڻ بلڪل سادو آهي:

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

ھاڻي اچو ته انسٽال ڪريون ۽ ترتيب ڏيون اسان جي ايپليڪيشن لاءِ آخري جزو - Redis. اهو Celery ڪمن جي نتيجن کي محفوظ ڪرڻ لاء هڪ پس منظر طور استعمال ڪيو ويندو.

اسان ٻه ڊاڪر ڪنٽينرز کي ريڊيس سان گڏ ڪنداسين dev ۽ prod ماحول لاءِ ايڪسٽينشن استعمال ڪندي Docker Plesk لاء.

  1. اسان Plesk ڏانھن وڃو، وڌايون سيڪشن ڏانھن وڃو، ڊاکر جي واڌ کي ڏسو ۽ ان کي انسٽال ڪريو (اسان کي مفت ورزن جي ضرورت آھي):

    CI/CD Github Actions for a Flask+Angular Project

  2. انسٽال ٿيل ايڪسٽينشن ڏانھن وڃو، ڳولا ذريعي تصوير ڳولھيو redis bitnami ۽ تازو ورزن انسٽال ڪريو:

    CI/CD Github Actions for a Flask+Angular Project

  3. اسان ڊائون لوڊ ٿيل ڪنٽينر ۾ وڃون ٿا ۽ ترتيب ترتيب ڏيو: بندرگاهن جي وضاحت ڪريو، وڌ ۾ وڌ مختص ڪيل RAM سائيز، پاسورڊ ۾ ماحول جي متغير، ۽ حجم کي وڌايو:

    CI/CD Github Actions for a Flask+Angular Project

  4. اسان پروڊ ڪنٽينر لاءِ 2-3 مرحلا انجام ڏيون ٿا، سيٽنگون ۾ اسان صرف پيٽرول کي تبديل ڪندا آهيون: پورٽ، پاسورڊ، ريم سائيز ۽ سرور تي حجم فولڊر ڏانهن رستو:

    CI/CD Github Actions for a Flask+Angular Project

Docker رجسٽري

بنيادي خدمتن کان علاوه، اهو سٺو لڳندو ته توهان جي پنهنجي Docker تصويري مخزن کي سرور تي رکي. خوشقسمتيء سان، سرور جي جاء هاڻي ڪافي سستي آهي (يقينا هڪ ​​DockerHub سبسڪرپشن کان سستا)، ۽ هڪ خانگي مخزن کي قائم ڪرڻ جو عمل تمام سادو آهي.

اسان چاهيون ٿا:

هي ڪرڻ لاء:

  1. اچو ته اسان جي رڪنيت ۾ Plesk ۾ ٻه ذيلي ڊومينز ٺاهيون: docker.helloworld.ru ۽ docker-ui.helloworld.ru، ۽ ترتيب ڏيو اچو ته انھن لاءِ سرٽيفڪيٽ انڪريپ ڪريو.
  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 فائل ٺاهينداسين بنيادي اختيار لاءِ Docker مخزن ۾:
    htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
  4. ڪنٽينر گڏ ڪريو ۽ کڻڻ:
    docker-compose up -d
  5. ۽ اسان کي نينڪسڪس کي اسان جي ڪنٽينرز ڏانهن منتقل ڪرڻ جي ضرورت آهي. اهو Plesk ذريعي ڪري سگهجي ٿو.

docker.helloworld.ru ۽ docker-ui.helloworld.ru ذيلي ڊومينز لاءِ هيٺيان قدم کڻڻ گهرجن:

سيڪشن ديو اوزار اسان جي سائيٽ ڏانهن وڃو ڊاکر پراکسي ضابطا:

CI/CD Github Actions for a Flask+Angular Project
۽ اسان جي ڪنٽينر تي پراکسي ايندڙ ٽرئفڪ لاءِ ضابطو شامل ڪريو:

CI/CD Github Actions for a Flask+Angular Project

  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 Github Actions for a Flask+Angular Project
    جڏهن توهان براؤز ريپوزٽريز تي ڪلڪ ڪندا آهيو، برائوزر هڪ اختيار واري ونڊو ڏيکاريندو جتي توهان کي مخزن لاءِ صارف نالو ۽ پاسورڊ داخل ڪرڻ جي ضرورت پوندي. ان کان پوء، اسان کي مخزن جي فهرست سان هڪ صفحي تي منتقل ڪيو ويندو (هاڻي لاء، اهو توهان لاء خالي هوندو):

    CI/CD Github Actions for a Flask+Angular Project

Plesk فائر وال ۾ بندرگاهن کي کولڻ

اجزاء کي انسٽال ڪرڻ ۽ ترتيب ڏيڻ کان پوء، اسان کي بندرگاهن کي کولڻ جي ضرورت آهي ته جيئن اجزاء Docker ڪنٽينرز ۽ خارجي نيٽ ورڪ کان رسائي لائق آهن.

اچو ته ڏسو ته اهو ڪيئن ڪجي استعمال ڪندي Plesk لاءِ فائر وال ايڪسٽينشن جيڪو اسان اڳ ۾ انسٽال ڪيو.

  1. ڏانھن وڃو اوزار ۽ سيٽنگون> سيٽنگون> فائر وال:
    CI/CD Github Actions for a Flask+Angular Project
  2. ڏانھن وڃو Plesk فائر وال قاعدن کي تبديل ڪريو> ڪسٽم قاعدو شامل ڪريو ۽ هيٺيون TCP بندرگاهن کي کوليو ڊاڪر سب نيٽ (172.0.0.0 / 8):
    RabbitMQ: 1883، 4369، 5671-5672، 25672، 61613-61614
    ريڊس: 32785، 32786

    CI/CD Github Actions for a Flask+Angular Project

  3. اسان هڪ قاعدو پڻ شامل ڪنداسين جيڪو پوسٽ گري ايس ايس ايل بندرگاهن ۽ RabbitMQ مئنيجمينٽ پينل کي ٻاهرئين دنيا ڏانهن کليل ڪندو:

    CI/CD Github Actions for a Flask+Angular Project

  4. لاڳو تبديليون بٽڻ استعمال ڪندي ضابطن کي لاڳو ڪريو:

    CI/CD Github Actions for a Flask+Angular Project

Github عملن ۾ CI / CD ترتيب ڏيڻ

اچو ته سڀ کان وڌيڪ دلچسپ حصو تي وڃو - هڪ مسلسل انضمام پائپ لائن قائم ڪرڻ ۽ اسان جي پروجيڪٽ کي سرور تائين پهچائڻ.

هي پائپ لائن ٻن حصن تي مشتمل هوندي:

  • ھڪڙي تصوير ٺاھيو ۽ ٽيسٽ ھلائڻ (پٺاڻ لاءِ) - گٿب پاسي تي؛
  • هلندڙ لڏپلاڻ (پٺاڻن لاءِ) ۽ ڪنٽينر لڳائڻ - سرور تي.

Plesk ڏانهن موڪليو

اچو ته پهرين ٻئي نقطي سان معاملو ڪريون (ڇاڪاڻ ته پهريون ان تي منحصر آهي).

اسان Plesk لاءِ Git ايڪسٽينشن استعمال ڪندي ترتيب ڏيڻ واري عمل کي ترتيب ڏينداسين.

هڪ مثال تي غور ڪريو پروڊ ماحول سان گڏ هڪ پس منظر مخزن لاءِ.

  1. اسان وڃون ٿا اسان جي Helloworld ويب سائيٽ جي سبسڪرپشن ۽ وڃو Git سبسيڪشن:

    CI/CD Github Actions for a Flask+Angular Project

  2. "ريموٽ گيٽ مخزن" جي فيلڊ ۾ اسان جي Github مخزن جي لنڪ داخل ڪريو ۽ ڊفالٽ فولڊر کي تبديل ڪريو httpdocs ٻئي ڏانهن (مثال طور. /httpdocs/hw_back):

    CI/CD Github Actions for a Flask+Angular Project

  3. اڳئين قدم کان SSH پبلڪ ڪيچ کي نقل ڪريو ۽ شامل ڪيو Github سيٽنگون ۾.
  4. اسان قدم 2 ۾ اسڪرين تي ٺيڪ کي دٻايو، جنهن کان پوء اسان Plesk ۾ مخزن واري صفحي ڏانهن منتقل ڪيو وڃي. هاڻي اسان کي مخزن کي ترتيب ڏيڻ جي ضرورت آهي تازه ڪاري ڪرڻ لاءِ ماسٽر برانچ جي ڪمن تي. هن کي ڪرڻ لاء، ڏانهن وڃو مخزن سيٽنگون ۽ قدر بچايو Webhook URL (اسان کي بعد ۾ ان جي ضرورت پوندي جڏهن Github عملن کي ترتيب ڏيو):

    CI/CD Github Actions for a Flask+Angular Project

  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. اسان جي رڪنيت مان هڪ صارف شامل ڪريو Docker گروپ ۾ (انهي ڪري اهي ڪنٽينرز کي منظم ڪري سگهن ٿا):
    sudo usermod -aG docker helloworld_admin

پس منظر واري مخزن لاءِ ديو ماحول ۽ فرنٽ اينڊ ساڳئي طريقي سان ترتيب ڏنل آهن.

Github عملن ۾ لڳائڻ واري پائپ لائن

اچو ته Github Actions ۾ اسان جي CI / CD پائپ لائن جو پهريون حصو ترتيب ڏيو.

Backend

پائپ لائن ۾ بيان ڪيو ويو آهي deploy.yml فائل.

پر ان کي پارس ڪرڻ کان اڳ، اچو ته ڀريون ڳجھي متغير جيڪي اسان کي Github ۾ گهربل آهن. هن کي ڪرڻ لاء، ڏانهن وڃو سيٽنگون -> راز:

  • DOCKER_REGISTRY - اسان جي Docker مخزن جو ميزبان (docker.helloworld.ru)؛
  • DOCKER_LOGIN - Docker مخزن ۾ لاگ ان؛
  • DOCKER_PASSWORD - ان لاء پاسورڊ؛
  • DEPLOY_HOST - ميزبان جتي Plesk منتظم پينل موجود آهي (مثال: helloworld.com: 8443 يا 123.4.56.78:8443)
  • DEPLOY_BACK_PROD_TOKEN - سرور تي پراڊ-رپوزٽري ۾ ڊيپلائيمينٽ لاءِ هڪ ٽوڪن (اسان ان کي پليسڪ پي. 4 ۾ ڊيپلائيمينٽ ۾ حاصل ڪيو)؛
  • DEPLOY_BACK_DEV_TOKEN - سرور تي dev repository تي لڳائڻ لاءِ ٽوڪن.

لڳائڻ جو عمل سادو آهي ۽ ٽن مکيه مرحلن تي مشتمل آهي:

  • اسان جي مخزن ۾ تصوير کي تعمير ۽ شايع ڪرڻ؛
  • تازي ٺهيل تصوير جي بنياد تي ڪنٽينر ۾ هلندڙ ٽيسٽ؛
  • برانچ (dev/master) جي لحاظ کان مطلوب ماحول ۾ ترتيب ڏيڻ.

Frontend

سامهون واري مخزن لاءِ deploy.yml فائل بيڪ کان ٿورو مختلف. اهو هلندڙ ٽيسٽن سان گڏ هڪ قدم نه آهي ۽ ترتيب ڏيڻ لاءِ ٽوڪن جا نالا تبديل ڪري ٿو. سامهون مخزن لاء راز، رستي ۾، الڳ الڳ ڀريو وڃي.

سائيٽ سيٽ اپ

Nginx ذريعي ٽريفڪ پراکسي

خير، اسان آخر ۾ آيا آهيون. اهو صرف Nginx ذريعي اسان جي ڪنٽينر ڏانهن ايندڙ ۽ ٻاهرئين ٽرئفڪ جي پراکسي ترتيب ڏيڻ لاء رهي ٿو. اسان اڳ ۾ ئي هن عمل کي ڍڪي ڇڏيو آهي قدم 5 ۾ Docker رجسٽري سيٽ اپ. ساڳيو ئي ديو ۽ پروڊ ماحول ۾ پوئتي ۽ سامهون حصن لاء بار بار ڪيو وڃي.

مان سيٽنگن جا اسڪرين شاٽ ڏيندس.

Backend

CI/CD Github Actions for a Flask+Angular Project

Frontend

CI/CD Github Actions for a Flask+Angular Project
جي. سڀ URLs فرنٽ ائنڊ ڪنٽينر تي پراڪس ڪيا ويندا، سواءِ انھن جي جن سان شروع ٿئي /api/ - اهي پوئين ڪنٽينر ڏانهن پراڪس ڪيا ويندا (تنهنڪري پوئين ڪنٽينر ۾، سڀني هٿيارن سان شروع ٿيڻ گهرجي /api/).

نتيجو

ھاڻي اسان جي سائيٽ helloworld.ru ۽ dev.helloworld.ru (ترتيب سان prod- ۽ dev-environments) تي دستياب ٿيڻ گھرجي.

مجموعي طور تي، اسان سکيو ته فلاسڪ ۽ انگولر ۾ هڪ سادي ايپليڪيشن ڪيئن تيار ڪجي ۽ گيٿب ايڪشنز ۾ هڪ پائيپ لائين قائم ڪجي ته ان کي Plesk هلائيندڙ سرور ڏانهن رول آئوٽ ڪيو وڃي.

مان ڪوڊ سان گڏ مخزن جي لنڪ کي نقل ڪندس: پس منظر, اڳيون.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو