CI/CD Githubis Actions Flask+Angular projekti jaoks
Selles artiklis jagan oma kogemusi CI/CD seadistamisel Pleski juhtpaneeli ja Githubi toimingute abil. Täna õpime, kuidas juurutada lihtsat projekti lihtsa nimega "Helloworld". See on kirjutatud Flask Pythoni raamistikus, selleri töötajate ja Angular 8 esiosaga.
Artikli esimeses osas vaatleme oma projekti ja selle osi. Teises selgitame välja, kuidas seadistada Plesk ja installida vajalikud laiendused ja komponendid (DB, RabbitMQ, Redis, Docker jne).
Kolmandas osas selgitame lõpuks välja, kuidas seadistada torujuhe meie projekti juurutamiseks serverisse arendus- ja tootekeskkonnas. Ja siis käivitame saidi serveris.
Ja jah, ma unustasin end tutvustada. Minu nimi on Oleg Borzov, ma olen Domclicki hüpoteegihaldurite CRM-i meeskonna täistööjõu arendaja.
Projekti ülevaade
Kõigepealt vaatame kahte projektihoidlat – tausta- ja esiosa – ning tutvume koodiga.
Taustaprogramm: kolb + seller
Tagumise osa jaoks võtsin hunniku, mis on Pythoni arendajate seas üsna populaarne: Flask raamistik (API jaoks) ja Celery (ülesannete järjekorra jaoks). SQLAchemyt kasutatakse ORM-ina. Alembicit kasutatakse rände jaoks. JSON-i valideerimiseks käepidemetes – Marshmallow.
В hoidlad seal on fail Readme.md koos üksikasjaliku struktuuri kirjelduse ja juhistega projekti käitamiseks.
Hoidla esiküljega palju lihtsam kui Becki oma. Esikülg koosneb kolmest lehest:
Pealeht e-kirja saatmise vormi ja väljumisnupuga.
Sisselogimisleht.
Registreerimisleht.
Avaleht näeb askeetlik välja:
Juures on kaks faili Dockerfile и docker-compose.yml, samuti tuttav kaust .ci-cd veidi vähemate skriptidega kui tagumises hoidlas (testide käitamiseks eemaldatud skriptid).
Projekti käivitamine Pleskis
Alustame Pleski seadistamisest ja meie saidi tellimuse loomisest.
Laienduste installimine
Pleskis vajame nelja laiendust:
Docker konteinerite oleku haldamiseks ja visuaalseks kuvamiseks Pleski administraatoripaneelil;
Pleskis on juba PostgreSQL DBMS, kuid mitte uusim versioon (Plesk Obsidiani kirjutamise ajal toetatud Postgresi versioonid 8.4–10.8). Soovime oma rakenduse jaoks uusimat versiooni (selle kirjutamise ajal 12.3), seega installime selle käsitsi.
Postgresi installimiseks Debiani võrgus on palju üksikasjalikke juhiseid (näide), nii et ma ei kirjelda neid üksikasjalikult, annan lihtsalt käsud:
Arvestades, et PostgreSQL-i vaikeseaded on üsna kesised, on vaja konfiguratsiooni korrigeerida. See aitab meid kalkulaator: peate sisestama oma serveri parameetrid ja asendama failis olevad seaded /etc/postgresql/12/main/postgresql.confpakutavatele. Siinkohal tuleb märkida, et sellised kalkulaatorid ei ole mingi võlu ja baasi tuleks täpsemalt häälestada, lähtudes sinu riistvarast, rakendusest ja päringu keerukusest. Kuid alustamiseks sellest piisab.
Lisaks kalkulaatori pakutavatele seadistustele muudame ka sisse postgresql.confvaikeport 5432 teisele (meie näites - 53983).
Pärast konfiguratsioonifaili muutmist taaskäivitage postgresql-server käsuga:
service postgresql restart
Oleme installinud ja konfigureerinud PostgreSQL-i. Nüüd loome andmebaasi, kasutajad arendus- ja tootmiskeskkondade jaoks ning anname kasutajatele õigused andmebaasi haldamiseks:
$ 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
JänesMQ
Liigume edasi selleri sõnumivahendaja RabbitMQ installimise juurde. Selle installimine Debiani on üsna lihtne:
Nüüd installime ja konfigureerime meie rakenduse viimase komponendi - Redis. Seda kasutatakse taustaprogrammina selleri ülesannete tulemuste salvestamiseks.
Tõstame laienduse abil üles kaks Dockeri konteinerit koos Redisega arendus- ja tootmiskeskkondade jaoks Docker Pleski jaoks.
Läheme Pleski, läheme jaotisse Laiendused, otsime Dockeri laiendust ja installime selle (vajame tasuta versiooni):
Minge installitud laiendusse, leidke pilt otsingu kaudu redis bitnami ja installige uusim versioon:
Läheme allalaaditud konteinerisse ja kohandame konfiguratsiooni: määrake port, maksimaalne eraldatud RAM-i suurus, parool keskkonnamuutujates ja paigaldage helitugevus:
Teostame tootemahuti jaoks etapid 2-3, seadetes muudame ainult parameetreid: port, parool, RAM-i suurus ja tee serveri helitugevuse kausta:
Dockeri register
Lisaks põhiteenustele oleks tore serverisse panna oma Dockeri pildihoidla. Õnneks on serveriruum nüüd üsna odav (kindlasti odavam kui DockerHubi tellimus) ja privaatse hoidla seadistamise protsess on väga lihtne.
Loome oma tellimuses Pleskis kaks alamdomeeni: docker.helloworld.ru ja docker-ui.helloworld.ru ning konfigureerime nende jaoks Let's Encrypt sertifikaadid.
Lisage fail alamdomeeni kausta docker.helloworld.ru docker-compose.yml sellise sisuga:
Ja me peame Nginxi oma konteineritesse ümber suunama. Seda saab teha Pleski kaudu.
Alamdomeenide docker.helloworld.ru ja docker-ui.helloworld.ru jaoks tuleb teha järgmised toimingud:
Jaotises Dev Tööriistad meie sait minge aadressile Dockeri puhverserveri reeglid:
Ja lisage meie konteinerisse sissetuleva liikluse puhverserveri reegel:
Kontrollime, kas saame kohalikust masinast oma konteinerisse sisse logida:
$ 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
Kontrollime ka alamdomeeni docker-ui.helloworld.ru tööd:
Kui klõpsate käsul Sirvi hoidlaid, kuvab brauser autoriseerimisakna, kus peate sisestama hoidla kasutajanime ja parooli. Pärast seda suunatakse meid hoidlate loendiga lehele (praegu on see teie jaoks tühi):
Portide avamine Pleski tulemüüris
Pärast komponentide installimist ja konfigureerimist peame avama pordid, et komponentidele oleks juurdepääs Dockeri konteineritest ja välisvõrgust.
Vaatame, kuidas seda teha, kasutades Pleski tulemüüri laiendust, mille me varem installisime.
Minema Tööriistad ja sätted > Seaded > Tulemüür:
Minema Muuda Pleski tulemüüri reegleid > Lisa kohandatud reegel ja avage Dockeri alamvõrgu jaoks järgmised TCP-pordid (172.0.0.0 / 8):
RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
Redis: 32785, 32786
Lisame ka reegli, mis avab PostgreSQL-i pordid ja RabbitMQ halduspaneelid välismaailmale:
Rakendage reeglid nupu Rakenda muudatused abil:
CI/CD seadistamine Githubi toimingutes
Asume kõige huvitavama osa juurde – pideva integratsioonikonveieri seadistamine ja projekti serverisse toimetamine.
See torujuhe koosneb kahest osast:
pildi loomine ja testide käivitamine (taustaprogrammi jaoks) - Githubi poolel;
migratsioonide käitamine (taustaprogrammi jaoks) ja konteinerite juurutamine - serveris.
Kasutusele Pleskis
Tegeleme esmalt teise punktiga (sest esimene sõltub sellest).
Konfigureerime juurutusprotsessi Pleski Giti laienduse abil.
Vaatleme näidet taustahoidla Prod-keskkonnast.
Avame oma Helloworldi veebisaidi tellimuse ja avame Giti alamjaotise:
Sisestage link meie Githubi hoidlale väljale "Remote Git repository" ja muutke vaikekausta httpdocs teisele (nt. /httpdocs/hw_back):
Kopeerige SSH avalik võti eelmisest sammust ja lisa see on Githubi seadetes.
Klõpsake sammus 2 ekraanil OK, misjärel suunatakse meid Pleski hoidla lehele. Nüüd peame konfigureerima hoidla nii, et seda värskendataks põhiharule tehtavate kohustuste osas. Selleks minge aadressile Hoidla sätted ja salvestage väärtus Webhook URL (vajame seda hiljem Githubi toimingute seadistamisel):
Sisestage eelmise lõigu ekraanil väljale Toimingud juurutamise käivitamiseks skript:
cd {REPOSITORY_ABSOLUTE_PATH}
.ci-cd/deploy.sh {ENV} {DOCKER_REGISTRY_HOST} {DOCKER_USER} {DOCKER_PASSWORD} {TG_BOT_TOKEN} {TG_CHAT_ID}
kus:
{REPOSITORY_ABSOLUTE_PATH} - serveris asuva taustahoidla prod-kausta tee; {ENV} - keskkond (dev / prod), meie puhul prod; {DOCKER_REGISTRY_HOST} - meie dokkide hoidla host {TG_BOT_TOKEN} — Telegrami roboti tunnus; {TG_CHAT_ID} — teadete saatmise vestluse/kanali ID.
Skripti näide:
cd /var/www/vhosts/helloworld.ru/httpdocs/hw_back/
.ci-cd/deploy.sh dev docker.helloworld.ru docker_user docker_password 12345678:AAbcdEfghCH1vGbCasdfSAs0K5PALDsaw -1001234567890
Lisage kasutaja meie tellimusest Dockeri rühma (et ta saaks konteinereid hallata):
sudo usermod -aG docker helloworld_admin
Taustaprogrammi hoidla ja kasutajaliidese arenduskeskkond seadistatakse samal viisil.
Githubi toimingute juurutamise torujuhe
Liigume edasi meie CI/CD torujuhtme esimese osa seadistamise juurde Github Actionsis.
DEPLOY_BACK_DEV_TOKEN - luba serveri arendajahoidlasse juurutamiseks.
Juurutusprotsess on lihtne ja koosneb kolmest põhietapist:
pildi koostamine ja avaldamine meie hoidlas;
testide käivitamine konteineris värskelt ehitatud pildi põhjal;
juurutamine soovitud keskkonda olenevalt harust (dev/master).
Frontend
Fail deploy.yml eesmise hoidla jaoks veidi erinev Becki omast. Sellel puudub testide käitamise etapp ja see muudab juurutamiseks mõeldud žetoonide nimesid. Muide, esihoidla saladused tuleb eraldi täita.
Saidi seadistamine
Liikluse puhverserver läbi Nginxi
Noh, me oleme jõudnud lõppu. Jääb vaid konfigureerida sissetuleva ja väljamineva liikluse puhverserver meie konteinerisse Nginxi kaudu. Oleme seda protsessi juba käsitlenud Dockeri registri häälestuse 5. sammus. Sama tuleks korrata tagumise ja esiosa puhul arendus- ja tootekeskkondades.
Annan seadetest ekraanipildid.
Taustaprogramm
Frontend
Oluline selgitus. Kõik URL-id, välja arvatud need, mis algavad tähisega, suunatakse puhverserverile esiserva konteinerile /api/ - need ühendatakse tagumise konteineriga (nii tagumises konteineris peavad kõik käitlejad alustama sellest /api/).
Tulemused
Nüüd peaks meie sait olema saadaval aadressil helloworld.ru ja dev.helloworld.ru (vastavalt prod- ja dev-keskkonnad).
Kokku õppisime Flaskis ja Angularis lihtsat rakendust ette valmistama ning Github Actionsis konveieri seadistama, et see Pleski töötavasse serverisse levitada.