Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD
ဤဆောင်းပါးတွင်၊ Plesk Control Panel နှင့် Github လုပ်ဆောင်ချက်များကို အသုံးပြု၍ CI/CD စနစ်ထည့်သွင်းခြင်းဆိုင်ရာ ကျွန်ုပ်၏အတွေ့အကြုံကို မျှဝေပါမည်။ ယနေ့ ကျွန်ုပ်တို့သည် ရှုပ်ထွေးမှုမရှိသောအမည် "Helloworld" ဖြင့် ရိုးရှင်းသောပရောဂျက်တစ်ခုကို မည်သို့အသုံးချရမည်ကို လေ့လာပါမည်။ ၎င်းကို Celery လုပ်သားများနှင့် Angular 8 ရှေ့တန်းစဥ်နှင့်အတူ Flask Python မူဘောင်တွင် ရေးသားထားသည်။

repositories သို့ လင့်ခ်များ- နောက်ခံပစ္စည်း, ရှေ့ပိုင်း.

ဆောင်းပါး၏ပထမပိုင်း၌ကျွန်ုပ်တို့၏ပရောဂျက်နှင့်၎င်း၏အစိတ်အပိုင်းများကိုကြည့်ရှုပါမည်။ ဒုတိယတွင်၊ Plesk ကိုသတ်မှတ်ပြီး လိုအပ်သော တိုးချဲ့မှုများနှင့် အစိတ်အပိုင်းများ (DB၊ RabbitMQ၊ Redis၊ Docker စသည်) ကို မည်သို့ထည့်သွင်းရမည်ကို အဖြေရှာပါမည်။

တတိယအပိုင်းတွင်၊ နောက်ဆုံးတွင်၊ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ပရောဂျက်ကို dev နှင့် ထုတ်ကုန်ပတ်ဝန်းကျင်ရှိ ဆာဗာတစ်ခုသို့ အသုံးချရန်အတွက် ပိုက်လိုင်းတစ်ခုကို မည်သို့တည်ဆောက်ရမည်ကို ကျွန်ုပ်တို့ နောက်ဆုံးတွင် ရှာဖွေပါမည်။ ထို့နောက် ကျွန်ုပ်တို့သည် ဆာဗာပေါ်တွင် ဆိုက်ကို စတင်ပါမည်။

ဟုတ်တယ်၊ ငါကိုယ်တိုင်မိတ်ဆက်ဖို့မေ့သွားတယ်။ ကျွန်ုပ်၏အမည်မှာ Oleg Borzov ဖြစ်ပါသည်၊ ကျွန်ုပ်သည် Domclick ရှိ အပေါင်ခံမန်နေဂျာများအတွက် CRM အဖွဲ့ရှိ fullstack developer ဖြစ်သည်။

ပရောဂျက် ခြုံငုံသုံးသပ်ချက်

ပထမဦးစွာ၊ ပရောဂျက် repositories နှစ်ခု - backend နှင့် front - နှင့် code ကိုကျော်ကြည့်ကြပါစို့။

နောက်ခံ- ပန်းကန်လုံး+ တရုတ်နံနံ

နောက်အပိုင်းအတွက်၊ Python developer များကြားတွင် အတော်လေးရေပန်းစားသော အစုအစည်းတစ်ခုဖြစ်သည့် Flask framework ( API အတွက်) နှင့် Celery (အလုပ်တန်းစီခြင်းအတွက်) ကို ယူလိုက်ပါသည်။ SQLAchemy ကို ORM အဖြစ်အသုံးပြုသည်။ Alembic ကို ရွှေ့ပြောင်းနေထိုင်မှုများတွင် အသုံးပြုသည်။ လက်ကိုင်များတွင် JSON အတည်ပြုခြင်းအတွက် - Marshmallow

В သိုလှောင်မှုများ ပရောဂျက်ကိုလုပ်ဆောင်ရန်အတွက် ဖွဲ့စည်းပုံနှင့် အသေးစိတ်ဖော်ပြချက်ပါရှိသော Readme.md ဖိုင်တစ်ခုရှိသည်။

ဝဘ်အပိုင်း API တော်တော်ရှုပ်ထွေးပါတယ်၊ ဖောင်တိန် ၆ ချောင်းပါရှိပါတယ်။

  • /ping - ရရှိနိုင်မှုကိုစစ်ဆေးရန်;
  • မှတ်ပုံတင်ခြင်း၊ ခွင့်ပြုချက်၊ ခွင့်ပြုချက် ဖျက်သိမ်းခြင်းနှင့် တရားဝင်အသုံးပြုသူရရှိရေးတို့အတွက် ကိုင်တွယ်ဆောင်ရွက်ခြင်း၊
  • ဆလရီတန်းစီတွင် လုပ်ဆောင်စရာတစ်ခုကို ထည့်သွင်းထားသည့် အီးမေးလ်လက်ကိုင်တစ်ခု။

တရုတ်နံနံ အပိုင်း ပိုလွယ်တယ်၊ ပြဿနာတစ်ခုပဲရှိတယ်။ send_mail_task.

ဖိုင်တွဲထဲမှာ /conf ဖိုင်တွဲခွဲနှစ်ခုရှိသည်။

  • docker Dockerfile နှစ်ခု (base.dockerfile ပြောင်းလဲခဲသော အခြေခံပုံသဏ္ဍာန်နှင့် တည်ဆောက်ရန် Dockerfile ပင်မစည်းဝေးပွဲများအတွက်);
  • .env_files - မတူညီသောပတ်ဝန်းကျင်များအတွက်ပတ်ဝန်းကျင်ပြောင်းလွဲမှုများပါသောဖိုင်များနှင့်အတူ။

ပရောဂျက်၏ root တွင် docker-compose ဖိုင်လေးခုရှိသည်-

  • docker-compose.local.db.yml ဖွံ့ဖြိုးတိုးတက်မှုအတွက် ဒေသဆိုင်ရာဒေတာဘေ့စ်ကို မြှင့်တင်ရန်၊
  • docker-compose.local.workers.yml လုပ်သား၊ ဒေတာဘေ့စ်၊ Redis နှင့် RabbitMQ တို့ကို ဒေသဆိုင်ရာ ပြုစုပျိုးထောင်မှုအတွက်၊
  • docker-compose.test.yml ဖြန့်ကျက်စဉ်အတွင်း စမ်းသပ်မှုများ လုပ်ဆောင်ရန်၊
  • docker-compose.yml ဖြန့်ကျက်မှုအတွက်။

ငါတို့စိတ်ဝင်စားတဲ့ နောက်ဆုံးဖိုင်တွဲက .ci-cd. ၎င်းတွင် အသုံးပြုရန်အတွက် shell script များပါရှိသည်-

  • deploy.sh - ရွှေ့ပြောင်းခြင်းနှင့် ဖြန့်ကျက်ခြင်း စတင်ခြင်း။ Github လုပ်ဆောင်ချက်များတွင် စမ်းသပ်မှုများ တည်ဆောက်ပြီးနောက် ဆာဗာပေါ်တွင် လုပ်ဆောင်သည်။
  • rollback.sh - ကွန်တိန်နာများ၏ ယခင်ဗားရှင်းသို့ ကွန်တိန်နာများ ပြန်သိမ်းခြင်း၊
  • curl_tg.sh - Telegram သို့ ဖြန့်ကျက်သတိပေးချက်များ ပေးပို့ခြင်း။

Angular တွင် Frontend

အရှေ့ဘက်တွင် သိမ်းဆည်းထားသည်။ Beck ထက် အများကြီး ပိုရိုးရှင်းပါတယ်။ အရှေ့ဘက်တွင် စာမျက်နှာသုံးမျက်နှာပါရှိသည်။

  • အီးမေးလ်ပို့ရန် ဖောင်တစ်ခုနှင့် ထွက်ပေါက်ခလုတ်တစ်ခုပါရှိသော ပင်မစာမျက်နှာ။
  • အကောင့်ဝင်စာမျက်နှာ။
  • မှတ်ပုံတင်စာမျက်နှာ။

ပင်မစာမျက်နှာသည် သိမ်မွေ့လှသည်-

Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD
root မှာ ဖိုင်နှစ်ခုရှိပါတယ်။ Dockerfile и docker-compose.ymlအကျွမ်းတဝင်ရှိဖို .ci-cd back repository ထက် အနည်းငယ်နည်းသော script များဖြင့် (စမ်းသပ်လုပ်ဆောင်ရန်အတွက် script များကို ဖယ်ရှားထားသည်)။

Plesk တွင် ပရောဂျက်တစ်ခု စတင်ခြင်း။

Plesk ကို စတင်သတ်မှတ်ပြီး ကျွန်ုပ်တို့၏ဆိုက်အတွက် စာရင်းသွင်းမှုတစ်ခု ဖန်တီးခြင်းဖြင့် စတင်ကြပါစို့။

တိုးချဲ့မှုများ ထည့်သွင်းခြင်း။

Plesk တွင်၊ ကျွန်ုပ်တို့သည် တိုးချဲ့မှုလေးခု လိုအပ်သည်-

  • Docker Plesk admin panel ရှိ ကွန်တိန်နာများ၏ အခြေအနေကို စီမံခန့်ခွဲရန်နှင့် အမြင်အာရုံကို ပြသရန်၊
  • Git ဆာဗာပေါ်တွင် ဖြန့်ကျက်မှု အဆင့်ကို သတ်မှတ်ရန်၊
  • Let's Encrypt အခမဲ့ TLS လက်မှတ်များကို ထုတ်လုပ်ရန် (နှင့် အလိုအလျောက် သက်တမ်းတိုးရန်)
  • Firewall အဝင်အသွားအလာများကို စစ်ထုတ်ခြင်းကို စီစဉ်သတ်မှတ်ရန်။

တိုးချဲ့မှုများကဏ္ဍရှိ Plesk စီမံခန့်ခွဲရေးအကန့်မှ ၎င်းတို့ကို သင်ထည့်သွင်းနိုင်သည်-

Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD
တိုးချဲ့မှုများအတွက် အသေးစိတ်ဆက်တင်များကို ကျွန်ုပ်တို့ ထည့်သွင်းစဉ်းစားမည်မဟုတ်ပါ၊ မူရင်းဆက်တင်များသည် ကျွန်ုပ်တို့၏သရုပ်ပြရည်ရွယ်ချက်များအတွက် လုပ်ဆောင်ပါမည်။

စာရင်းသွင်းမှုနှင့် ဆိုက်တစ်ခု ဖန်တီးပါ။

ထို့နောက် ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ helloworld.ru ဝဘ်ဆိုက်အတွက် စာရင်းသွင်းမှုတစ်ခုကို ဖန်တီးပြီး ထိုနေရာတွင် dev.helloworld.ru ဒိုမိန်းခွဲကို ပေါင်းထည့်ရပါမည်။

  1. helloworld.ru ဒိုမိန်းအတွက် စာရင်းသွင်းမှုတစ်ခုကို ဖန်တီးပြီး စနစ်အသုံးပြုသူအတွက် အကောင့်ဝင်-စကားဝှက်ကို သတ်မှတ်ပါ-

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD
    စာမျက်နှာ၏အောက်ခြေရှိအကွက်ကိုစစ်ဆေးပါ။ Let's Encrypt ဖြင့် ဒိုမိန်းကို လုံခြုံအောင်ထားပါ။ဆိုက်အတွက် HTTPS ကို သတ်မှတ်လိုပါက-

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

  2. ထို့နောက်၊ ဤစာရင်းသွင်းမှုတွင်၊ ဒိုမိန်းခွဲ dev.helloworld.ru ကိုဖန်တီးပါ (သင်သည် အခမဲ့ TLS လက်မှတ်ကိုလည်း ထုတ်ပေးနိုင်သည်)။

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

ဆာဗာ အစိတ်အပိုင်းများကို ထည့်သွင်းခြင်း။

ကျွန်ုပ်တို့တွင် ဆာဗာတစ်ခုရှိသည်။ OS Debian Stretch 9.12 နှင့် control panel ကိုတပ်ဆင်ထားသည်။ Plesk Obsidian 18.0.27.

ကျွန်ုပ်တို့၏ပရောဂျက်အတွက် တပ်ဆင်ရန်နှင့် ပြင်ဆင်သတ်မှတ်ရန် လိုအပ်သည်-

  • PostgreSQL (ကျွန်ုပ်တို့၏ကိစ္စတွင်၊ dev နှင့် prod ပတ်၀န်းကျင်အတွက် databases နှစ်ခုပါသော server တစ်ခုရှိလိမ့်မည်)။
  • RabbitMQ (တူညီသော၊ တူညီသောဥပမာနှင့်ပတ်ဝန်းကျင်အတွက်ကွဲပြားသော vhosts)။
  • Redis ဖြစ်ရပ်နှစ်ခု (dev နှင့် ထုတ်ကုန်ပတ်ဝန်းကျင်အတွက်)။
  • Docker Registry (တည်ဆောက်ထားသော Docker ပုံများ၏ ဒေသတွင်းသိုလှောင်မှုအတွက်)။
  • Docker မှတ်ပုံတင်ခြင်းအတွက် UI။

PostgreSQL

Plesk သည် PostgreSQL DBMS နှင့် ပါပြီးသားဖြစ်သော်လည်း နောက်ဆုံးထွက်ဗားရှင်းမဟုတ်ပါ (Plesk Obsidian ရေးသားနေချိန်၊ ထောက်ခံသည်။ Postgres ဗားရှင်း 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.confdefault port 5432 သည် အခြားသို့ (ကျွန်ုပ်တို့၏ ဥပမာတွင် - 53983).

configuration file ကိုပြောင်းပြီးနောက်၊ command ဖြင့် postgresql-server ကို ပြန်လည်စတင်ပါ။

service postgresql restart

ကျွန်ုပ်တို့သည် PostgreSQL ကို ထည့်သွင်းပြီး ပြင်ဆင်ထားပါသည်။ ယခု ဒေတာဘေ့စ်တစ်ခု၊ dev နှင့် ထုတ်ကုန်ပတ်ဝန်းကျင်များအတွက် အသုံးပြုသူများကို ဖန်တီးပြီး ဒေတာဘေ့စ်ကို စီမံခန့်ခွဲရန် အသုံးပြုသူများကို အခွင့်အရေးပေးကြပါစို့။

$ 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

ယုန် MQ

Celery အတွက် မက်ဆေ့ချ်ပွဲစား RabbitMQ ကို တပ်ဆင်ခြင်းသို့ ဆက်သွားကြပါစို့။ ၎င်းကို Debian တွင် ထည့်သွင်းခြင်းသည် အလွန်ရိုးရှင်းပါသည်။

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 ကို install လုပ်ပြီး configure ကြပါစို့။ ဆလရီလုပ်ငန်းဆောင်တာများ၏ ရလဒ်များကို သိမ်းဆည်းရန်အတွက် ၎င်းကို နောက်ကွယ်တွင် အသုံးပြုမည်ဖြစ်သည်။

တိုးချဲ့မှုကို အသုံးပြု၍ dev နှင့် ထုတ်ကုန်ပတ်ဝန်းကျင်အတွက် Redis ဖြင့် Docker ကွန်တိန်နာနှစ်လုံးကို ပြုစုပျိုးထောင်ပါမည်။ Docker Plesk အတွက်

  1. Plesk သို့သွားပါ၊ Extensions ကဏ္ဍကိုသွားပါ၊ Docker extension ကိုရှာဖွေပြီး၎င်းကိုထည့်သွင်းပါ (ကျွန်ုပ်တို့အခမဲ့ဗားရှင်းလိုအပ်သည်)

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

  2. ထည့်သွင်းထားသော တိုးချဲ့မှုသို့ သွားပါ၊ ရှာဖွေမှုမှတစ်ဆင့် ပုံကို ရှာပါ။ redis bitnami နောက်ဆုံးထွက်ဗားရှင်းကို ထည့်သွင်းပါ-

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

  3. ကျွန်ုပ်တို့သည် ဒေါင်းလုဒ်လုပ်ထားသော ကွန်တိန်နာထဲသို့ သွားပြီး ဖွဲ့စည်းမှုပုံစံကို ချိန်ညှိပါ- ဆိပ်ကမ်းကို သတ်မှတ်ပါ၊ အများဆုံး ခွဲဝေထားသော RAM အရွယ်အစား၊ ပတ်ဝန်းကျင် ကိန်းရှင်များတွင် စကားဝှက်နှင့် အသံအတိုးအကျယ်ကို တပ်ဆင်ပါ-

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

  4. ကျွန်ုပ်တို့သည် ထုတ်ကုန်ကွန်တိန်နာအတွက် အဆင့် 2-3 ကိုလုပ်ဆောင်သည်၊ ဆက်တင်များတွင် ကျွန်ုပ်တို့သည် ပါရာမီတာများကိုသာ ပြောင်းလဲပါသည်- ဆိပ်ကမ်း၊ စကားဝှက်၊ RAM အရွယ်အစားနှင့် ဆာဗာရှိ အသံဖိုင်တွဲသို့ လမ်းကြောင်းကို ပြောင်းလဲသည်-

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

Docker မှတ်ပုံတင်ခြင်း။

အခြေခံဝန်ဆောင်မှုများအပြင်၊ သင်၏ကိုယ်ပိုင် Docker image repository ကိုဆာဗာပေါ်တွင်တင်ခြင်းသည်ကောင်းလိမ့်မည်။ ကံကောင်းထောက်မစွာ၊ ယခုအခါ ဆာဗာနေရာသည် အလွန်စျေးပေါနေပြီ ( DockerHub စာရင်းသွင်းမှုထက် စျေးသက်သာသည် ) နှင့် သီးသန့်သိုလှောင်ခန်းတစ်ခုတည်ဆောက်ခြင်းလုပ်ငန်းစဉ်သည် အလွန်ရိုးရှင်းပါသည်။

ကျွန်ုပ်တို့ရှိလိုသည်-

  • စကားဝှက်ဖြင့် ကာကွယ်ထားသော Docker သိုလှောင်မှုအား ဒိုမိန်းခွဲတစ်ခုတွင် အသုံးပြုနိုင်သည်။ https://docker.helloworld.ru;
  • repository အတွင်းရှိပုံများကိုကြည့်ရှုရန် UI ကို၊ တွင်ရနိုင်သည်။ https://docker-ui.helloworld.ru.

: ဒီလိုလုပ်ဖို့

  1. ကျွန်ုပ်တို့၏စာရင်းသွင်းမှုတွင် Docker.helloworld.ru နှင့် docker-ui.helloworld.ru တွင် Plesk တွင် ဒိုမိန်းခွဲနှစ်ခုကို ဖန်တီးပြီး ၎င်းတို့အတွက် လက်မှတ်များကို လျှို့ဝှက်ကုဒ်သွင်းကြပါစို့။
  2. ဖိုင်ကို docker.helloworld.ru subdomain ဖိုဒါတွင် ထည့်ပါ။ 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 အောက်တွင်၊ Docker repository ရှိ အခြေခံခွင့်ပြုချက်အတွက် .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 ဒိုမိန်းခွဲများအတွက် အောက်ပါအဆင့်များကို လုပ်ဆောင်ရန် လိုအပ်သည်-

အပိုင်း dev Tools များ ကျွန်တော်တို့ရဲ့ site ကိုသွားပါ။ Docker Proxy စည်းမျဉ်းများ:

Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD
ပြီးလျှင် ကျွန်ုပ်တို့၏ကွန်တိန်နာသို့ ပရောက်စီအဝင်အသွားအလာတွင် စည်းမျဉ်းတစ်ခုထည့်ပါ-

Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် 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 ဒိုမိန်းခွဲ၏ လုပ်ဆောင်ချက်ကိုလည်း စစ်ဆေးကြည့်ကြပါစို့။

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD
    Browse repositories ကို နှိပ်လိုက်သောအခါ၊ browser သည် repository အတွက် username နှင့် password ကို ရိုက်ထည့်ရန် လိုအပ်သည့် ခွင့်ပြုချက် window တစ်ခုကို ပြသပါမည်။ ၎င်းနောက်၊ ကျွန်ုပ်တို့သည် သိုလှောင်ရာနေရာများစာရင်းပါသည့် စာမျက်နှာသို့ ပြန်ညွှန်းသွားပါမည် (ယခုအချိန်တွင်၊ ၎င်းသည် သင့်အတွက် ဗလာဖြစ်နေလိမ့်မည်)

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

Plesk Firewall တွင် ဆိပ်ကမ်းများဖွင့်ခြင်း။

အစိတ်အပိုင်းများကို ထည့်သွင်းပြီး ပြင်ဆင်သတ်မှတ်ပြီးနောက်၊ Docker ကွန်တိန်နာများနှင့် ပြင်ပကွန်ရက်များမှ အစိတ်အပိုင်းများကို ဝင်ရောက်ကြည့်ရှုနိုင်စေရန် ဆိပ်ကမ်းများကို ဖွင့်ရန် လိုအပ်ပါသည်။

အစောပိုင်းက ကျွန်ုပ်တို့ထည့်သွင်းခဲ့သည့် Plesk အတွက် Firewall extension ကို အသုံးပြု၍ ၎င်းကို မည်သို့လုပ်ဆောင်ရမည်ကို ကြည့်ကြပါစို့။

  1. သွားပါ။ ကိရိယာများနှင့် ဆက်တင်များ > ဆက်တင်များ > Firewall:
    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD
  2. သွားပါ။ Plesk Firewall စည်းမျဉ်းများကို ပြင်ဆင်ပါ > စိတ်ကြိုက်စည်းကမ်းကို ထည့်ပါ။ Docker subnet အတွက် အောက်ပါ TCP port များကိုဖွင့်ပါ (172.0.0.0 / 8):
    RabbitMQ: 1883၊ 4369၊ 5671-5672၊ 25672၊ 61613-61614
    Redis: 32785၊ 32786

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

  3. ကျွန်ုပ်တို့သည် PostgreSQL ဆိပ်ကမ်းများနှင့် RabbitMQ စီမံခန့်ခွဲမှုအကန့်များကို ပြင်ပကမ္ဘာသို့ဖွင့်မည့် စည်းမျဉ်းကိုလည်း ထည့်သွင်းပါမည်-

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

  4. ပြောင်းလဲမှုများကို အသုံးချရန် ခလုတ်ကို အသုံးပြု၍ စည်းမျဉ်းများကို ကျင့်သုံးပါ-

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

Github လုပ်ဆောင်ချက်များတွင် CI/CD ကို စနစ်ထည့်သွင်းခြင်း။

စိတ်ဝင်စားစရာအကောင်းဆုံး အပိုင်းကို ဆင်းကြပါစို့ - စဉ်ဆက်မပြတ် ပေါင်းစည်းမှု ပိုက်လိုင်းကို တည်ဆောက်ပြီး ကျွန်ုပ်တို့၏ ပရောဂျက်ကို ဆာဗာသို့ ပို့ဆောင်ပါ။

ဤပိုက်လိုင်းတွင် အပိုင်းနှစ်ပိုင်း ပါဝင်မည်ဖြစ်သည်-

  • ပုံတစ်ခုတည်ဆောက်ပြီး စမ်းသပ်မှုများ (နောက်ခံအတွက်) - Github ဘက်ခြမ်းတွင်၊
  • ရွှေ့ပြောင်းမှုများ (နောက်ကွယ်အတွက်) လုပ်ဆောင်နေပြီး ကွန်တိန်နာများကို ဆာဗာပေါ်တွင် ဖြန့်ကျက်လုပ်ဆောင်ခြင်း။

Plesk သို့ ဖြန့်ကျက်ပါ။

ဒုတိယအချက်ကို အရင်ဆွေးနွေးကြည့်ရအောင် (ပထမအချက်က အဲဒီအပေါ်မှာမူတည်တဲ့အတွက်)။

Plesk အတွက် Git တိုးချဲ့မှုကို အသုံးပြု၍ ဖြန့်ကျက်ခြင်းလုပ်ငန်းစဉ်ကို ပြင်ဆင်သတ်မှတ်ပါမည်။

Backend repository တစ်ခုအတွက် Prod ပတ်ဝန်းကျင်နှင့် ဥပမာတစ်ခုကို သုံးသပ်ကြည့်ပါ။

  1. ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ Helloworld ဝဘ်ဆိုက်၏ စာရင်းသွင်းမှုကို သွားပြီး Git ကဏ္ဍခွဲသို့ သွားပါ။

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

  2. "Remote Git repository" အကွက်ထဲသို့ ကျွန်ုပ်တို့၏ Github သိုလှောင်ရာသို့ လင့်ခ်တစ်ခုကို ထည့်သွင်းပြီး မူရင်းဖိုင်တွဲကို ပြောင်းလဲပါ။ httpdocs အခြားသို့ (ဥပမာ။ /httpdocs/hw_back):

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

  3. ယခင်အဆင့်မှ SSH Public key ကို ကူးယူပါ။ ထည့်ပါ။ Github ဆက်တင်များတွင်၎င်း။
  4. အဆင့် 2 ရှိစခရင်ပေါ်တွင် OK ကိုနှိပ်ပါ၊ ထို့နောက် Plesk ရှိ repository စာမျက်နှာသို့ကျွန်ုပ်တို့ကိုပြန်ညွှန်းပါမည်။ ယခု ကျွန်ုပ်တို့သည် မာစတာဌာနခွဲသို့ ကတိပြုမှုများတွင် အပ်ဒိတ်လုပ်ရန် repository ကို configure လုပ်ရန် လိုအပ်ပါသည်။ ဒီလိုလုပ်ဖို့၊ သွားပါ။ Repository ဆက်တင်များ တန်ဖိုးကို သိမ်းဆည်းပါ။ Webhook URL (Github လုပ်ဆောင်ချက်များကို စဖွင့်သောအခါတွင် ကျွန်ုပ်တို့ ၎င်းကို နောက်ပိုင်းတွင် လိုအပ်ပါမည်)။

    Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် 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} - ဆာဗာရှိ backend repository ၏ prod folder သို့လမ်းကြောင်း။
    {ENV} - ပတ်ဝန်းကျင် (dev/prod) တို့၏ ကိစ္စ prod;
    {DOCKER_REGISTRY_HOST} - ကျွန်ုပ်တို့၏ docker repository ၏အိမ်ရှင်
    {TG_BOT_TOKEN} - Telegram bot တိုကင်၊
    {TG_CHAT_ID} — အသိပေးချက်များပေးပို့ခြင်းအတွက် ချတ်/ချန်နယ်၏ 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 လုပ်ဆောင်ချက်များတွင် ကျွန်ုပ်တို့၏ CI/CD ပိုက်လိုင်း၏ ပထမအပိုင်းကို စတင်သတ်မှတ်ခြင်းသို့ ဆက်သွားကြပါစို့။

backend

ပိုက်လိုင်းမှာ ဖော်ပြထားတယ်။ deploy.yml ဖိုင်.

ဒါပေမယ့် ခွဲခြမ်းစိတ်ဖြာခြင်းမပြုမီ Github တွင် ကျွန်ုပ်တို့လိုအပ်သော လျှို့ဝှက်ကိန်းရှင်များကို ဖြည့်ကြပါစို့။ ဒီလိုလုပ်ဖို့၊ သွားပါ။ ဆက်တင်များ -> လျှို့ဝှက်ချက်များ:

  • DOCKER_REGISTRY - ကျွန်ုပ်တို့၏ Docker repository (docker.helloworld.ru);
  • DOCKER_LOGIN - Docker repository သို့ဝင်ရောက်ပါ။
  • DOCKER_PASSWORD - ၎င်းကိုစကားဝှက်;
  • DEPLOY_HOST — Plesk စီမံခန့်ခွဲသူအကန့်ကိုရရှိနိုင်သည့်နေရာ၌ လက်ခံဆောင်ရွက်ပေးသည် (ဥပမာ- helloworld.ru: 8443 သို့မဟုတ် 123.4.56.78:8443);
  • DEPLOY_BACK_PROD_TOKEN - ဆာဗာပေါ်ရှိ prod-repository သို့ ဖြန့်ကျက်ခြင်းအတွက် တိုကင်တစ်ခု (ကျွန်ုပ်တို့ ၎င်းကို Plesk p. 4 တွင် ဖြန့်ကျက်ခြင်းတွင် ရပါသည်);
  • DEPLOY_BACK_DEV_TOKEN - ဆာဗာရှိ dev repository သို့ ဖြန့်ကျက်ခြင်းအတွက် တိုကင်။

ဖြန့်ကျက်ခြင်းလုပ်ငန်းစဉ်သည် ရိုးရှင်းပြီး အဓိက အဆင့်သုံးဆင့် ပါဝင်သည်-

  • ကျွန်ုပ်တို့၏သိုလှောင်ခန်းတွင် ရုပ်ပုံတည်ဆောက်ခြင်းနှင့် ထုတ်ဝေခြင်း၊
  • အသစ်တည်ဆောက်ထားသော ပုံပေါ်အခြေခံ၍ ကွန်တိန်နာအတွင်း စမ်းသပ်မှုများ လုပ်ဆောင်နေခြင်း၊
  • ဌာနခွဲ (dev/master) ပေါ်မူတည်၍ အလိုရှိသော ပတ်ဝန်းကျင်သို့ ဖြန့်ကျက်ခြင်း။

frontend

အရှေ့ဘက် repository အတွက် deploy.yml ဖိုင် Beck နဲ့ အနည်းငယ် ကွာခြားပါတယ်။ ၎င်းသည် လုပ်ဆောင်နေသည့် စမ်းသပ်မှုများနှင့် ဖြန့်ကျက်ခြင်းအတွက် တိုကင်များ၏ အမည်များကို ပြောင်းလဲခြင်းနှင့်အတူ အဆင့်တစ်ဆင့်မရှိပေ။ စကားမစပ်၊ ရှေ့သိုလှောင်ခန်းအတွက် လျှို့ဝှက်ချက်များကို သီးခြားဖြည့်စွက်ရန် လိုအပ်သည်။

ဝဘ်ဆိုက်သတ်မှတ်ခြင်း။

Nginx မှတဆင့် ပရောက်စီလမ်းကြောင်းကို လုပ်ဆောင်ခြင်း။

ကောင်းပြီ၊ ငါတို့အဆုံးကိုရောက်ပြီ။ ၎င်းသည် ကျွန်ုပ်တို့၏ Nginx မှတဆင့် ကျွန်ုပ်တို့၏ကွန်တိန်နာသို့ အဝင်အထွက်အသွားအလာများကို proxying လုပ်ရန် စီစဉ်ရန်သာကျန်တော့သည်။ Docker Registry စနစ်ထည့်သွင်းမှု၏ အဆင့် 5 တွင် ဤလုပ်ငန်းစဉ်ကို ကျွန်ုပ်တို့ ခြုံငုံပြီးဖြစ်သည်။ dev နှင့် prod ပတ်၀န်းကျင်ရှိ အနောက်နှင့် ရှေ့ အစိတ်အပိုင်းများအတွက် အလားတူ ထပ်ခါထပ်ခါ ပြုလုပ်သင့်သည်။

ဆက်တင်များ၏ ဖန်သားပြင်ဓာတ်ပုံများကို ကျွန်ုပ်ပေးပါမည်။

backend

Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD

frontend

Flask+Angular ပရောဂျက်အတွက် Github လုပ်ဆောင်ချက်များတွင် CI/CD
Важноеуточнение. URL များအားလုံးသည် ရှေ့ဆုံးကွန်တိန်နာသို့ proxied ဖြစ်လိမ့်မည်၊ /api/ - ၎င်းတို့ကို နောက်ဖေးကွန်တိန်နာသို့ ပို့ဆောင်ပေးပါမည်။ နောက်ဘက် ကွန်တိန်နာတွင်၊ ကိုင်တွယ်သူအားလုံးနှင့် စတင်ရပါမည်။ /api/).

ရလဒ်များကို

ယခုကျွန်ုပ်တို့၏ site ကို helloworld.ru နှင့် dev.helloworld.ru (prod- နှင့် dev-environments အသီးသီး) တွင်ရရှိနိုင်သင့်သည်။

စုစုပေါင်း၊ ကျွန်ုပ်တို့သည် Flask နှင့် Angular တွင် ရိုးရှင်းသော အက်ပလီကေးရှင်းကို ပြင်ဆင်နည်းကို လေ့လာခဲ့ပြီး Plesk လည်ပတ်သည့် ဆာဗာသို့ ဖြန့်ကျက်ရန် Github Actions တွင် ပိုက်လိုင်းတစ်ခုကို တည်ဆောက်ခဲ့သည်။

ကျွန်ုပ်သည် ကုဒ်ဖြင့် သိုလှောင်ရာများသို့ လင့်ခ်များကို မိတ္တူပွားပါမည်။ နောက်ခံပစ္စည်း, ရှေ့ပိုင်း.

source: www.habr.com

မှတ်ချက် Add