CI / CD hauv Github Ua Haujlwm rau Flask + Angular project
Hauv tsab xov xwm no, kuv yuav qhia kuv qhov kev paub ntawm kev teeb tsa CI / CD siv Plesk Control Vaj Huam Sib Luag thiab Github Ua Haujlwm. Niaj hnub no peb yuav kawm yuav ua li cas xa ib qhov project yooj yim nrog lub npe tsis yooj yim "Helloworld". Nws tau sau rau hauv Flask Python lub moj khaum, nrog cov neeg ua haujlwm Celery thiab Angular 8 frontend.
Hauv qhov thib peb, peb yuav thaum kawg txiav txim siab yuav ua li cas teeb tsa lub raj xa dej rau kev xa tawm peb qhov project mus rau lub server hauv ib puag ncig dev thiab cov khoom lag luam. Thiab tom qab ntawd peb yuav tso lub xaib ntawm lub server.
Thiab yog, kuv tsis nco qab qhia kuv tus kheej. Kuv lub npe yog Oleg Borzov, Kuv yog tus tsim tawm tag nrho hauv pab pawg CRM rau tus thawj tswj hwm tsev qiv nyiaj ntawm Domclick.
Cov ntsiab lus ntawm qhov project
Ua ntej, cia saib ob qhov project repositories - backend thiab pem hauv ntej - thiab mus hla cov cai.
Nplooj ntawv tseem ceeb nrog daim foos xa email thiab lub pob tawm.
ID nkag mus nplooj.
nplooj ntawv sau npe.
Lub ntsiab nplooj zoo li ascetic:
Muaj ob cov ntaub ntawv ntawm lub hauv paus Dockerfile ΠΈ docker-compose.yml, raws li zoo raws li cov ntaub ntawv uas paub .ci-cd nrog me ntsis scripts dua nyob rau hauv lub rov qab repository (tshem tawm scripts rau khiav kev xeem).
Pib ib qhov project hauv Plesk
Cia peb pib los ntawm kev teeb tsa Plesk thiab tsim kev tso npe rau peb lub xaib.
Ob qhov piv txwv Redis (rau dev thiab khoom ib puag ncig).
Docker Registry (rau lub zos cia ntawm Docker dluab tsim).
UI rau Docker npe.
PostgreSQL
Plesk twb los nrog PostgreSQL DBMS, tab sis tsis yog qhov tseeb version (thaum lub sijhawm sau ntawv Plesk Obsidian txhawb Postgres versions 8.4β10.8). Peb xav tau qhov tseeb version rau peb daim ntawv thov (12.3 ntawm lub sijhawm sau ntawv), yog li peb yuav nruab nws manually.
Xav tias PostgreSQL muaj qhov teeb meem me me me me, nws yog qhov tsim nyog los kho qhov teeb tsa. Qhov no yuav pab tau peb lub laij lej: koj yuav tsum tsav nyob rau hauv qhov tsis muaj ntawm koj lub server thiab hloov cov chaw hauv cov ntaub ntawv /etc/postgresql/12/main/postgresql.confrau cov uas muaj. Nws yuav tsum tau muab sau tseg ntawm no hais tias xws li lub laij lej tsis yog ib tug khawv koob mos txwv, thiab lub hauv paus yuav tsum tau tuned ntau precisely, raws li koj hardware, daim ntawv thov, thiab cov lus nug complexity. Tab sis qhov no txaus los pib.
Ntxiv nrog rau qhov teeb tsa tau thov los ntawm lub laij lej, peb kuj hloov pauv hauv postgresql.confqhov chaw nres nkoj 5432 mus rau lwm qhov (hauv peb qhov piv txwv - 53983).
Tom qab hloov cov ntaub ntawv teeb tsa, rov pib dua postgresql-server nrog cov lus txib:
service postgresql restart
Peb tau nruab thiab teeb tsa PostgreSQL. Tam sim no cia peb tsim cov ntaub ntawv, cov neeg siv rau dev thiab cov khoom ib puag ncig, thiab muab cov neeg siv txoj cai los tswj cov ntaub ntawv:
$ 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
Thiab ntxiv ib txoj cai rau kev tso npe nkag mus rau peb lub thawv:
Peb xyuas tias peb tuaj yeem nkag mus rau hauv peb lub thawv los ntawm lub tshuab hauv zos:
$ 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
Thaum koj nyem rau ntawm Browse repositories, qhov browser yuav tso tawm qhov tso cai qhov rai uas koj yuav tsum tau nkag mus rau tus username thiab password rau qhov chaw cia. Tom qab ntawd, peb yuav raug xa mus rau nplooj ntawv nrog cov npe ntawm cov chaw khaws khoom (rau tam sim no, nws yuav khoob rau koj):
Qhib cov chaw nres nkoj hauv Plesk Firewall
Tom qab txhim kho thiab teeb tsa cov khoom, peb yuav tsum qhib cov chaw nres nkoj kom cov khoom siv nkag tau los ntawm Docker ntim thiab sab nraud network.
Cia peb pom yuav ua li cas siv qhov txuas ntxiv Firewall rau Plesk uas peb tau teeb tsa ua ntej.
Mus rau Cov cuab yeej & Chaw> Chaw> Firewall:
Mus rau Hloov kho Plesk Firewall Txoj Cai> Ntxiv Txoj Cai Kev Cai thiab qhib TCP cov chaw nres nkoj hauv qab no rau Docker subnet (172.0.0.0 / 8):
RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
Ib: 32785, 32786
Peb tseem yuav ntxiv txoj cai uas yuav qhib PostgreSQL cov chaw nres nkoj thiab RabbitMQ tswj vaj huam sib luag rau lub ntiaj teb sab nraud:
Siv cov cai uas siv lub khawm Hloov Hloov:
Teeb tsa CI / CD hauv Github Ua Haujlwm
Cia peb nqis mus rau qhov nthuav tshaj plaws - teeb tsa kev sib txuas txuas txuas ntxiv thiab xa peb qhov project mus rau lub server.
Luam theej SSH Public key los ntawm cov kauj ruam dhau los thiab ntxiv nws hauv Github nqis.
Nyem OK ntawm qhov screen hauv kauj ruam 2, tom qab ntawd peb yuav raug xa mus rau nplooj ntawv repository hauv Plesk. Tam sim no peb yuav tsum teeb tsa lub chaw khaws cia kom hloov kho ntawm kev cog lus rau tus tswv ceg. Txhawm rau ua qhov no, mus rau Repository Chaw thiab txuag tus nqi Webhook URL (peb yuav xav tau tom qab thaum teeb tsa Github Actions):
cd {REPOSITORY_ABSOLUTE_PATH}
.ci-cd/deploy.sh {ENV} {DOCKER_REGISTRY_HOST} {DOCKER_USER} {DOCKER_PASSWORD} {TG_BOT_TOKEN} {TG_CHAT_ID}
qhov twg:
{REPOSITORY_ABSOLUTE_PATH} - txoj hauv kev mus rau cov ntawv tais ceev tseg ntawm qhov chaw khaws cia backend ntawm lub server; {ENV} - ib puag ncig (dev / prod), hauv peb rooj plaub prod; {DOCKER_REGISTRY_HOST} - tus tswv tsev ntawm peb docker repository {TG_BOT_TOKEN} - Telegram bot token; {TG_CHAT_ID} - ID ntawm kev sib tham / channel rau xa cov ntawv ceeb toom.
Script example:
cd /var/www/vhosts/helloworld.ru/httpdocs/hw_back/
.ci-cd/deploy.sh dev docker.helloworld.ru docker_user docker_password 12345678:AAbcdEfghCH1vGbCasdfSAs0K5PALDsaw -1001234567890
Ntxiv ib tus neeg siv los ntawm peb qhov kev tso npe rau Docker pawg (yog li lawv tuaj yeem tswj cov thawv):
sudo usermod -aG docker helloworld_admin
Cov dev ib puag ncig rau lub backend repository thiab frontend tau teeb tsa tib txoj kev.
Kev xa cov raj xa dej hauv Github Kev Ua Haujlwm
Cia peb txav mus los teeb tsa thawj ntu ntawm peb CI / CD cov kav dej hauv Github Actions.
DEPLOY_BACK_PROD_TOKEN - ib lub cim rau kev xa mus rau qhov khoom-repository ntawm tus neeg rau zaub mov (peb tau txais nws hauv Kev xa tawm hauv Plesk p. 4);
DEPLOY_BACK_DEV_TOKEN - token rau kev xa mus rau dev repository ntawm lub server.
Zoo, peb twb los txog kawg. Nws tseem tsuas yog teeb tsa qhov kev tso cai ntawm kev nkag mus thiab tawm mus rau peb lub thawv los ntawm Nginx. Peb twb tau them cov txheej txheem no hauv kauj ruam 5 ntawm Docker Registry teeb. Tib yam yuav tsum tau rov ua dua rau sab nraub qaum thiab pem hauv ntej hauv dev thiab khoom ib puag ncig.
Kuv yuav muab screenshots ntawm cov chaw.
backend
frontend
Cov lus qhia tseem ceeb. Tag nrho cov URLs yuav raug xa mus rau lub thawv rau pem hauv ntej, tshwj tsis yog cov pib nrog /api/ - lawv yuav raug xa mus rau lub thawv tom qab (yog li nyob rau hauv lub thawv tom qab, tag nrho cov handlers yuav tsum pib nrog /api/).
Cov txiaj ntsim tau los
Tam sim no peb qhov chaw yuav tsum muaj nyob rau ntawm helloworld.ru thiab dev.helloworld.ru (prod- thiab dev-environments, feem).
Nyob rau hauv tag nrho, peb tau kawm yuav ua li cas los npaj ib daim ntawv thov yooj yim hauv Flask thiab Angular thiab teeb tsa lub raj xa dej hauv Github Actions los yob nws mus rau lub server khiav Plesk.