ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD
ఈ కథనంలో, నేను Plesk నియంత్రణ ప్యానెల్ మరియు Github చర్యలను ఉపయోగించి CI/CDని సెటప్ చేయడంలో నా అనుభవాన్ని పంచుకుంటాను. ఈ రోజు మనం "Helloworld" అనే సాధారణ పేరుతో ఒక సాధారణ ప్రాజెక్ట్‌ను ఎలా అమలు చేయాలో నేర్చుకుంటాము. ఇది పైథాన్ ఫ్రేమ్‌వర్క్ ఫ్లాస్క్‌లో వ్రాయబడింది, సెలెరీలో కార్మికులు మరియు కోణీయ 8లో ఫ్రంట్‌ఎండ్ ఉంటుంది.

రిపోజిటరీలకు లింక్‌లు: బ్యాకెండ్, ముందుభాగం.

వ్యాసం యొక్క మొదటి భాగంలో మేము మా ప్రాజెక్ట్ మరియు దాని భాగాలను పరిశీలిస్తాము. రెండవదానిలో, Pleskని ఎలా కాన్ఫిగర్ చేయాలో మరియు అవసరమైన పొడిగింపులు మరియు భాగాలను (DB, RabbitMQ, Redis, Docker, మొదలైనవి) ఎలా ఇన్‌స్టాల్ చేయాలో మేము కనుగొంటాము.

మూడవ భాగంలో, డెవ్ మరియు ప్రోడ్ ఎన్విరాన్‌మెంట్‌లోని సర్వర్‌కు మా ప్రాజెక్ట్‌ని అమలు చేయడానికి పైప్‌లైన్‌ను ఎలా సెటప్ చేయాలో మేము చివరకు కనుగొంటాము. ఆపై మేము సర్వర్‌లో సైట్‌ను ప్రారంభిస్తాము.

అవును, నన్ను నేను పరిచయం చేసుకోవడం మర్చిపోయాను. నా పేరు ఒలేగ్ బోర్జోవ్, నేను డొమ్‌క్లిక్‌లో తనఖా రుణాల నిర్వాహకుల కోసం CRM బృందంలో పూర్తి-స్టాక్ డెవలపర్‌ని.

ప్రాజెక్టు అవలోకనం

ముందుగా, రెండు ప్రాజెక్ట్ రిపోజిటరీలను చూద్దాం - బ్యాకెండ్ మరియు ఫ్రంట్ - మరియు కోడ్ ద్వారా వెళ్ళండి.

బ్యాకెండ్ భాగం: ఫ్లాస్క్ + సెలెరీ

బ్యాక్ ఎండ్ కోసం, నేను పైథాన్ డెవలపర్‌లలో బాగా ప్రాచుర్యం పొందిన కలయికను తీసుకున్నాను: ఫ్లాస్క్ ఫ్రేమ్‌వర్క్ (API కోసం) మరియు సెలెరీ (టాస్క్ క్యూ కోసం). SQLAchemy ORMగా ఉపయోగించబడుతుంది. అలంబిక్ వలసలకు ఉపయోగించబడుతుంది. హ్యాండిల్స్‌లో JSON ధ్రువీకరణ కోసం - మార్ష్‌మల్లో.

В రిపోజిటరీలు ప్రాజెక్ట్‌ను ప్రారంభించడానికి నిర్మాణం మరియు సూచనల వివరణాత్మక వివరణతో 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ని సెటప్ చేయడం మరియు మా సైట్ కోసం చందాను సృష్టించడం ద్వారా ప్రారంభిద్దాం.

పొడిగింపులను ఇన్‌స్టాల్ చేస్తోంది

Plesk లో మనకు నాలుగు పొడిగింపులు అవసరం:

  • Docker Plesk అడ్మిన్ ప్యానెల్‌లో కంటైనర్‌ల స్థితిని నిర్వహించడం మరియు దృశ్యమానంగా ప్రదర్శించడం కోసం;
  • Git సర్వర్‌లో విస్తరణ దశను కాన్ఫిగర్ చేయడానికి;
  • Let's Encrypt ఉచిత TLS సర్టిఫికేట్‌లను రూపొందించడానికి (మరియు స్వీయ-పునరుద్ధరణ) కోసం;
  • Firewall ఇన్‌కమింగ్ ట్రాఫిక్ ఫిల్టరింగ్‌ను కాన్ఫిగర్ చేయడానికి.

మీరు వాటిని పొడిగింపుల విభాగంలో Plesk అడ్మిన్ ప్యానెల్ ద్వారా ఇన్‌స్టాల్ చేయవచ్చు:

ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD
మేము పొడిగింపుల యొక్క వివరణాత్మక కాన్ఫిగరేషన్‌ను పరిగణించము; మా డెమో ప్రయోజనాల కోసం, డిఫాల్ట్ సెట్టింగ్‌లు అనుకూలంగా ఉంటాయి.

చందా మరియు వెబ్‌సైట్‌ను సృష్టిస్తోంది

తరువాత, మేము మా వెబ్‌సైట్ helloworld.ru కోసం సబ్‌స్క్రిప్షన్‌ను సృష్టించాలి మరియు అక్కడ సబ్‌డొమైన్ dev.helloworld.ruని జోడించాలి.

  1. మేము helloworld.ru డొమైన్ కోసం చందాను సృష్టిస్తాము మరియు సిస్టమ్ వినియోగదారు కోసం లాగిన్ పాస్‌వర్డ్‌ను పేర్కొంటాము:

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD
    పేజీ దిగువన ఉన్న పెట్టెను ఎంచుకోండి లెట్స్ ఎన్‌క్రిప్ట్‌తో డొమైన్‌ను సురక్షితం చేయండి, మేము సైట్ కోసం HTTPSని కాన్ఫిగర్ చేయాలనుకుంటే:

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

  2. తర్వాత, ఈ సబ్‌స్క్రిప్షన్‌లో, మేము dev.helloworld.ru అనే సబ్‌డొమైన్‌ను సృష్టిస్తాము (దీని కోసం మీరు ఉచిత TLS ప్రమాణపత్రాన్ని కూడా జారీ చేయవచ్చు):

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

సర్వర్ భాగాలను ఇన్‌స్టాల్ చేస్తోంది

మా దగ్గర సర్వర్ ఉంది OS డెబియన్ స్ట్రెచ్ 9.12 మరియు నియంత్రణ ప్యానెల్ వ్యవస్థాపించబడింది ప్లెస్క్ అబ్సిడియన్ 18.0.27.

మేము మా ప్రాజెక్ట్ కోసం ఇన్‌స్టాల్ చేసి కాన్ఫిగర్ చేయాలి:

  • PostgreSQL (మా విషయంలో dev మరియు prod పరిసరాల కోసం రెండు డేటాబేస్‌లతో ఒక సర్వర్ ఉంటుంది).
  • RabbitMQ (అదే విషయం, పర్యావరణాల కోసం వివిధ vhostలతో ఒక ఉదాహరణ).
  • రెండు రెడిస్ ఉదంతాలు (దేవ్ మరియు ప్రోడ్ ఎన్విరాన్మెంట్ల కోసం).
  • డాకర్ రిజిస్ట్రీ (సంకలనం చేసిన డాకర్ చిత్రాల స్థానిక నిల్వ కోసం).
  • డాకర్ రిజిస్ట్రీ కోసం 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

Celery కోసం సందేశ బ్రోకర్ అయిన 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

ఇప్పుడు మన అప్లికేషన్ కోసం చివరి భాగాన్ని ఇన్‌స్టాల్ చేసి కాన్ఫిగర్ చేద్దాం - Redis. సెలెరీ టాస్క్‌ల ఫలితాలను నిల్వ చేయడానికి ఇది బ్యాకెండ్‌గా ఉపయోగించబడుతుంది.

మేము పొడిగింపును ఉపయోగించి డెవ్ మరియు ప్రోడ్ ఎన్విరాన్మెంట్ల కోసం రెడిస్‌తో రెండు డాకర్ కంటైనర్‌లను పెంచుతాము Docker Plesk కోసం.

  1. Pleskకి వెళ్లండి, పొడిగింపుల విభాగానికి వెళ్లండి, డాకర్ పొడిగింపు కోసం చూడండి మరియు దాన్ని ఇన్‌స్టాల్ చేయండి (మాకు ఉచిత సంస్కరణ అవసరం):

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

  2. ఇన్‌స్టాల్ చేయబడిన పొడిగింపుకు వెళ్లండి, శోధన ద్వారా చిత్రాన్ని కనుగొనండి redis bitnami మరియు తాజా సంస్కరణను ఇన్‌స్టాల్ చేయండి:

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

  3. మేము డౌన్‌లోడ్ చేసిన కంటైనర్‌లోకి వెళ్లి కాన్ఫిగరేషన్‌ను సర్దుబాటు చేస్తాము: పోర్ట్, గరిష్టంగా కేటాయించిన RAM పరిమాణం, ఎన్విరాన్‌మెంట్ వేరియబుల్స్‌లోని పాస్‌వర్డ్‌ను పేర్కొనండి మరియు వాల్యూమ్‌ను మౌంట్ చేయండి:

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

  4. మేము ఉత్పత్తి కంటైనర్ కోసం 2-3 దశలను చేస్తాము, సెట్టింగ్‌లలో మేము పారామితులను మాత్రమే మారుస్తాము: పోర్ట్, పాస్‌వర్డ్, RAM పరిమాణం మరియు సర్వర్‌లోని వాల్యూమ్ ఫోల్డర్‌కు మార్గం:

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

డాకర్ రిజిస్ట్రీ

ప్రాథమిక సేవలతో పాటు, సర్వర్‌లో మీ స్వంత డాకర్ ఇమేజ్ రిపోజిటరీని ఇన్‌స్టాల్ చేయడం మంచిది. అదృష్టవశాత్తూ, సర్వర్‌లలో స్థలం ఇప్పుడు చాలా చౌకగా ఉంది (డాకర్‌హబ్‌కు సభ్యత్వం కంటే ఖచ్చితంగా చౌకైనది), మరియు ప్రైవేట్ రిపోజిటరీని ఇన్‌స్టాల్ చేసే ప్రక్రియ చాలా సులభం.

మేము కలిగి ఉండాలనుకుంటున్నాము:

  • పాస్‌వర్డ్-రక్షిత డాకర్ రిపోజిటరీ సబ్‌డొమైన్ ద్వారా యాక్సెస్ చేయవచ్చు https://docker.helloworld.ru;
  • రిపోజిటరీలో చిత్రాలను వీక్షించడానికి UI ఇంటర్‌ఫేస్, ఇక్కడ అందుబాటులో ఉంది https://docker-ui.helloworld.ru.

దీన్ని చేయడానికి:

  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 ఫైల్‌ను రూపొందిస్తాము:
    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. డాకర్-ui.helloworld.ru సబ్‌డొమైన్ యొక్క ఆపరేషన్‌ను కూడా తనిఖీ చేద్దాం:

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD
    మీరు రిపోజిటరీలను బ్రౌజ్ చేయిపై క్లిక్ చేసినప్పుడు, బ్రౌజర్ అధికార విండోను ప్రదర్శిస్తుంది, ఇక్కడ మీరు రిపోజిటరీ కోసం లాగిన్ మరియు పాస్‌వర్డ్‌ను నమోదు చేయాలి. దాని తర్వాత మేము రిపోజిటరీల జాబితాతో పేజీకి మళ్లించబడతాము (ప్రస్తుతానికి అది ఖాళీగా ఉంటుంది):

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

Plesk ఫైర్‌వాల్‌లో పోర్ట్‌లను తెరవడం

భాగాలను ఇన్‌స్టాల్ చేసి, కాన్ఫిగర్ చేసిన తర్వాత, మేము పోర్ట్‌లను తెరవాలి, తద్వారా భాగాలు డాకర్ కంటైనర్‌లు మరియు బాహ్య నెట్‌వర్క్ నుండి యాక్సెస్ చేయబడతాయి.

మేము ఇంతకు ముందు ఇన్‌స్టాల్ చేసిన Plesk కోసం ఫైర్‌వాల్ పొడిగింపు యొక్క ఉదాహరణను ఉపయోగించి దీన్ని ఎలా చేయాలో చూద్దాం.

  1. వెళ్ళండి సాధనాలు & సెట్టింగ్‌లు > సెట్టింగ్‌లు > ఫైర్‌వాల్:
    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD
  2. వెళ్ళండి Plesk ఫైర్‌వాల్ నియమాలను సవరించండి > అనుకూల నియమాన్ని జోడించండి మరియు డాకర్ సబ్‌నెట్ కోసం క్రింది TCP పోర్ట్‌లను తెరవండి (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 కోసం Git పొడిగింపును ఉపయోగించి విస్తరణ ప్రక్రియను కాన్ఫిగర్ చేస్తాము.

బ్యాకెండ్ రిపోజిటరీ కోసం ప్రోడ్ ఎన్విరాన్‌మెంట్‌తో ఉదాహరణ చూద్దాం.

  1. మేము మా Helloworld వెబ్‌సైట్ యొక్క సభ్యత్వానికి వెళ్లి Git ఉపవిభాగానికి వెళ్తాము:

    ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

  2. "రిమోట్ Git రిపోజిటరీ" ఫీల్డ్‌లో మా Github రిపోజిటరీకి లింక్‌ను అతికించండి మరియు డిఫాల్ట్ ఫోల్డర్‌ని మార్చండి 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} - నోటిఫికేషన్‌లను పంపడానికి చాట్/ఛానల్ 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

బ్యాకెండ్ రిపోజిటరీ మరియు ఫ్రంటెండ్ కోసం Dev ఎన్విరాన్మెంట్ అదే విధంగా కాన్ఫిగర్ చేయబడ్డాయి.

గితుబ్ చర్యలకు విస్తరణ పైప్‌లైన్

Github చర్యలలో మా CI/CD పైప్‌లైన్‌లోని మొదటి భాగాన్ని సెటప్ చేయడానికి ముందుకు వెళ్దాం.

బ్యాకెండ్

పైప్‌లైన్ వివరించబడింది deploy.yml ఫైల్.

కానీ దానిని అన్వయించే ముందు, గితుబ్‌లో మనకు అవసరమైన సీక్రెట్ వేరియబుల్స్‌ని పూరించండి. దీన్ని చేయడానికి, వెళ్ళండి సెట్టింగులు -> రహస్యాలు:

  • 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 రిపోజిటరీకి విస్తరణ కోసం టోకెన్.

విస్తరణ ప్రక్రియ సులభం మరియు మూడు ప్రధాన దశలను కలిగి ఉంటుంది:

  • మా రిపోజిటరీలో చిత్రాన్ని నిర్మించడం మరియు ప్రచురించడం;
  • తాజాగా సంకలనం చేయబడిన చిత్రం ఆధారంగా కంటైనర్‌లో పరీక్షలను అమలు చేయడం;
  • బ్రాంచ్ (దేవ్/మాస్టర్) ఆధారంగా కావలసిన వాతావరణానికి విస్తరణ.

ఫ్రంటెండ్

ముందు రిపోజిటరీ కోసం Deploy.yml ఫైల్ బెకోవ్ నుండి చాలా భిన్నంగా లేదు. ఇది పరీక్షలను అమలు చేసే దశను కోల్పోతుంది మరియు విస్తరణ కోసం టోకెన్‌ల పేర్లను మారుస్తుంది. ముందు రిపోజిటరీ కోసం రహస్యాలు, మార్గం ద్వారా, విడిగా పూరించాల్సిన అవసరం ఉంది.

సైట్ సెటప్

Nginx ద్వారా ప్రాక్సీయింగ్ ట్రాఫిక్

సరే, మేము ముగింపుకు వచ్చాము. Nginx ద్వారా మా కంటైనర్‌కు ఇన్‌కమింగ్ మరియు అవుట్‌గోయింగ్ ట్రాఫిక్‌ను ప్రాక్సీ చేయడాన్ని కాన్ఫిగర్ చేయడం మాత్రమే మిగిలి ఉంది. డాకర్ రిజిస్ట్రీని సెటప్ చేసే 5వ దశలో మేము ఇప్పటికే ఈ ప్రక్రియను కవర్ చేసాము. దేవ్ మరియు ప్రోడ్ ఎన్విరాన్మెంట్లలో వెనుక మరియు ముందు భాగాల కోసం అదే విషయాన్ని పునరావృతం చేయాలి.

నేను సెట్టింగ్‌ల స్క్రీన్‌షాట్‌లను అందిస్తాను.

బ్యాకెండ్

ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD

ఫ్రంటెండ్

ఫ్లాస్క్+కోణీయ ప్రాజెక్ట్ కోసం గితుబ్ చర్యలలో CI/CD
ముఖ్యమైన స్పష్టీకరణ. మొదలయ్యేవి మినహా అన్ని URLలు ఫ్రంటెండ్ కంటైనర్‌కు ప్రాక్సీ చేయబడతాయి /api/ - అవి వెనుక కంటైనర్‌కు ప్రాక్సీ చేయబడతాయి (కాబట్టి వెనుక కంటైనర్‌లో, అన్ని హ్యాండ్లర్లు తప్పనిసరిగా ప్రారంభించాలి /api/).

ఫలితాలు

ఇప్పుడు మా సైట్‌ను helloworld.ru మరియు dev.helloworld.ru (వరుసగా ప్రోడ్ మరియు దేవ్ ఎన్విరాన్‌మెంట్‌లు)లో యాక్సెస్ చేయాలి.

మొత్తంగా, మేము ఒక సాధారణ అప్లికేషన్‌ను ఫ్లాస్క్ మరియు యాంగ్యులర్‌లో ఎలా సిద్ధం చేయాలో నేర్చుకున్నాము మరియు దానిని Plesk నడుస్తున్న సర్వర్‌కి రోల్ చేయడానికి Github యాక్షన్‌లలో పైప్‌లైన్‌ను ఎలా సెటప్ చేయాలో నేర్చుకున్నాము.

నేను కోడ్‌తో రిపోజిటరీలకు లింక్‌లను నకిలీ చేస్తాను: బ్యాకెండ్, ముందుభాగం.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి