
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.
Ducet ad repositoria: , .
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.
Π exstat Readme.md fasciculus cum accuratiore descriptione structurarum et instructionum ad currendum res.
satis simplex, constat 6 pens;
/ping- ad reprehendo disponibilitate;- tractat de adnotatione, licentia, de-auctoritate et obtinendo usorem authenticum;
- ansa inscriptio quae munus in queue Apium ponit.
etiam facilius, una tantum quaestio est send_mail_task.
in folder Duo sunt subfolders:
dockercum duobus Dockerfiles (base.dockerfileraro mutantur basi imaginem et facere estDockerfilead praecipuas ecclesias);.env_filesβ cum fasciculis variabilium ambientibus pro diversis ambitibus.
Quattuor sunt tabulae dockiferae ad radicem documenti;
docker-compose.local.db.ymldatorum localium erigendi ad progressionem;docker-compose.local.workers.ymlpro loci suscitatione laborantis, datorum, Redis et RabbitMQ;docker-compose.test.ymlcurrere tentationes in instruere;docker-compose.ymlfor instruere.
Et ultimum folder in - interest . Continet testam scriptam instruere;
deploy.shβ Migrationem et instruere. Currit cultor post aedificationem et currit probationes in actionibus Github;rollback.shβ Revolutio vasorum ad versionem priorem conventus;curl_tg.sh- notificationes instruere ad Telegram mittens.
Frontend on angularis
multo simplicius Beck. Frons tribus paginis constat:
- 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:
Dockerad administrandum et uisum statum continentiae in tabula Plesk admin ostentare;Gitinstruere gradum super servo configurare;Let's Encryptad generandum (et auto- renovandum) gratis TLS testimoniales;Firewalladvenientis negotiationis configurare eliquare.
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 Extensio 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. Postgres versiones 8.4β10.8). Postremam versionem volumus pro applicatione nostra (12.3 tempore huius scriptionis), ut eam manually instituemus.
Instructiones accuratae de institutione Postgres in Debian copia eius in interreti est (), ideo eas non singillatim describit, modo praecepta dabo:
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
Considerans PostgreSQL habere occasus magis mediocres defectus, necesse est configurationem corrigere. Hoc nos adiuvabit : 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
Progrediamur ad institutionem RabbitMQ, nuntiorum mediatoris pro Celery. Institutum est in... Debian Satis simplex est:
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
Post institutionem creare opus est vhostsusores et iura necessaria concedunt;
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
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 bitnamiet 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.
habere volumus;
- password-protected Docker repositio accessible in subdomain ;
- UI ad videndas imagines in promptuario, in promptu .
Ad hoc:
- Duo subdomains in Plesk in nostra subscriptione efficiamus: docker.helloworld.ru et docker-ui.helloworld.ru, et configuramus Encrypt libellos.
- Adde tabella ad docker.helloworld.ru subdomain folder
docker-compose.ymlcontenti sic: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' - Sub SSH, fasciculum .htpasswd generabimus pro Basic licentia in repositorio Docker:
htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password - Colligunt vasa et tollunt;
docker-compose up -d - 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
httpdocsalii (eg./httpdocs/hw_back):
- Publica clavem SSH effingo ex prior gradus et 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 casuprod;
{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.
backend
pipeline describitur per .
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: : 8443 or :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
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: , .
Source: www.habr.com
