Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD

Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD
මෙම ලිපියෙන්, මම Plesk Control Panel සහ Github ක්‍රියා භාවිතයෙන් CI/CD පිහිටුවීමේ මගේ අත්දැකීම් බෙදා ගන්නෙමි. "Helloworld" යන සංකීර්ණ නොවන නම සහිත සරල ව්‍යාපෘතියක් යෙදවිය යුතු ආකාරය අද අපි ඉගෙන ගනිමු. එය ලියා ඇත්තේ Flask Python රාමුව තුළ, සැල්දිරි කම්කරුවන් සහ කෝණික 8 ඉදිරිපස.

ගබඩා වෙත සබැඳි: පසුතලය, ඉදිරි අන්තය.

ලිපියේ පළමු කොටසේදී, අපි අපගේ ව්යාපෘතිය සහ එහි කොටස් දෙස බලමු. දෙවනුව, අපි Plesk සකසන්නේ කෙසේද සහ අවශ්ය දිගු සහ සංරචක (DB, RabbitMQ, Redis, Docker, ආදිය) ස්ථාපනය කරන්නේ කෙසේදැයි සොයා බලමු.

තෙවන කොටසේදී, අපගේ ව්‍යාපෘතිය dev සහ prod පරිසරයක සේවාදායකයකට යෙදවීම සඳහා නල මාර්ගයක් සකසන්නේ කෙසේදැයි අපි අවසානයේ සොයා බලමු. ඉන්පසු අපි වෙබ් අඩවිය සේවාදායකයේ දියත් කරන්නෙමු.

ඔව්, මට මාව හඳුන්වා දෙන්න අමතක වුණා. මගේ නම Oleg Borzov, මම Domclick හි උකස් කළමණාකරුවන් සඳහා CRM කණ්ඩායමේ සම්පූර්ණ සංවර්ධකයෙක් වෙමි.

ව්යාපෘති දළ විශ්ලේෂණය

පළමුව, අපි ව්‍යාපෘති ගබඩා දෙකක් දෙස බලමු - පසුපෙළ සහ ඉදිරිපස - සහ කේතය හරහා යන්න.

පසුබිම: කුප්පි + සැල්දිරි

පසුපස කොටස සඳහා, මම Python සංවර්ධකයින් අතර බෙහෙවින් ජනප්‍රිය පොකුරක් ගත්තෙමි: Flask රාමුව (API සඳහා) සහ Celery (කාර්ය පෝලිම සඳහා). SQLAchemy ORM ලෙස භාවිතා වේ. Alembic සංක්රමණය සඳහා භාවිතා වේ. හසුරුවල JSON වලංගුකරණය සඳහා - මාෂ්මෙලෝ.

В ගබඩා ව්‍යාපෘතිය ක්‍රියාත්මක කිරීම සඳහා ව්‍යුහය සහ උපදෙස් පිළිබඳ සවිස්තරාත්මක විස්තරයක් සහිත 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 සේවකයා, දත්ත ගබඩාව, Redis සහ RabbitMQ දේශීය නැංවීම සඳහා;
  • docker-compose.test.yml යෙදවීමේදී පරීක්ෂණ සිදු කිරීමට;
  • docker-compose.yml යෙදවීම සඳහා.

අප උනන්දු වන අවසාන ෆෝල්ඩරය - .ci-cd. එහි යෙදවීම සඳහා shell scripts අඩංගු වේ:

  • deploy.sh - සංක්‍රමණය දියත් කිරීම සහ යෙදවීම. Github ක්‍රියා වල පරීක්ෂණ ගොඩ නැගීම සහ ධාවනය කිරීමෙන් පසු සේවාදායකය මත ධාවනය වේ;
  • rollback.sh - එකලස් කිරීමේ පෙර අනුවාදයට බහාලුම් ආපසු හැරවීම;
  • curl_tg.sh - Telegram වෙත යෙදවීමේ දැනුම්දීම් යැවීම.

කෝණික මත ඉදිරිපස

ඉදිරිපස සහිත ගබඩාව බෙක්ට වඩා සරලයි. ඉදිරිපස පිටු තුනකින් සමන්විත වේ:

  • ඊමේල් යැවීම සඳහා පෝරමයක් සහ පිටවීමේ බොත්තමක් සහිත ප්‍රධාන පිටුව.
  • පිවිසුම් පිටුව.
  • ලියාපදිංචි පිටුව.

ප්‍රධාන පිටුව තපස් ලෙස පෙනේ:

Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD
මූලයේ ගොනු දෙකක් තිබේ Dockerfile и docker-compose.yml, මෙන්ම හුරුපුරුදු ෆෝල්ඩරය .ci-cd පිටුපස ගබඩාවට වඩා තරමක් අඩු ස්ක්‍රිප්ට් සමඟ (ධාවන පරීක්ෂණ සඳහා ඉවත් කරන ලද ස්ක්‍රිප්ට්).

Plesk හි ව්යාපෘතියක් ආරම්භ කිරීම

Plesk පිහිටුවීමෙන් සහ අපගේ වෙබ් අඩවිය සඳහා දායකත්වයක් නිර්මාණය කිරීමෙන් ආරම්භ කරමු.

දිගු ස්ථාපනය කිරීම

Plesk හි, අපට දිගු හතරක් අවශ්ය වේ:

  • Docker Plesk පරිපාලක පැනලයේ බහාලුම්වල තත්ත්වය කළමනාකරණය කිරීමට සහ දෘශ්‍ය ලෙස ප්‍රදර්ශනය කිරීමට;
  • Git සේවාදායකයේ යෙදවීමේ පියවර වින්‍යාස කිරීමට;
  • Let's Encrypt නොමිලේ TLS සහතික උත්පාදනය කිරීමට (සහ ස්වයංක්‍රීයව අලුත් කිරීමට);
  • Firewall එන ගමනාගමනය පෙරීම වින්‍යාස කිරීමට.

ඔබට ඒවා දිගු කොටසේ Plesk පරිපාලක පැනලය හරහා ස්ථාපනය කළ හැකිය:

Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD
අපි දිගු සඳහා සවිස්තරාත්මක සැකසුම් සලකා බලන්නේ නැත, පෙරනිමි සැකසුම් අපගේ demo අරමුණු සඳහා කරනු ඇත.

දායකත්වයක් සහ වෙබ් අඩවියක් සාදන්න

ඊළඟට, අපි අපගේ helloworld.ru වෙබ් අඩවිය සඳහා දායකත්වයක් සාදා එහි dev.helloworld.ru උප වසම එක් කළ යුතුය.

  1. helloworld.ru වසම සඳහා දායකත්වයක් සාදන්න සහ පද්ධති පරිශීලකයා සඳහා පිවිසුම්-මුරපදය සඳහන් කරන්න:

    Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD
    පිටුවේ පතුලේ ඇති කොටුව සලකුණු කරන්න අපි Encrypt සමඟ වසම සුරක්ෂිත කරන්නඅපට වෙබ් අඩවිය සඳහා HTTPS පිහිටුවීමට අවශ්‍ය නම්:

    Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD

  2. ඊළඟට, මෙම දායකත්වය තුළ, dev.helloworld.ru උප ඩොමේනයක් සාදන්න (ඒ සඳහා ඔබට නොමිලේ TLS සහතිකයක් නිකුත් කළ හැකිය):

    Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD

සේවාදායක සංරචක ස්ථාපනය කිරීම

අපට සේවාදායකයක් ඇත OS Debian Stretch 9.12 සහ ස්ථාපිත පාලක පැනලය Plesk Obsidian 18.0.27.

අපගේ ව්‍යාපෘතිය සඳහා අපි ස්ථාපනය කර වින්‍යාස කිරීමට අවශ්‍යයි:

  • PostgreSQL (අපගේ නඩුවේදී, dev සහ prod පරිසරයන් සඳහා දත්ත සමුදායන් දෙකක් සහිත එක් සේවාදායකයක් ඇත).
  • RabbitMQ (පරිසර සඳහා විවිධ vhosts සමග එකම, එකම අවස්ථාව).
  • Redis අවස්ථා දෙකක් (dev සහ prod පරිසරයන් සඳහා).
  • Docker Registry (ඉදිකළ 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.confපෙරනිමි වරාය 5432 වෙනත් ස්ථානයකට (අපගේ උදාහරණයේ - 53983).

වින්‍යාස ගොනුව වෙනස් කිරීමෙන් පසු, විධානය සමඟ postgresql-server නැවත ආරම්භ කරන්න:

service postgresql restart

අපි PostgreSQL ස්ථාපනය කර වින්‍යාස කර ඇත. දැන් අපි දත්ත සමුදායක් නිර්මාණය කරමු, dev- සහ prod-environments සඳහා පරිශීලකයන්, සහ දත්ත සමුදාය කළමනාකරණය කිරීමට පරිශීලකයින්ට අයිතිවාසිකම් ලබා දෙමු:

$ 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

දැන් අපි අපගේ යෙදුම සඳහා අවසාන සංරචකය ස්ථාපනය කර වින්‍යාස කරමු - Redis. එය සැල්දිරි කාර්යවල ප්රතිඵල ගබඩා කිරීම සඳහා පසුබිමක් ලෙස භාවිතා කරනු ඇත.

අපි දිගුව භාවිතයෙන් dev සහ prod පරිසරයන් සඳහා Redis සමඟ Docker කන්ටේනර් දෙකක් ඔසවන්නෙමු Docker Plesk සඳහා.

  1. අපි ප්ලෙස්ක් වෙත ගොස්, දිගු කොටස වෙත ගොස්, ඩොකර් දිගුව සොයාගෙන එය ස්ථාපනය කරන්න (අපට නොමිලේ අනුවාදයක් අවශ්‍යයි):

    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

ඩොකර් රෙජිස්ට්රි

මූලික සේවාවන්ට අමතරව, ඔබේම ඩොකර් රූප ගබඩාවක් සේවාදායකයේ තැබීම සතුටක්. වාසනාවකට මෙන්, සේවාදායක අවකාශය දැන් තරමක් ලාභදායී වේ (නිසැකවම DockerHub දායකත්වයට වඩා ලාභදායී), සහ පුද්ගලික ගබඩාවක් පිහිටුවීමේ ක්‍රියාවලිය ඉතා සරල ය.

අපට අවශ්‍ය වන්නේ:

  • මුරපද-ආරක්ෂිත ඩොකර් ගබඩාව උප ඩොමේනයකින් ප්‍රවේශ විය හැක 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 යටතේ, අපි Docker ගබඩාවේ මූලික අවසරය සඳහා .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 උප වසම් සඳහා පහත පියවරයන් සිදු කළ යුතුය:

කොටස දේව් මෙවලම් අපගේ වෙබ් අඩවිය වෙත යන්න ඩොකර් ප්‍රොක්සි රීති:

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 මත ක්ලික් කළ විට, ඔබට ගබඩාව සඳහා පරිශීලක නාමය සහ මුරපදය ඇතුළත් කිරීමට අවශ්‍ය වන අවසර කවුළුවක් බ්‍රවුසරය පෙන්වයි. ඊට පසු, අපි ගබඩා ලැයිස්තුවක් සහිත පිටුවකට මාරු කරනු ලැබේ (දැනට, එය ඔබට හිස් වනු ඇත):

    Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD

Plesk Firewall හි වරායන් විවෘත කිරීම

සංරචක ස්ථාපනය කර වින්‍යාස කිරීමෙන් පසු, අපට ඩොකර් බහාලුම් සහ බාහිර ජාලයෙන් සංරචක ප්‍රවේශ විය හැකි පරිදි වරායන් විවෘත කළ යුතුය.

අපි බලමු අපි කලින් ස්ථාපනය කරපු Plesk සඳහා Firewall extension එක භාවිතා කරලා මේක කරන්නේ කොහොමද කියලා.

  1. යන්න මෙවලම් සහ සැකසීම් > සැකසීම් > ෆයර්වෝල්:
    Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD
  2. යන්න Plesk ෆයර්වෝල් නීති වෙනස් කරන්න > අභිරුචි රීතිය එක් කරන්න සහ Docker උපජාලය සඳහා පහත TCP ports විවෘත කරන්න (172.0.0.0 / 8):
    RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
    රෙඩිස්: 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. අපගේ Github ගබඩාවට සබැඳියක් "Remote Git repository" ක්ෂේත්‍රයට ඇතුළු කර පෙරනිමි ෆෝල්ඩරය වෙනස් කරන්න httpdocs තවත් කෙනෙකුට (උදා. /httpdocs/hw_back):

    Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD

  3. පෙර පියවරෙන් SSH පොදු යතුර පිටපත් කරන්න සහ එකතු කරන්න එය Github සැකසුම් තුළ.
  4. පියවර 2 හි තිරය මත OK ක්ලික් කරන්න, ඉන්පසු අපි Plesk හි ගබඩා පිටුවට හරවා යවනු ලැබේ. දැන් අපි ප්‍රධාන ශාඛාව වෙත කැපවීම්වල යාවත්කාලීන කළ යුතු ගබඩාව වින්‍යාසගත කළ යුතුය. මෙය සිදු කිරීම සඳහා, යන්න ගබඩා සැකසුම් සහ අගය ඉතිරි කරන්න 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} - සේවාදායකයේ පසුබිම් ගබඩාවේ නිෂ්පාදන ෆෝල්ඩරය වෙත මාර්ගය;
    {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

backend repository සහ frontend සඳහා dev පරිසරය එකම ආකාරයට සකසා ඇත.

Github ක්‍රියා වල යෙදවීමේ නල මාර්ගය

Github ක්‍රියා වල අපගේ CI/CD නල මාර්ගයේ පළමු කොටස පිහිටුවීමට අපි ඉදිරියට යමු.

පසුබිම

නල මාර්ගයේ විස්තර කර ඇත deploy.yml ගොනුව.

නමුත් එය විග්‍රහ කිරීමට පෙර Github හි අපට අවශ්‍ය Secret variables පුරවා ගනිමු. මෙය සිදු කිරීම සඳහා, යන්න සැකසීම් -> රහස්:

  • DOCKER_REGISTRY - අපගේ ඩොකර් ගබඩාවේ ධාරකය (docker.helloworld.ru);
  • DOCKER_LOGIN - ඩොකර් ගබඩාවට පිවිසෙන්න;
  • DOCKER_PASSWORD - එහි මුරපදය;
  • DEPLOY_HOST - Plesk පරිපාලක පැනලය ලබා ගත හැකි සත්කාරක (උදාහරණ: helloworld.com: 8443 හෝ 123.4.56.78:8443);
  • DEPLOY_BACK_PROD_TOKEN - සේවාදායකයේ prod-repository වෙත යෙදවීම සඳහා ටෝකනයක් (අපි එය Plesk p. 4 හි යෙදවීමේදී ලබා ගත්තෙමු);
  • DEPLOY_BACK_DEV_TOKEN - සේවාදායකයේ dev ගබඩාවට යෙදවීම සඳහා ටෝකනය.

යෙදවීමේ ක්‍රියාවලිය සරල වන අතර ප්‍රධාන පියවර තුනකින් සමන්විත වේ:

  • අපගේ ගබඩාවේ රූපය ගොඩනැගීම සහ ප්‍රකාශනය කිරීම;
  • නැවුම් ලෙස ගොඩනඟන ලද රූපයක් මත කන්ටේනරයක ධාවන පරීක්ෂණ;
  • ශාඛාව (dev/master) මත පදනම්ව අපේක්ෂිත පරිසරයට යෙදවීම.

ඉදිරි අන්තය

ඉදිරිපස ගබඩාව සඳහා deploy.yml ගොනුව බෙක්ට වඩා ටිකක් වෙනස්. එය ධාවන පරීක්ෂණ සමඟ පියවරක් නොමැති අතර යෙදවීම සඳහා ටෝකන් වල නම් වෙනස් කරයි. ඉදිරිපස ගබඩාව සඳහා රහස්, මාර්ගය වන විට, වෙන වෙනම පිරවිය යුතුය.

අඩවි සැකසුම

Nginx හරහා ප්‍රොක්සිං ගමනාගමනය

හොඳයි, අපි අවසානයට ආවා. එය ඉතිරිව ඇත්තේ Nginx හරහා අපගේ බහාලුම් වෙත පැමිණෙන සහ පිටතට යන ගමනාගමනය ප්‍රොක්සි කිරීම වින්‍යාස කිරීම පමණි. අපි දැනටමත් මෙම ක්‍රියාවලිය Docker Registry පිහිටුවීමේ 5 වන පියවරෙන් ආවරණය කර ඇත. dev සහ prod පරිසරවල පසුපස සහ ඉදිරිපස කොටස් සඳහාද එයම නැවත නැවතත් කළ යුතුය.

මම සැකසුම් වල තිරපිටපත් ලබා දෙන්නෙමි.

පසුබිම

Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD

ඉදිරි අන්තය

Flask+Angular ව්‍යාපෘතියක් සඳහා Github ක්‍රියා වල CI/CD
වැදගත් පැහැදිලි කිරීමක්. ආරම්භ වන ඒවා හැර, සියලුම URL ඉදිරිපස බහාලුම් වෙත ප්‍රොක්සි කරනු ලැබේ /api/ - ඒවා පසුපස කන්ටේනරයට ප්‍රොක්සි කරනු ලැබේ (එසේ පිටුපස කන්ටේනරය තුළ, සියලු හසුරුවන්නන් ආරම්භ කළ යුතුය /api/).

ප්රතිඵල

දැන් අපගේ වෙබ් අඩවිය helloworld.ru සහ dev.helloworld.ru (පිළිවෙලින් prod- සහ dev-environments) හි තිබිය යුතුය.

සමස්තයක් වශයෙන්, අපි Flask සහ Angular වලින් සරල යෙදුමක් සකස් කරන ආකාරය සහ එය Plesk ධාවනය වන සේවාදායකයකට පෙරළීමට Github Actions හි නල මාර්ගයක් සකසන ආකාරය ඉගෙන ගත්තෙමු.

මම කේතය සමඟ ගබඩා වෙත සබැඳි අනුපිටපත් කරමි: පසුතලය, ඉදිරි අන්තය.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න