
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.
Lingid hoidlatele: , .
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.
В seal on fail Readme.md koos üksikasjaliku struktuuri kirjelduse ja juhistega projekti käitamiseks.
üsna lihtne, koosneb 6 pliiatsist:
/ping- saadavuse kontrollimiseks;- tegeleb registreerimise, autoriseerimise, volituste tühistamise ja volitatud kasutaja hankimisega;
- meili käepide, mis paneb ülesande selleri järjekorda.
veelgi lihtsam, on ainult üks probleem send_mail_task.
Kaustas seal on kaks alamkausta:
dockerkahe Docker-failiga (base.dockerfileehitada harva muutuvat aluspilti jaDockerfilepõhikoostude jaoks);.env_files- erinevate keskkondade keskkonnamuutujatega failidega.
Projekti juurtes on neli dokkeri koostamise faili:
docker-compose.local.db.ymltõsta arendamiseks kohalikku andmebaasi;docker-compose.local.workers.ymltöötaja kohalikuks kasvatamiseks, andmebaas, Redis ja RabbitMQ;docker-compose.test.ymltestide läbiviimiseks juurutamise ajal;docker-compose.ymlkasutuselevõtuks.
Ja viimane kaust, mis meid huvitab - . See sisaldab juurutamiseks shelliskripte:
deploy.sh— migratsiooni ja kasutuselevõtu käivitamine. Töötab serveris pärast Github Actionsis testide loomist ja käivitamist;rollback.sh- konteinerite tagasipööramine sõlme eelmisele versioonile;curl_tg.sh- Telegramile juurutusteatiste saatmine.
Esiosa Angularil
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:
Dockerkonteinerite oleku haldamiseks ja visuaalseks kuvamiseks Pleski administraatoripaneelil;Gitjuurutamise etapi konfigureerimiseks serveris;Let's Encrypttasuta TLS-sertifikaatide genereerimiseks (ja automaatseks uuendamiseks);Firewallsissetuleva liikluse filtreerimise seadistamiseks.
Saate need installida jaotises Laiendused Pleski administraatoripaneeli kaudu:

Me ei võta arvesse laienduste üksikasjalikke sätteid, vaikeseaded sobivad meie demo jaoks.
Looge tellimus ja sait
Järgmiseks peame looma oma veebisaidi helloworld.ru tellimuse ja lisama sinna alamdomeeni dev.helloworld.ru.
- Looge domeeni helloworld.ru tellimus ja määrake süsteemi kasutaja sisselogimisparool:

Märkige lehe allosas olev ruut Kaitske domeen funktsiooniga Let's Encryptkui tahame saidi jaoks HTTPS-i seadistada:
- Järgmisena looge selles tellimuses alamdomeen dev.helloworld.ru (mille jaoks saate väljastada ka tasuta TLS-sertifikaadi):

Serveri komponentide installimine
Meil on server koos OS Debian Venitus 9.12 ja paigaldatud juhtpaneel Pleski obsidiaan 18.0.27.
Peame oma projekti jaoks installima ja konfigureerima:
- PostgreSQL (meie puhul on üks server kahe andmebaasiga dev- ja prod-keskkondade jaoks).
- RabbitMQ (sama, sama eksemplar erinevate vhostidega keskkondade jaoks).
- Kaks Redise eksemplari (arendus- ja tootmiskeskkondade jaoks).
- Dockeri register (ehitatud Dockeri piltide kohalikuks salvestamiseks).
- Dockeri registri kasutajaliides.
PostgreSQL
Pleskis on juba PostgreSQL DBMS, kuid mitte uusim versioon (Plesk Obsidiani kirjutamise ajal Postgresi versioonid 8.4–10.8). Soovime oma rakenduse jaoks uusimat versiooni (selle kirjutamise ajal 12.3), seega installime selle käsitsi.
Postgresi installimise üksikasjalikud juhised Debian internetis on seda küllaga (), nii et ma ei kirjelda neid üksikasjalikult, annan lihtsalt käsud:
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
Arvestades, et PostgreSQL-i vaikeseaded on üsna kesised, on vaja konfiguratsiooni korrigeerida. See aitab meid : 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 RabbitMQ installimise juurde, mis on Celery sõnumivahendaja. See on installitud Debian See on üsna lihtne:
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
Pärast installimist peame looma vhosts, kasutajad ja anda vajalikud õigused:
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
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 bitnamija 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.
Soovime omada:
- parooliga kaitstud Dockeri hoidla, millele on juurdepääs alamdomeenil ;
- UI hoidlas olevate piltide vaatamiseks, saadaval aadressil .
Selleks:
- 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.ymlsellise sisuga: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' - SSH-s genereerime Dockeri hoidlas põhivolituse jaoks faili .htpasswd:
htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password - Koguge ja tõstke konteinerid:
docker-compose up -d - 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
httpdocsteisele (nt./httpdocs/hw_back):
- Kopeerige SSH avalik võti eelmisest sammust ja 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 puhulprod;
{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.
Taustaprogramm
Torujuhet on kirjeldatud artiklis .
Kuid enne selle sõelumist täitkem Githubis vajalikud salamuutujad. Selleks minge aadressile Seaded -> Saladused:
DOCKER_REGISTRY- meie Dockeri hoidla host (docker.helloworld.ru);DOCKER_LOGIN- logige sisse Dockeri hoidlasse;DOCKER_PASSWORD- selle parool;DEPLOY_HOST— host, kus on saadaval Pleski administraatoripaneel (näide: : 8443 või :8443);DEPLOY_BACK_PROD_TOKEN- token serveri prod-hoidlasse juurutamiseks (selle saime Pleski juurutamine lk 4);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
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.
Kopeerin hoidlate lingid koodiga: , .
Allikas: www.habr.com
