CI/CD i roto i nga Mahi a Github mo te kaupapa Flask+Angular
I roto i tenei tuhinga, ka tohatohahia e au taku wheako ki te whakatu CI / CD ma te whakamahi i te Paewhiri Mana Plesk me nga Mahi a Github. I tenei ra ka ako tatou me pehea te whakatakoto i tetahi kaupapa ngawari me te ingoa ngawari "Helloworld". Kua tuhia ki roto i te anga Flask Python, me nga kaimahi Herewi me te Angular 8 o mua.
I te wahanga tuatahi o te tuhinga, ka titiro tatou ki ta tatou kaupapa me ona wahanga. I te tuarua, ka whakaarohia e matou me pehea te whakarite i te Plesk me te whakauru i nga taapiri me nga waahanga e tika ana (DB, RabbitMQ, Redis, Docker, etc.).
I te wahanga tuatoru, ka mutu ka whakaaro tatou me pehea te whakarite i te paipa mo te tuku i a maatau kaupapa ki tetahi kaimau i roto i te taiao dev me te prod. Na ka whakarewahia e matou te pae i runga i te tūmau.
Ae, kua wareware ahau ki te whakaatu i ahau. Ko Oleg Borzov toku ingoa, he kaiwhakawhanake tonu ahau i roto i te roopu CRM mo nga kaiwhakahaere mokete i Domclick.
Kaupapa Kaupapa
Tuatahi, kia tirohia e rua nga putunga kaupapa - muri me mua - ka haere ki runga i te waehere.
Whakamuri: Flask+Celery
Mo te taha o muri, i mau ahau i tetahi paihere e tino rongonui ana i waenga i nga kaiwhakawhanake Python: te anga Flask (mo te API) me te Celery (mo te rarangi mahi). Ka whakamahia te SQLAchemy hei ORM. Ka whakamahia te Alembic mo nga heke. Mo te whakamana JSON i roto i nga kakau - Marshmallow.
В whare putunga he konae Readme.md me te whakamaarama taipitopito o te hanganga me nga tohutohu mo te whakahaere i te kaupapa.
docker me nga konae Docker e rua (base.dockerfile ki te hanga i te ahua onge te hurihanga me te Dockerfile mo nga huihuinga matua);
.env_files - me nga konae me nga taurangi taiao mo nga taiao rereke.
E wha nga konae tito docker kei te putake o te kaupapa:
docker-compose.local.db.yml ki te whakaara i tetahi putunga raraunga o te rohe mo te whanaketanga;
docker-compose.local.workers.yml mo te whakaara ake i te kaimahi, te putunga korero, Redis me RabbitMQ;
docker-compose.test.yml ki te whakahaere i nga whakamatautau i te wa e tukuna ana;
docker-compose.yml mo te whakatakotoranga.
A ko te kōpaki whakamutunga e hiahia ana matou - .ci-cd. Kei roto nga tuhinga anga mo te horahanga:
deploy.sh — te whakarewatanga o te heke me te tuku. Ka rere i runga i te tūmau i muri i te hanga me te whakahaere i nga whakamatautau i roto i nga Mahi a Github;
rollback.sh - te huri i nga ipu ki te putanga o mua o te huihuinga;
curl_tg.sh - te tuku panui whakamohiotanga ki Telegram.
Tuhinga o mua i te Angular
Pupuri me mua he maamaa ake i a Beck. E toru nga wharangi o mua:
Te wharangi matua me te puka mo te tuku imeera me te paatene puta.
Whārangi takiuru.
Whārangi rehitatanga.
Ko te wharangi matua he ahua whakakeke:
E rua nga konae kei te putake Dockerfile и docker-compose.yml, me te kōpaki taunga .ci-cd he iti ake nga tuhinga i te putunga o muri (kua tangohia nga tuhinga hei whakahaere i nga whakamatautau).
Te tiimata i tetahi kaupapa i Plesk
Me timata ma te whakatu i a Plesk me te hanga ohaurunga mo to maatau papaanga.
Tāuta toronga
I Plesk, me wha nga toronga:
Docker ki te whakahaere me te whakaatu kanohi i te mana o nga ipu kei te papa whakahaere o Plesk;
Git ki te whirihora i te taahiraa tuku i runga i te tūmau;
Let's Encrypt ki te whakaputa (me te whakahou-aunoa) tiwhikete TLS kore utu;
Firewall ki te whirihora i te tātari o nga waka taumai.
Ka taea e koe te whakauru i a raatau ma te roopu whakahaere Plesk i te waahanga Toronga:
E kore matou e whakaaro ki nga tautuhinga taipitopito mo nga taapiri, ka mahia e nga tautuhinga taunoa mo o maatau kaupapa demo.
Waihangahia he ohaurunga me te pae
I muri mai, me hanga he ohaurunga mo ta maatau paetukutuku helloworld.ru me te taapiri i te dev.helloworld.ru subdomain ki reira.
Waihangahia he ohaurunga mo te rohe helloworld.ru ka whakapūtā te takiuru-kupuhipa mo te kaiwhakamahi pūnaha:
Tirohia te pouaka kei raro o te wharangi Whakaorangia te rohe ki a Let's Encryptki te hiahia matou ki te whakarite HTTPS mo te pae:
I muri mai, i tenei ohaurunga, hangahia he subdomain dev.helloworld.ru (ka taea hoki e koe te tuku tiwhikete TLS kore utu):
Tāuta Wae Tūmau
He tūmau kei a matou OS Debian Stretch 9.12 me te paewhiri mana kua whakauruhia Plesk Obsidian 18.0.27.
Me whakauru me te whirihora mo ta maatau kaupapa:
PostgreSQL (i roto i ta maatau keehi, ka kotahi te tūmau me nga papaa raraunga e rua mo nga taiao dev me te prod).
RabbitMQ (he rite, he tauira me nga vhosts rereke mo nga taiao).
E rua nga tauira Redis (mo nga taiao dev me te whakaputa).
Rehita Docker (mo te rokiroki a rohe o nga whakaahua Docker kua hangaia).
UI mo te rehita Docker.
PostgreSQL
Kua tae mai a Plesk me te PostgreSQL DBMS, engari ehara i te putanga hou (i te wa e tuhi ana a Plesk Obsidian tautokona Putanga Postgres 8.4–10.8). Kei te pirangi matou ki te putanga hou mo ta maatau tono (12.3 i te wa o tenei tuhinga), na ka whakauruhia e matou ma te ringa.
He maha nga tohutohu taipitopito mo te whakauru i nga Postgres ki a Debian i runga i te kupenga (tauira), no reira kare au e whakaahua taipitopito, ka hoatu noa e au nga whakahau:
Ki te whakaaro ko te PostgreSQL he iti noa nga tautuhinga taunoa, me whakatika te whirihoranga. Ka awhina tenei i a maatau tāetete: me peia e koe nga tawhā o to tūmau me te whakakapi i nga tautuhinga i roto i te konae /etc/postgresql/12/main/postgresql.confki te hunga e tapaea ana. Me tohuhia i konei ehara enei tatauranga i te matā makutu, a me tino tika ake te hanga o te turanga, i runga i to taputapu, tono, me te uaua o te patai. Engari he nui tenei hei timata.
I tua atu i nga tautuhinga i whakaarohia e te taatai, ka huri ano matou postgresql.confte tauranga taunoa 5432 ki tetahi atu (i ta maatau tauira - 53983).
I muri i te huri i te konae whirihoranga, whakaara ano i te postgresql-server me te whakahau:
service postgresql restart
Kua whakauruhia, kua whirihorahia e matou te PostgreSQL. Inaianei me hanga he patengi raraunga, nga kaiwhakamahi mo nga taiao dev me te whakaputanga, me te tuku mana ki nga kaiwhakamahi ki te whakahaere i te paataka raraunga:
$ 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
Ka anga whakamua ki te whakauru i a RabbitMQ, he kaihokohoko karere mo Celery. Ko te whakauru i runga i a Debian he tino ngawari:
Inaianei me whakauru me te whirihora i te waahanga whakamutunga mo ta maatau tono - Redis. Ka whakamahia hei tuara mo te penapena i nga hua o nga mahi herewi.
Ka whakaarahia e matou nga ipu Docker e rua me te Redis mo te dev me nga taiao prod ma te whakamahi i te toronga Docker mo Plesk.
Ka haere matou ki Plesk, haere ki te waahanga Toronga, rapua te toronga Docker me te whakauru (me whai putanga kore utu):
Haere ki te toronga kua whakauruhia, kimihia te ahua ma te rapu redis bitnami ka tāuta i te putanga hōu:
Ka haere matou ki roto i te ipu kua tangohia ka whakatika i te whirihoranga: tohua te tauranga, te rahi o te rahinga RAM kua tohatohahia, te kupuhipa i roto i nga taurangi taiao, ka whakairihia te rōrahi:
Ka mahia e matou nga waahanga 2-3 mo te ipu prod, i roto i nga tautuhinga ka huri noa i nga tawhā: te tauranga, te kupuhipa, te rahi o te RAM me te ara ki te kōpaki rōrahi i runga i te tūmau:
Rehita Docker
I tua atu i nga ratonga taketake, he pai ki te whakauru i a koe ake putunga whakaahua Docker ki runga i te tūmau. Waimarie, he iti noa te mokowā tūmau (he iti ake te utu i te ohaurunga DockerHub), a he tino ngawari te mahi ki te whakatu i tetahi putunga motuhake.
Me hanga e rua nga roheroto i Plesk i roto i ta maatau ohaurunga: docker.helloworld.ru me docker-ui.helloworld.ru, me te whirihora i nga tiwhikete Kia Whakamuna ma ratou.
Tāpirihia te konae ki te kōpaki roheroto docker.helloworld.ru docker-compose.yml me nga ihirangi penei:
A me huri ano a Nginx ki o tatou ipu. Ka taea tenei ma Plesk.
Ko nga mahi e whai ake nei me mahi mo te docker.helloworld.ru me te docker-ui.helloworld.ru subdomains:
wāhanga Utauta Taputapu haere to tatou pae ki Ture Takawaenga Docker:
Ka taapirihia he ture hei takawaenga i nga waka taumai ki ta maatau ipu:
Ka tirohia e matou ka taea e matou te takiuru ki ta matou ipu mai i te miihini o te rohe:
$ 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
Me tirohia ano te mahi o te docker-ui.helloworld.ru subdomain:
Ka paato koe ki te Tirotiro i nga whare pupuri, ka whakaatu te kaitirotiro i te matapihi whakamanatanga me whakauru koe i te ingoa kaiwhakamahi me te kupuhipa mo te putunga. I muri i tera, ka whakawhitia matou ki tetahi wharangi me te rarangi o nga putunga (mo tenei wa, ka noho kau mo koe):
Te whakatuwhera i nga tauranga i Plesk Firewall
I muri i te whakauru me te whirihora i nga waahanga, me whakatuwhera nga tauranga kia uru mai nga waahanga mai i nga ipu Docker me te whatunga o waho.
Kia kite tatou me pehea te mahi ma te whakamahi i te toronga Pātūahi mo Plesk i whakauruhia e matou i mua.
Haere ki Utauta & Tautuhinga> Tautuhinga> Patuahi:
Haere ki Whakarerekē Ture Pātūahi Plesk > Tāpiri Ture Ritenga ka whakatuwhera i nga tauranga TCP e whai ake nei mo te kupengaroto Docker (172.0.0.0 / 8):
RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
Redis: 32785, 32786
Ka taapirihia he ture hei whakatuwhera i nga tauranga PostgreSQL me nga panui whakahaere RabbitMQ ki te ao o waho:
Hoatu nga ture ma te whakamahi i te paatene Hoatu Huringa:
Te whakatu CI/CD ki nga Mahi a Github
Me heke ki te waahanga tino whakamere - te whakarite i te paipa whakauru tonu me te tuku i ta tatou kaupapa ki te tūmau.
E rua nga wahanga o tenei pipeline:
te hanga whakaahua me te whakahaere i nga whakamatautau (mo te tuara) - kei te taha o Github;
rere hekenga (mo te tuara) me te whakatakoto ipu - i runga i te tūmau.
Tukuna ki Plesk
Me mahi ki te take tuarua i te tuatahi (na te mea ka whakawhirinaki te tuatahi ki runga).
Ka whirihorahia e matou te mahinga tuku ma te whakamahi i te toronga Git mo Plesk.
Whakaarohia he tauira me te taiao Prod mo te putunga Putunga.
Ka haere matou ki te ohaurunga o ta maatau paetukutuku a Helloworld ka haere ki te waahanga-iti o Git:
Whakauruhia he hononga ki ta maatau putunga Github ki te mara "Remote Git repository" ka huri i te kōpaki taunoa httpdocs ki tetahi atu (hei tauira. /httpdocs/hw_back):
Tāruatia te kī SSH Public mai i te taahiraa o mua me te tāpiri kei roto i nga tautuhinga Github.
Paatohia te OK i runga i te mata i te taahiraa 2, muri iho ka tukuna atu ki te wharangi putunga i Plesk. Inaianei me whirihora i te putunga kia whakahoutia i runga i nga mahi ki te peka matua. Ki te mahi i tenei, haere ki Tautuhinga Pupuri me te tiaki i te uara Webhook URL (ka hiahia matou i muri mai i te wa e whakarite ana i nga Mahi a Github):
I roto i te mara Hohenga i runga i te mata mai i te kowae o mua, whakauruhia te tuhinga hei whakarewa i te tukunga:
cd {REPOSITORY_ABSOLUTE_PATH}
.ci-cd/deploy.sh {ENV} {DOCKER_REGISTRY_HOST} {DOCKER_USER} {DOCKER_PASSWORD} {TG_BOT_TOKEN} {TG_CHAT_ID}
kei hea:
{REPOSITORY_ABSOLUTE_PATH} - ara ki te kōpaki prod o te putunga o muri i runga i te tūmau; {ENV} - taiao (dev / prod), i roto i to maatau take prod; {DOCKER_REGISTRY_HOST} - te kaihautu o ta matou putunga putunga {TG_BOT_TOKEN} — Tohu karetao Telegram; {TG_CHAT_ID} — ID o te korerorero / hongere mo te tuku whakamohiotanga.
Tauira hōtuhi:
cd /var/www/vhosts/helloworld.ru/httpdocs/hw_back/
.ci-cd/deploy.sh dev docker.helloworld.ru docker_user docker_password 12345678:AAbcdEfghCH1vGbCasdfSAs0K5PALDsaw -1001234567890
Tāpirihia he kaiwhakamahi mai i ta maatau ohaurunga ki te roopu Docker (kia taea e ratou te whakahaere ipu):
sudo usermod -aG docker helloworld_admin
Ko te taiao dev mo te rehitatanga o muri me te pito o mua kua rite te whakarite.
Hoatuhia te paipa i roto i nga Hohenga Github
Me neke whakamua ki te whakatuu i te waahanga tuatahi o ta maatau paipa CI/CD i roto i nga Mahi a Github.
Engari i mua i te panui, me whakakiia nga taurangi ngaro e hiahiatia ana e tatou i Github. Ki te mahi i tenei, haere ki Tautuhinga -> Nga mea ngaro:
DOCKER_REGISTRY - te kaihautu o ta matou putunga Docker (docker.helloworld.ru);
DOCKER_LOGIN - takiuru ki te putunga Docker;
DOCKER_PASSWORD - kupuhipa ki reira;
DEPLOY_HOST — kaihautu kei te waatea te roopu whakahaere Plesk (tauira: helloworld.com: 8443 ranei 123.4.56.78:8443);
DEPLOY_BACK_PROD_TOKEN - he tohu mo te tuku ki te putunga prod-repository i runga i te tūmau (i whiwhi matou i te Deployment in Plesk p. 4);
DEPLOY_BACK_DEV_TOKEN - tohu mo te tuku ki te putunga dev i runga i te tūmau.
He ngawari te tukanga tuku, e toru nga waahanga matua:
te hanga me te whakaputa i te ahua ki roto i ta maatau putunga;
te whakahaere i nga whakamatautau i roto i tetahi ipu i runga i te ahua hou i hangaia;
te tuku ki te taiao e hiahiatia ana i runga i te peka (dev/master).
frontend
Ko te kōnae deploy.yml mo te putunga o mua He rereke te rereke mai i a Beck. Karekau he taahiraa ki te whakahaere i nga whakamatautau me te whakarereke i nga ingoa o nga tohu mo te tuku. Ko nga mea ngaro mo te rehitatanga o mua, na te ara, me whakakii motuhake.
Tatūnga pae
Te takawaenga waka ma Nginx
Kaati, kua tae tatou ki te mutunga. Ka noho tonu ki te whirihora i te takawaenga o nga waka taumai me te puta atu ki ta maatau ipu ma Nginx. Kua hipokina e matou tenei tukanga i te taahiraa 5 o te tatūnga Rehita Docker. Me whakahoki ano mo nga waahanga o muri me o mua i roto i nga taiao dev me te prod.
Ka hoatu e ahau nga whakaahua o nga tautuhinga.
Tuhinga
frontend
Tuhinga o mua. Ka tukuna nga URL katoa ki te ipu o mua, haunga era ka timata mai /api/ - ka tukuna ki te ipu o muri (na i roto i te ipu o muri, me timata nga kaikawe katoa /api/).
Ngā putanga
Inaianei kei te waatea to maatau pae ki helloworld.ru me dev.helloworld.ru (prod- me dev-taiao, ia).
I te katoa, i ako matou me pehea te whakarite i tetahi tono ngawari i roto i te Flask me te Angular me te whakarite i tetahi paipa i roto i nga Mahi a Github hei huri atu ki tetahi tūmau e whakahaere ana i a Plesk.
Ka tāruahia e ahau nga hononga ki nga whare pupuri me te waehere: tuara, mua.