CI/CD in Actionibus Github pro vasculo+Angularis project
In hoc articulo, experientiam meam communicabo erigendi CI/CD utendi Plesk Control Panel et Actionibus Github. Hodie discemus quomodo simplex propositum cum simplici nomine "Helloworld" explicari debeamus. Legitur in compage Pythonis ampullae cum Apio opifice et angulari 8 frontend.
In prima parte articuli, consilium nostrum et partes eius videbimus. In secunda, quomodo Plesk constituere et instituere necessarias extensiones et partes (DB, RabbitMQ, Redis, Docker, etc.).
In tertia parte, postremo instar pipelinorum instituemus quomodo consilium nostrum disponendum servo in ambitu dev et prod. Et tunc locum in calculonis mittemus.
Etiam oblitus sum inducere me. Nomen meum est Oleg Borzov, elit plenus sum in CRM quadrigis pro procuratoribus hypothecae apud Domclick.
Overview project
Primum inspiciamus ad duo repositoria projectoria, tergum et frontem - et transeamus codicem.
Backend: Flask+Apium
Pro parte posteriori fasciculum cepi quod apud Pythonem tincidunt satis populare est: compagem lagenam (pro API) et Apium (pro munere queue). SQLAchemy pro ORM adhibetur. Alembic migrationibus adhibetur. Pro JSON sanatio in manubriis - Marshmallow.
Π repositoria exstat Readme.md fasciculus cum accuratiore descriptione structurarum et instructionum ad currendum res.
Pagina principalis cum forma mittendi inscriptionem et exitum deprimendo.
Pagina Login.
Adnotatione pagina.
Pagina principalis ascetica spectat:
Sunt duo files ad radicem Dockerfile ΠΈ docker-compose.ymlAc nota folder .ci-cd cum paulo pauciora scripta quam in repositorio dorso (scripta pro currentibus probat).
Satus consilium in Plesk
Initium constituendo Plesk et subscriptionem pro nostro situ creando.
Installing extensiones
In Plesk quattuor extensiones indigemus:
Docker ad administrandum et uisum statum continentiae in tabula Plesk admin ostentare;
Git instruere gradum super servo configurare;
Let's Encrypt ad generandum (et auto- renovandum) gratis TLS testimoniales;
Eas per Plesk admin in sectione Tractuum instituere potes:
Singulares occasus pro extensionibus non consideramus, occasus defectus pro nostris propositis demom facient.
Subscriptio et creare situs
Deinde, necesse est subscriptionem creare pro nostro helloworld.ru situ et addere dev.helloworld.ru subdomain ibi.
Subscriptionem crea pro domain helloworld.ru et login-password pro systematis usuario denota:
Reprehendo arca archa in fundo paginae Secure domain cum Lets Encryptsi volumus HTTPS constituere pro situ:
Deinde in hac subscriptione, crea subdomain dev.helloworld.ru (pro quo etiam liberum testimonium TLS ferre potes);
Installing Servo Components
Habemus servo cum OS Debian Extende 9.12 et installed imperium panel Plesk Obsidian 18.0.27.
Non opus est nos instituere et configurare ad propositum nostrum:
PostgreSQL (in nostro casu unus erit ministrator cum duobus databases pro ambitus dev et prod).
RabbitMQ (eadem, eadem instantia cum diversis vhosts pro ambitus).
Instantiae duae Redis (pro dev et prod ambitus).
Docker Subcriptio (pro repono locali de imaginibus Docker constructis).
UI pro Docker registro.
PostgreSQL
Plesk iam cum PostgreSQL DBMS venit, sed versio novissima non (tempore Plesk Obsidian scribebat. suscepit Postgres versiones 8.4β10.8). Postremam versionem volumus pro applicatione nostra (12.3 tempore huius scriptionis), ut eam manually instituemus.
Multae sunt instructiones delineandi pro Postgres in Debian in rete insertis (exempli gratia), ideo eas non singillatim describit, modo praecepta dabo:
Considerans PostgreSQL habere occasus magis mediocres defectus, necesse est configurationem corrigere. Hoc nos adiuvabit calculator: necesse est in parametris servi tui depellere ac occasus in tabella reponere /etc/postgresql/12/main/postgresql.confiis oblatis. Animadvertendum hic est, tales calculatores non esse glandem magicam, ac base pressius inflecti, innixa in ferramentis, applicationibus, ac multiplicitate interrogationis. Sed hoc satis est ut incipias.
Praeter unctiones a calculatore propositas, etiam mutamus postgresql.confper default portum 5432 alteri (in nostro exemplo - 53983).
Post file configurationem mutato, sileo postgresql-servo cum mandato:
service postgresql restart
PostgreSQL instituimus et figuravimus. Nunc faciamus database, utentes pro dev- et prod-environments, et utentes iura praebent ad datorum datorum administrandi;
$ 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
Transeamus ad inaugurandi RabbitMQ, nuntium sectorem ad Apium. Debianum inaugurari satis simplex est;
Nunc instituamus et configuremus ultimam partem applicationis nostrae - Redis. Adhibebitur ut backend ad reponendas eventus Apii officiorum.
Duo vascula Docker cum Redis ad dev et prod ferendum excitabimus utentes extensione Docker ad Plesk.
Plesk adimus, ad sectionem extensionis accedimus, Docker extensionem quaeramus et eam instituimus (libera versione opus est);
Vade ad extensionem inauguratam, imaginem per inquisitionem reperi redis bitnami et novam versionem install:
Imus in receptaculum receptae et conformationem componimus: denota portum, maximam magnitudinem RAM partita, tesseram in variabilium ambitu, et conscendimus volumen:
Gradus 2-3 pro cursorio praestamus, in uncinis modulos tantum mutamus: portum, tesseram, RAM magnitudine et semita ad volumen folder in calculonis;
Docker Subcriptio
Praeter officia fundamentalia, pulchrum esset tuum Docker imaginem repositorium in calculonis ponere. Fortunate, spatium server nunc satis vilis est (certe vilius quam subscriptione DockerHub), et processus repositorii privatus valde simplex est.
Et necesse habemus Nginx ad nostra continentia redirigere. Quod quidem fieri potest per Plesk.
Vestigia sequentia facienda sunt pro docker.helloworld.ru et docker-ui.helloworld.ru subdomains:
sectioni Apuleius Tools nostrum locum ire ad Docker Proxy Rules:
Et regulam adde in procuratorio negotiationis advenientis nostro continenti:
Reprehendimus quod inire in nostro vase e machinae locali possumus:
$ 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
Etiam in vi.helloworld.ru subdomain operationem coerceamus:
Cum repositoria in Browse repositoria strepita, navigatrum habebis potestatem fenestrae ubi necesse erit intrare usoris et tesseram pro repositorio. Postea transferemur ad paginam cum indice repositoriorum (iam enim vacuus erit vobis);
Aperiens portus in Plesk Firewall
His insertis et conformandis componentibus, portus aperiri necesse est ut elementa pervia sint e vasis Docker et ornatum externum.
Videamus quomodo hoc facere utendo extensione Firewall pro Plesk quod antea instituimus.
Ite ad Instrumenta & Occasus> Occasus> Firewall:
Ite ad Mutare Plesk Firewall Rules> Add Custom Rule et sequentes portus TCP aperi pro subnet Docker (172.0.0.0 / 8):
RabbitMQ: 1883, 4369, 5671-5672, 25672, 61613-61614
Redis: 32785, 32786
Addemus etiam regulam quae portuum PostgreSQL et RabbitMQ tabulas administrationis ad externum mundum aperiet;
Applicare praecepta utens in Applicare Mutationes button:
Occasus est CI / CD in actionibus Github
Descendamus ad partem gravissimam - statuens continuam integrationem pipeline et consilium nostrum servo traditum.
Hoc pipeline duabus partibus constat;
aedificans imaginem et probationes cursus (pro backend) β in Github parte;
migrationes cursus (pro backend) et continentia disponuntur - in calculonis servi.
Deploy ad Plesk
De secundo puncto primo agamus (quia prima ab ea pendet).
Processum instruere figurabimus per extensionem Git pro Plesk.
Exemplum habe cum Prod environment pro Backend repositorium.
Subscriptioni nostrae website Helloworld itur et ad Git ordinem itur:
Inserere nexum repositorio nostro Github in "Git repositorium remotum" campum et defaltam folder mutare httpdocs alii (eg. /httpdocs/hw_back):
Publica clavem SSH effingo ex prior gradus et addendo ejus in Github occasus.
Deprime OK in velum in gradatim 2, post quod ad paginam repositorii Plesk redirigenda erit. Nunc opus est repositorium ad renovandum in commissis magistro ramo configurare. Hoc facere, vade ad Repositorium Occasus et salvificem valorem Webhook URL (postea opus erit, cum actiones Github instituendae sunt);
In actionibus in campo in screen ex paragrapho praecedente, scriptum est, ut instruere instruere possit:
cd {REPOSITORY_ABSOLUTE_PATH}
.ci-cd/deploy.sh {ENV} {DOCKER_REGISTRY_HOST} {DOCKER_USER} {DOCKER_PASSWORD} {TG_BOT_TOKEN} {TG_CHAT_ID}
ubi:
{REPOSITORY_ABSOLUTE_PATH} - iter ad iaculo folder repositorii repositorii in servo; {ENV} - environment (dev / prod), in nostro casu prod; {DOCKER_REGISTRY_HOST} - armarium repositorium nostrum {TG_BOT_TOKEN} - Telegram bot indicium; {TG_CHAT_ID} - ID chat / channel ad notificationes mittens.
Exemplum script:
cd /var/www/vhosts/helloworld.ru/httpdocs/hw_back/
.ci-cd/deploy.sh dev docker.helloworld.ru docker_user docker_password 12345678:AAbcdEfghCH1vGbCasdfSAs0K5PALDsaw -1001234567890
Usorem ex subscriptione nostra ad Docker catervae adiungimus (ut vascula tractare possit);
sudo usermod -aG docker helloworld_admin
Dev ambitus repositorium backend et frontend eodem modo erigitur.
Pipeline instruere in actionibus Github
Moveamus ad primam partem CI/CD nostri pipeline in actionibus Github constituendis.
Sed antequam hanc partem expleamus, impleamus variabilium Secretorum, quae in Github indigemus. Hoc facere, vade ad Optiones -> Secreta:
DOCKER_REGISTRY - exercitum nostrum Docker repositorium (docker.helloworld.ru);
DOCKER_LOGIN - login to the Docker repositorium;
DOCKER_PASSWORD β tesserae ad eam;
DEPLOY_HOST β hospes ubi Plesk admin panel praesto est (exempli gratia: helloworld.com: 8443 or 123.4.56.78:8443);
DEPLOY_BACK_PROD_TOKEN - signum instruere ad prod-repositorium in calculonis (in Deployment in Plesk p. 4);
DEPLOY_BACK_DEV_TOKEN - signum instruere ad repositorium in calculonis servi.
Processus instruere simplex est et tribus gradibus principalibus consistit:
aedificandi et publicandi imaginem in repositorio nostro;
cursus probat in vase innititur imago recenter aedificata;
instruere ad desideratum ambitum secundum ramum (dev/rorem).
Frontend
Deploy.yml fasciculus anterioris repositorium parum differt a Beck's. Gradus caret currendo probat et mutat nomina signorum instruere. Secreta prima repositio obiter implenda separatim.
Site setup
Proxying negotiationis per Nginx
Ad finem bene pervenimus. Reliquum est ut advenientis et exitu commercii nostro continenti per Nginx configurare procurationem. Iam hunc processum in 5 gressu Docker Subcriptio paroecialis perteximus. Idem repetendum est pro posterioribus et anterioribus partibus in dev et prod ambitus.
Ego occasus eenshotsscray providebo.
backend
Frontend
Declaratio magna. Omnia delata in continenti fronti endemici erunt, exceptis his quae ab illis incipiuntur /api/ - continentis a tergo proxied erunt (so in dorsum continens omnes tracto incipiendum est /api/).
results
Nunc situs noster praesto esse debet apud helloworld.ru et dev.helloworld.ru (prod- et dev-environments, respective).
In summa, in Flask et Angularis simplicem applicationem praeparare didicimus et pipelinum in Actionibus Github constituimus, ut illud evolvatur servo currenti Plesk.
Nexus ad repositoria cum codice duplicabo: backend, frontend.