CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት
በዚህ ጽሑፍ ውስጥ የፕሌስክ የቁጥጥር ፓነልን እና የጊትዩብ ድርጊቶችን በመጠቀም CI/CDን የማዋቀር ልምዴን አካፍላለሁ። ዛሬ "Helloworld" በሚለው ያልተወሳሰበ ስም አንድ ቀላል ፕሮጀክት እንዴት ማሰማራት እንደሚቻል እንማራለን. የተፃፈው በፍላስክ ፓይዘን ማእቀፍ፣ ከሴሊሪ ሰራተኞች እና ከ Angular 8 frontend ጋር ነው።

ወደ ማከማቻዎች የሚወስዱ አገናኞች፡- ጀርባ, ግንባር.

በአንቀጹ የመጀመሪያ ክፍል ውስጥ የእኛን ፕሮጀክት እና ክፍሎቹን እንመለከታለን. በሁለተኛው ውስጥ, ፕሌስክን እንዴት ማዋቀር እንዳለብን እና አስፈላጊዎቹን ማራዘሚያዎች እና አካላት (DB, RabbitMQ, Redis, Docker, ወዘተ) እንጭናለን.

በሶስተኛው ክፍል በመጨረሻ ፕሮጀክታችንን በዴቭ እና ፕሮድ አካባቢ ወደ አገልጋይ ለማሰማራት የቧንቧ መስመር እንዴት እንደምናዘጋጅ እናያለን። እና ከዚያ ጣቢያውን በአገልጋዩ ላይ እናስጀምራለን.

እና አዎ, እራሴን ማስተዋወቅ ረሳሁ. ስሜ ኦሌግ ቦርዞቭ እባላለሁ፣ በDomclick ውስጥ ለሞርጌጅ አስተዳዳሪዎች በCRM ቡድን ውስጥ ሙሉ ቁልል ገንቢ ነኝ።

የፕሮጀክት አጠቃላይ እይታ

በመጀመሪያ ፣ ሁለት የፕሮጀክት ማከማቻዎችን - የኋላ እና የፊት - እና በኮዱ ላይ እንይ።

ጀርባ፡ ብልቃጥ+ሴሊሪ

ለኋለኛው ክፍል፣ በፓይዘን ገንቢዎች ዘንድ በጣም ተወዳጅ የሆነ ስብስብ ወሰድኩ፡ የፍላስክ ማዕቀፍ (ለኤፒአይ) እና ሴሊሪ (ለተግባር ወረፋ)። 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 ለማሰማራት.

እና እኛ የምንፈልገው የመጨረሻው አቃፊ - .ሲ-ሲዲ. ለማሰማራት የሼል ስክሪፕቶችን ይዟል፡-

  • deploy.sh - የስደት መጀመር እና ማሰማራት. በ Github Actions ውስጥ ሙከራዎችን ከገነቡ እና ካካሄዱ በኋላ በአገልጋዩ ላይ ይሰራል;
  • rollback.sh - መያዣዎችን ወደ ቀድሞው የስብሰባው ስሪት መመለሾ;
  • curl_tg.sh - ወደ ቴሌግራም የማሰማራት ማሳወቂያዎችን በመላክ ላይ።

ፊት ለፊት በ Angular

ማከማቻ ከፊት ጋር ከቤክ በጣም ቀላል። ፊት ለፊት ሶስት ገጾችን ያቀፈ ነው-

  • ኢሜል ለመላክ ቅጽ እና መውጫ ቁልፍ ያለው ዋና ገጽ።
  • የመግቢያ ገጽ.
  • የምዝገባ ገጽ.

ዋናው ገጽ በጣም የሚያምር ይመስላል፡-

CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት
በሥሩ ላይ ሁለት ፋይሎች አሉ። Dockerfile и docker-compose.yml, እንዲሁም የሚታወቀው አቃፊ .ci-cd ከኋላ ማከማቻው በትንሹ ያነሱ ስክሪፕቶች (ለሙከራዎች የተወገዱ ስክሪፕቶች)።

በፕሌስክ ውስጥ ፕሮጀክት መጀመር

ፕሌስክን በማዘጋጀት እና ለጣቢያችን ምዝገባ በመፍጠር እንጀምር።

ቅጥያዎችን በመጫን ላይ

በፕሌስክ ውስጥ አራት ማራዘሚያዎች ያስፈልጉናል፡

  • Docker በ Plesk የአስተዳዳሪ ፓነል ውስጥ ያሉትን መያዣዎች ሁኔታ ለማስተዳደር እና በእይታ ለማሳየት;
  • Git በአገልጋዩ ላይ የማሰማራት ደረጃን ለማዋቀር;
  • Let's Encrypt ነፃ የTLS ሰርተፊኬቶችን ለማመንጨት (እና በራስ-ማደስ);
  • Firewall የገቢ ትራፊክ ማጣሪያን ለማዋቀር።

በቅጥያዎች ክፍል ውስጥ በ Plesk አስተዳዳሪ ፓነል በኩል ሊጭኗቸው ይችላሉ-

CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት
ለቅጥያዎች ዝርዝር ቅንብሮችን አንመለከትም ፣ ነባሪ ቅንጅቶች ለኛ ማሳያ ዓላማዎች ይሆናሉ።

የደንበኝነት ምዝገባ እና ጣቢያ ይፍጠሩ

በመቀጠል ለ helloworld.ru ድር ጣቢያችን ምዝገባ መፍጠር እና የ dev.helloworld.ru ንዑስ ጎራ እዚያ ማከል አለብን።

  1. ለ helloworld.ru ጎራ ምዝገባ ይፍጠሩ እና ለስርዓቱ ተጠቃሚ የመግቢያ-ይለፍ ቃል ይጥቀሱ፡

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት
    ከገጹ ግርጌ ላይ ባለው ሳጥን ላይ ምልክት ያድርጉ ጎራውን በኑ ኢንክሪፕት እናስጠብቅለጣቢያው HTTPS ን ማዋቀር ከፈለግን፡-

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  2. በመቀጠል፣ በዚህ የደንበኝነት ምዝገባ ውስጥ፣ ንዑስ ጎራ ይፍጠሩ dev.helloworld.ru (ለዚህም ነፃ የTLS ሰርተፍኬት መስጠት ይችላሉ)

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

የአገልጋይ ክፍሎችን በመጫን ላይ

ጋር አገልጋይ አለን። ኦኤስ ዴቢያን ዝርጋታ 9.12 እና የተጫነ የቁጥጥር ፓነል Plesk Obsidian 18.0.27.

ለፕሮጀክታችን መጫን እና ማዋቀር አለብን፡-

  • PostgreSQL (በእኛ ሁኔታ ለዴቭ እና ፕሮድ አከባቢዎች ሁለት የውሂብ ጎታዎች ያሉት አንድ አገልጋይ ይኖራል)።
  • RabbitMQ (ተመሳሳይ፣ ተመሳሳይ ምሳሌ ከአከባቢ የተለያዩ vhosts ጋር)።
  • ሁለት Redis ምሳሌዎች (ለዴቭ እና ፕሮድ አካባቢዎች)።
  • Docker መዝገብ ቤት (የተገነቡ Docker ምስሎችን ለአካባቢያዊ ማከማቻ)።
  • UI ለ Docker መዝገብ ቤት።

PostgreSQL

Plesk ቀድሞውንም ከPostgreSQL DBMS ጋር ነው የሚመጣው፣ ግን የቅርብ ጊዜው ስሪት አይደለም (Plesk Obsidian በሚጽፉበት ጊዜ) የሚደገፍ የፖስትግሬስ ስሪቶች 8.4-10.8)። ለመተግበሪያችን የቅርብ ጊዜውን ስሪት እንፈልጋለን (ይህ በሚፃፍበት ጊዜ 12.3) ፣ ስለዚህ እኛ በእጅ እንጭነዋለን።

በኔትወርኩ ላይ በዴቢያን ላይ 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-አገልጋይ በትእዛዙ እንደገና ያስጀምሩ፡-

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

ለሴልሪ የመልእክት ደላላ ወደሆነው 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 ለፕሌስክ.

  1. ወደ ፕሌስክ እንሄዳለን፣ ወደ ቅጥያዎች ክፍል ይሂዱ፣ የዶከር ቅጥያውን ይፈልጉ እና ይጫኑት (ነፃ ስሪት እንፈልጋለን)

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  2. ወደ የተጫነው ቅጥያ ይሂዱ, በፍለጋው ውስጥ ምስሉን ያግኙ redis bitnami እና የቅርብ ጊዜውን ስሪት ይጫኑ፡-

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  3. ወደ የወረደው ኮንቴይነር ገብተን አወቃቀሩን እናስተካክላለን፡ ወደቡን፣ የተመደበውን ከፍተኛውን የ RAM መጠን፣ የይለፍ ቃል በአካባቢ ተለዋዋጮች ይግለጹ እና ድምጹን እንሰካለን።

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  4. ለፕሮድ ኮንቴይነር ደረጃ 2-3ን እናከናውናለን ፣ በቅንብሮች ውስጥ መለኪያዎችን ብቻ እንለውጣለን-ወደብ ፣ የይለፍ ቃል ፣ የ RAM መጠን እና በአገልጋዩ ላይ ወደ የድምጽ አቃፊው መንገድ

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

Docker መዝገብ ቤት

ከመሠረታዊ አገልግሎቶች በተጨማሪ, የራስዎን Docker ምስል ማከማቻ በአገልጋዩ ላይ ማስቀመጥ ጥሩ ይሆናል. እንደ እድል ሆኖ፣ የአገልጋይ ቦታ አሁን በጣም ርካሽ ነው (በእርግጠኝነት ከDockerHub ምዝገባ የበለጠ ርካሽ ነው) እና የግል ማከማቻ የማዘጋጀት ሂደት በጣም ቀላል ነው።

እንዲኖረን እንፈልጋለን:

  • በይለፍ ቃል የተጠበቀ Docker ማከማቻ በንኡስ ጎራ ላይ ተደራሽ ነው። https://docker.helloworld.ru;
  • በማከማቻው ውስጥ ምስሎችን ለማየት UI፣ በ ላይ ይገኛል። https://docker-ui.helloworld.ru.

ይህንን ለማድረግ:

  1. በእኛ የደንበኝነት ምዝገባ ውስጥ በፕሌስክ ውስጥ ሁለት ንዑስ ጎራዎችን እንፍጠር 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. በኤስኤስኤች ስር፣ በDocker ማከማቻ ውስጥ ለመሠረታዊ ፈቃድ የhtpasswd ፋይል እናመነጫለን።
    htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
  4. መያዣዎችን መሰብሰብ እና ማንሳት;
    docker-compose up -d
  5. እና Nginxን ወደ መያዣዎቻችን ማዞር ያስፈልገናል. ይህ በፕሌስክ በኩል ሊከናወን ይችላል.

የሚከተሉት እርምጃዎች ለ docker.helloworld.ru እና docker-ui.helloworld.ru ንዑስ ጎራዎች መደረግ አለባቸው።

ክፍል ዴቭ መሣሪያዎች። ጣቢያችን ይሂዱ የዶከር ተኪ ህጎች:

CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት
እና በእቃ መያዣችን ላይ ለተኪ ገቢ ትራፊክ ህግን ያክሉ፡-

CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  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 ለ Flask+Angular ፕሮጀክት
    የመረጃ ቋቶችን አስስ የሚለውን ጠቅ ሲያደርጉ አሳሹ የመረጃ ማከማቻውን የተጠቃሚ ስም እና የይለፍ ቃል ማስገባት የሚያስፈልግበት የፍቃድ መስጫ መስኮት ያሳያል። ከዚያ በኋላ፣ የማጠራቀሚያዎች ዝርዝር ወዳለው ገጽ እንመራለን (ለአሁን፣ ባዶ ይሆንልዎታል)

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

በፕሌስክ ፋየርዎል ውስጥ ወደቦችን በመክፈት ላይ

ክፍሎቹን ከጫኑ እና ካዋቀሩ በኋላ ክፍሎቹ ከዶከር ኮንቴይነሮች እና ከውጭ አውታረመረብ ተደራሽ እንዲሆኑ ወደቦችን መክፈት አለብን።

ከዚህ ቀደም የጫንነውን የፋየርዎል ቅጥያ ለፕሌስክ በመጠቀም እንዴት እንደምናደርግ እንይ።

  1. መሄድ መሳሪያዎች እና መቼቶች > መቼቶች > ፋየርዎል:
    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት
  2. መሄድ Plesk ፋየርዎል ደንቦችን ያሻሽሉ > ብጁ ህግ ያክሉ እና የሚከተሉትን የTCP ወደቦች ለ Docker subnet ይክፈቱ (172.0.0.0 / 8):
    RabbitMQ፡ 1883፣ 4369፣ 5671-5672፣ 25672፣ 61613-61614
    አዲስ፡ 32785፣ 32786

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  3. እንዲሁም የ PostgreSQL ወደቦችን እና የ RabbitMQ አስተዳደር ፓነሎችን ወደ ውጭው ዓለም የሚከፍት ህግን እንጨምራለን፡

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  4. ለውጦችን ተግብር የሚለውን ቁልፍ በመጠቀም ደንቦቹን ይተግብሩ፡-

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

በ Github Actions ውስጥ CI/CD ማዋቀር

ወደ በጣም አስደሳች ክፍል እንውረድ - ቀጣይነት ያለው የውህደት መስመር ዝርጋታ እና ፕሮጀክታችንን ለአገልጋዩ ማድረስ።

ይህ ቧንቧ ሁለት ክፍሎችን ያቀፈ ይሆናል.

  • ምስል መገንባት እና የሩጫ ሙከራዎች (ለጀርባው) - በ Github በኩል;
  • ማይግሬሽን (ለጀርባው) ማሄድ እና መያዣዎችን ማሰማራት - በአገልጋዩ ላይ.

ወደ Plesk አሰማር

በመጀመሪያ ሁለተኛውን ነጥብ እንይ (የመጀመሪያው በእሱ ላይ የተመሰረተ ስለሆነ)።

የጂት ቅጥያ ለ Plesk በመጠቀም የማሰማራት ሂደቱን እናዋቅራለን።

ለBackend ማከማቻ ከፕሮድ አካባቢ ጋር አንድ ምሳሌን አስቡ።

  1. ወደ የሄሎዎልድ ድረ-ገፃችን ምዝገባ ሄደን ወደ Git ንዑስ ክፍል እንሄዳለን።

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  2. ወደ Github ማከማቻችን የሚወስድ አገናኝ ወደ "የርቀት Git ማከማቻ" መስክ አስገባ እና ነባሪውን አቃፊ ቀይር httpdocs ለሌላ (ለምሳሌ /httpdocs/hw_back):

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  3. የኤስኤስኤች የህዝብ ቁልፍን ከቀዳሚው ደረጃ ይቅዱ እና ያክሉ በ Github ቅንብሮች ውስጥ ነው።
  4. በስክሪኑ ላይ በደረጃ 2 ላይ እሺን ጠቅ ያድርጉ ፣ ከዚያ በኋላ ወደ ፕሌስክ ወደሚገኘው የመረጃ ማከማቻ ገጽ እንመራለን። አሁን ለዋናው ቅርንጫፍ ቁርጠኝነት እንዲዘመን ማከማቻውን ማዋቀር አለብን። ይህንን ለማድረግ ወደ ይሂዱ የማጠራቀሚያ ቅንብሮች እና ዋጋውን ያስቀምጡ Webhook URL (Gitub Actions ን ሲያቀናብሩ በኋላ ላይ እንፈልጋለን)

    CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

  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 Actions ውስጥ የማሰማራት ቧንቧ

በ Github Actions ውስጥ የእኛን የሲአይ/ሲዲ ቧንቧ መስመር የመጀመሪያ ክፍል ወደማዘጋጀት እንሂድ።

ደጀን

የቧንቧ መስመር በ ውስጥ ተገልጿል deploy.yml ፋይል.

ከመተንተን በፊት ግን በ Github ውስጥ የምንፈልጋቸውን ሚስጥራዊ ተለዋዋጮች እንሞላ። ይህንን ለማድረግ ወደ ይሂዱ ቅንብሮች -> ሚስጥሮች:

  • DOCKER_REGISTRY - የእኛ Docker ማከማቻ አስተናጋጅ (docker.helloworld.ru);
  • DOCKER_LOGIN - ወደ ዶከር ማከማቻ መግባት;
  • DOCKER_PASSWORD - ለእሱ የይለፍ ቃል;
  • DEPLOY_HOST - የፕሌስክ አስተዳዳሪ ፓኔል የሚገኝበትን አስተናጋጅ (ለምሳሌ፡- helloworld.com: 8443 ወይም 123.4.56.78: 8443);
  • DEPLOY_BACK_PROD_TOKEN - በአገልጋዩ ላይ ወደ ፕሮድ-ማከማቻ ቦታ ለማሰማራት ምልክት (በፕሌስክ ገጽ 4 ውስጥ በዲፕሎፕመንት ውስጥ አግኝተናል);
  • DEPLOY_BACK_DEV_TOKEN - በአገልጋዩ ላይ ወደ ዴቭ ማከማቻ ቦታ ለማሰማራት ማስመሰያ።

የማሰማራት ሂደት ቀላል እና ሶስት ዋና ደረጃዎችን ያቀፈ ነው፡-

  • በእኛ ማከማቻ ውስጥ ምስሉን መገንባት እና ማተም;
  • አዲስ በተገነባ ምስል ላይ በመመርኮዝ በእቃ መያዣ ውስጥ ሙከራዎችን ማካሄድ;
  • በቅርንጫፍ (dev / master) ላይ በመመስረት ወደሚፈለገው አካባቢ ማሰማራት.

ወደፊት የመጣ

የ deploy.yml ፋይል ለፊተኛው ማከማቻ ከቤክ ትንሽ የተለየ። ሙከራዎችን ከማሄድ ጋር አንድ ደረጃ ይጎድለዋል እና የማስመሰያ ስሞችን ለመሰማራት ይለውጣል። በነገራችን ላይ ለግንባር ማጠራቀሚያ ሚስጥሮች በተናጠል መሙላት አለባቸው.

ጣቢያ ማዋቀር

በNginx በኩል ትራፊክን ተኪ ማድረግ

እንግዲህ ወደ መጨረሻው ደርሰናል። በNginx በኩል ወደ መያዣችን የሚመጣውን እና ወጪ ትራፊክን ተኪ ማዋቀር ብቻ ይቀራል። ይህንን ሂደት በDocker Registry ማዋቀር ደረጃ 5 ላይ አስቀድመን ሸፍነነዋል። በዴቭ እና ፕሮድ አከባቢዎች ውስጥ ለኋላ እና ለፊት ክፍሎች ተመሳሳይ ነገር መደገም አለበት።

የቅንብሮች ቅጽበታዊ ገጽ እይታዎችን አቀርባለሁ።

ደጀን

CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት

ወደፊት የመጣ

CI/CD በ Github Actions ለ Flask+Angular ፕሮጀክት
ጠቃሚ ማብራሪያ. ሁሉም ዩአርኤሎች ከሚጀምሩት በስተቀር ወደ ፊት ለፊት መያዣው ተኪ ይሆናሉ /api/ - ከኋላ መያዣው ጋር ተኪ ይሆናሉ (ስለዚህ በኋለኛው መያዣ ውስጥ ሁሉም ተቆጣጣሪዎች መጀመር አለባቸው /api/).

ውጤቶች

አሁን የእኛ ጣቢያ helloworld.ru እና dev.helloworld.ru (prod- እና dev-environments, በቅደም) ላይ መገኘት አለበት.

በአጠቃላይ ቀላል አፕሊኬሽን በ Flask እና Angular እንዴት ማዘጋጀት እንዳለብን ተምረናል እና በ Github Actions ውስጥ የቧንቧ መስመር በማዘጋጀት ፕሌስክን ወደሚያስኬድ አገልጋይ ለመዘርጋት ተምረናል።

ወደ ማከማቻዎቹ የሚወስዱትን አገናኞች በኮዱ እባዛለሁ፡- ጀርባ, ግንባር.

ምንጭ: hab.com

አስተያየት ያክሉ