CI/CD mu Github Actions ya pulojekiti ya Flask+Angular
M'nkhaniyi, ndigawana zomwe ndakumana nazo pakukhazikitsa CI / CD pogwiritsa ntchito Plesk Control Panel ndi Github Actions. Lero tiphunzira momwe tingagwiritsire ntchito pulojekiti yosavuta ndi dzina losavuta "Helloworld". Zalembedwa mu Flask Python framework, ndi antchito a Selari ndi Angular 8 frontend.
Mβchigawo choyamba cha nkhaniyi, tiona ntchito yathu komanso mbali zake. Chachiwiri, tiwona momwe tingakhazikitsire Plesk ndikuyika zowonjezera ndi zigawo zofunika (DB, RabbitMQ, Redis, Docker, etc.).
Mu gawo lachitatu, tiwona momwe tingakhazikitsire payipi yotumizira pulojekiti yathu ku seva pamalo opangira ma prod. Kenako tidzakhazikitsa tsambalo pa seva.
Ndipo inde, ndinayiwala kudzidziwitsa ndekha. Dzina langa ndine Oleg Borzov, ndine wopanga zinthu zonse mu gulu la CRM la oyang'anira nyumba zanyumba ku Domclick.
Chidule cha polojekiti
Choyamba, tiyeni tiwone nkhokwe ziwiri za polojekiti - kumbuyo ndi kutsogolo - ndikudutsa pa code.
Kumbuyo: Botolo + Selari
Kumbuyo, ndinatenga gulu lomwe limadziwika kwambiri pakati pa opanga Python: Flask framework (ya API) ndi Selari (pamzere wantchito). SQLAchemy imagwiritsidwa ntchito ngati ORM. Alembic amagwiritsidwa ntchito kusamuka. Kwa kutsimikizika kwa JSON pamahatchi - Marshmallow.
Π nkhokwe pali fayilo ya Readme.md yofotokoza mwatsatanetsatane kapangidwe kake ndi malangizo oyendetsera ntchitoyi.
Web Part API zovuta kwambiri, zimakhala ndi zolembera 6:
Poganizira kuti PostgreSQL ili ndi makonda osasintha, ndikofunikira kukonza kasinthidwe. Izi zidzatithandiza calculator: muyenera kuyendetsa mu magawo a seva yanu ndikusintha makonda mu fayilo /etc/postgresql/12/main/postgresql.confkwa omwe amaperekedwa. Zindikirani apa kuti zowerengera zotere sizinthu zamatsenga, ndipo maziko akuyenera kusinthidwa bwino kwambiri, kutengera zida zanu, kugwiritsa ntchito, komanso kuvutikira kwamafunso. Koma izi ndi zokwanira kuti tiyambe.
Kuphatikiza pa makonda omwe aperekedwa ndi chowerengera, timasinthanso postgresql.confdoko lokhazikika 5432 kupita ku lina (muchitsanzo chathu - 53983).
Mukasintha fayilo yosinthira, yambitsaninso postgresql-server ndi lamulo:
service postgresql restart
Takhazikitsa ndikusintha PostgreSQL. Tsopano tiyeni tipange nkhokwe, ogwiritsa ntchito ma dev ndi ma prod, ndikupatsa ogwiritsa ntchito ufulu woyang'anira nkhokwe:
$ 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
KaluluMQ
Tiyeni tipitirire kukhazikitsa RabbitMQ, wotumizira uthenga wa Selari. Kuyiyika pa Debian ndikosavuta:
Timalowa mu chidebe chotsitsidwa ndikusintha masinthidwe: tchulani doko, kukula kwa RAM komwe kumaperekedwa, mawu achinsinsi pamitundu yosiyanasiyana, ndikukweza voliyumu:
Timachita masitepe 2-3 pachidebe cha prod, pazokonda timangosintha magawo: doko, mawu achinsinsi, kukula kwa RAM ndi njira yopita kufoda ya voliyumu pa seva:
Docker Registry
Kuphatikiza pa ntchito zoyambira, zingakhale bwino kuyika malo anu azithunzi za Docker pa seva. Mwamwayi, malo a seva tsopano ndi otsika mtengo (ndiotsika mtengo kwambiri kuposa kulembetsa kwa DockerHub), ndipo njira yokhazikitsira malo osungiramochinsinsi ndiyosavuta.
Tiyeni tipange ma subdomain awiri ku Plesk pakulembetsa kwathu: docker.helloworld.ru ndi docker-ui.helloworld.ru, ndikukonzekera Let's Encrypt satifiketi kwa iwo.
Onjezani fayilo ku docker.helloworld.ru subdomain foda docker-compose.yml ndi zinthu monga izi:
Ndipo tifunika kulondoleranso Nginx ku zotengera zathu. Izi zitha kuchitika kudzera ku Plesk.
Njira zotsatirazi ziyenera kuchitidwa pa docker.helloworld.ru ndi docker-ui.helloworld.ru subdomains:
gawo Zida Zida tsamba lathu kupita Malamulo a Proxy a Docker:
Ndipo onjezani lamulo pamayendedwe omwe akubwera ku chidebe chathu:
Timayang'ana kuti titha kulowa mu chidebe chathu kuchokera pamakina akomweko:
$ 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
Tiyeni tiwonenso magwiridwe antchito a docker-ui.helloworld.ru subdomain:
Mukadina pa Sakatulani nkhokwe, msakatuli amawonetsa zenera lololeza pomwe muyenera kuyika dzina lolowera ndi mawu achinsinsi posungira. Pambuyo pake, tidzasamutsidwa kutsamba lomwe lili ndi mndandanda wazosungira (pakadali pano, sizikhala kwa inu):
Kutsegula madoko ku Plesk Firewall
Pambuyo kukhazikitsa ndi kukonza zigawozo, tiyenera kutsegula madoko kuti zigawozo zipezeke kuchokera ku zida za Docker ndi maukonde akunja.
Tiyeni tiwone momwe tingachitire izi pogwiritsa ntchito zowonjezera za Firewall za Plesk zomwe tidaziyika kale.
Pitani ku Zida & Zikhazikiko> Zikhazikiko> Chiwombankhanga:
Pitani ku Sinthani Malamulo a Plesk Firewall> Onjezani Lamulo Lachizolowezi ndikutsegula madoko otsatirawa a TCP a Docker subnet (172.0.0.0 / 8):
RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
Redis: 32785, 32786
Tiwonjezeranso lamulo lomwe lidzatsegule madoko a PostgreSQL ndi mapanelo owongolera a RabbitMQ kudziko lakunja:
Tsatirani malamulowo pogwiritsa ntchito batani la Ikani Zosintha:
Kukhazikitsa CI / CD mu Github Actions
Tiyeni titsike ku gawo losangalatsa kwambiri - kukhazikitsa payipi yophatikizira mosalekeza ndikupereka projekiti yathu ku seva.
Paipi iyi ikhala ndi magawo awiri:
kumanga fano ndi kuyesa mayesero (kwa backend) - kumbali ya Github;
kuthamanga kusuntha (kwa backend) ndikuyika zotengera - pa seva.
Pitani ku Plesk
Tiyeni tiyambe ndi mfundo yachiwiri (chifukwa yoyamba imadalira).
Tidzakonza njira yotumizira pogwiritsa ntchito kukulitsa kwa Git kwa Plesk.
Ganizirani zachitsanzo chokhala ndi malo a Prod posungirako Backend.
Timapita pakulembetsa patsamba lathu la Helloworld ndikupita ku gawo la Git:
Ikani ulalo kunkhokwe yathu ya Github mugawo la "Remote Git repository" ndikusintha chikwatu chosasinthika. httpdocs kwa wina (mwachitsanzo. /httpdocs/hw_back):
Lembani kiyi ya SSH Public kuchokera pagawo lapitalo ndi onjezerani zake mu makonda a Github.
Dinani Chabwino pawindo pa sitepe 2, pambuyo pake tidzatumizidwa ku tsamba losungirako ku Plesk. Tsopano tifunika kukonza zosungirako kuti zisinthidwe pazantchito ku nthambi ya master. Kuti muchite izi, pitani ku Zokonda Posungira ndi kusunga mtengo Webhook URL (tidzazifuna pambuyo pake pokhazikitsa Github Actions):
M'munda wa Zochita pa zenera kuchokera m'ndime yapitayi, lowetsani script kuti muyambe kutumiza:
cd {REPOSITORY_ABSOLUTE_PATH}
.ci-cd/deploy.sh {ENV} {DOCKER_REGISTRY_HOST} {DOCKER_USER} {DOCKER_PASSWORD} {TG_BOT_TOKEN} {TG_CHAT_ID}
kumene:
{REPOSITORY_ABSOLUTE_PATH} - njira yopita ku foda ya prod ya chosungira chakumbuyo pa seva; {ENV} - chilengedwe (dev / prod), kwa ife prod; {DOCKER_REGISTRY_HOST} - gulu lathu losungiramo docker {TG_BOT_TOKEN} - chizindikiro cha telegalamu; {TG_CHAT_ID} - ID ya macheza/njira yotumizira zidziwitso.
Script chitsanzo:
cd /var/www/vhosts/helloworld.ru/httpdocs/hw_back/
.ci-cd/deploy.sh dev docker.helloworld.ru docker_user docker_password 12345678:AAbcdEfghCH1vGbCasdfSAs0K5PALDsaw -1001234567890
Onjezani wogwiritsa ntchito kuchokera pakulembetsa kwathu ku gulu la Docker (kuti athe kuyang'anira zotengera):
sudo usermod -aG docker helloworld_admin
Dev chilengedwe cha backend repository ndi frontend amakhazikitsidwa chimodzimodzi.
Mapaipi otumizira mu Github Actions
Tiyeni tipitirire kukhazikitsa gawo loyamba la mapaipi athu a CI/CD mu Github Actions.
Fayilo ya deploy.yml ya malo akutsogolo zosiyana pang'ono ndi Beck's. Ilibe sitepe yokhala ndi mayeso othamanga ndikusintha mayina a ma tokeni kuti atumizidwe. Zinsinsi za malo akutsogolo, mwa njira, ziyenera kudzazidwa padera.
Kupanga tsamba
Kupititsa patsogolo magalimoto kudzera mu Nginx
Chabwino, ife tafika ku mapeto. Zimangotsala pang'ono kukonza mayendedwe obwera ndi otuluka ku chidebe chathu kudzera mu Nginx. Takambirana kale izi mu gawo 5 la kukhazikitsa kwa Docker Registry. Zomwezo ziyenera kubwerezedwanso kumbuyo ndi kutsogolo m'malo a dev ndi prod.
Ndikupatsani zowonera pazokonda.
Bwererani
Frontend
Kumveketsa bwino. Ma URL onse adzatumizidwa ku chidebe chakutsogolo, kupatula omwe akuyamba nawo /api/ - Adzalumikizidwa ku chidebe chakumbuyo (chotero mu chidebe chakumbuyo, onse ogwira ntchito ayenera kuyamba nawo /api/).
Zotsatira
Tsopano tsamba lathu liyenera kupezeka helloworld.ru ndi dev.helloworld.ru (prod- and dev-environments, motsatana).
Ponseponse, taphunzira momwe tingakonzekerere ntchito yosavuta mu Flask ndi Angular ndikukhazikitsa payipi mu Github Actions kuti titulutse ku seva yomwe ikuyenda Plesk.
Ndibwereza maulalo osungiramo ndi code: kumbuyo, kumaso.