CI/CD in Actionibus Github pro vasculo+Angularis project

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.

Ducet ad repositoria: backend, 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.

Web Part API 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.

Apium pars etiam facilius, una tantum quaestio est send_mail_task.

in folder /conf Duo sunt subfolders:

  • docker cum duobus Dockerfiles (base.dockerfile raro mutantur basi imaginem et facere est Dockerfile ad praecipuas ecclesias);
  • .env_files β€” cum fasciculis variabilium ambientibus pro diversis ambitibus.

Quattuor sunt tabulae dockiferae ad radicem documenti;

  • docker-compose.local.db.yml datorum localium erigendi ad progressionem;
  • docker-compose.local.workers.yml pro loci suscitatione laborantis, datorum, Redis et RabbitMQ;
  • docker-compose.test.yml currere tentationes in instruere;
  • docker-compose.yml for instruere.

Et ultimum folder in - interest .ci-cd. 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

Reconditorium in fronte multo simplicius Beck. Frons tribus paginis constat:

  • Pagina principalis cum forma mittendi inscriptionem et exitum deprimendo.
  • Pagina Login.
  • Adnotatione pagina.

Pagina principalis ascetica spectat:

CI/CD in Actionibus Github pro vasculo+Angularis project
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;
  • Firewall advenientis negotiationis configurare eliquare.

Eas per Plesk admin in sectione Tractuum instituere potes:

CI/CD in Actionibus Github pro vasculo+Angularis project
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.

  1. Subscriptionem crea pro domain helloworld.ru et login-password pro systematis usuario denota:

    CI/CD in Actionibus Github pro vasculo+Angularis project
    Reprehendo arca archa in fundo paginae Secure domain cum Lets Encryptsi volumus HTTPS constituere pro situ:

    CI/CD in Actionibus Github pro vasculo+Angularis project

  2. Deinde in hac subscriptione, crea subdomain dev.helloworld.ru (pro quo etiam liberum testimonium TLS ferre potes);

    CI/CD in Actionibus Github pro vasculo+Angularis project

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:

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 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;

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.

  1. Plesk adimus, ad sectionem extensionis accedimus, Docker extensionem quaeramus et eam instituimus (libera versione opus est);

    CI/CD in Actionibus Github pro vasculo+Angularis project

  2. Vade ad extensionem inauguratam, imaginem per inquisitionem reperi redis bitnami et novam versionem install:

    CI/CD in Actionibus Github pro vasculo+Angularis project

  3. Imus in receptaculum receptae et conformationem componimus: denota portum, maximam magnitudinem RAM partita, tesseram in variabilium ambitu, et conscendimus volumen:

    CI/CD in Actionibus Github pro vasculo+Angularis project

  4. Gradus 2-3 pro cursorio praestamus, in uncinis modulos tantum mutamus: portum, tesseram, RAM magnitudine et semita ad volumen folder in calculonis;

    CI/CD in Actionibus Github pro vasculo+Angularis project

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;

Ad hoc:

  1. Duo subdomains in Plesk in nostra subscriptione efficiamus: docker.helloworld.ru et docker-ui.helloworld.ru, et configuramus Encrypt libellos.
  2. Adde tabella ad docker.helloworld.ru subdomain folder docker-compose.yml contenti 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'
    

  3. Sub SSH, fasciculum .htpasswd generabimus pro Basic licentia in repositorio Docker:
    htpasswd -bBc .htpasswd hw_docker_admin hw_docker_password
  4. Colligunt vasa et tollunt;
    docker-compose up -d
  5. 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:

CI/CD in Actionibus Github pro vasculo+Angularis project
Et regulam adde in procuratorio negotiationis advenientis nostro continenti:

CI/CD in Actionibus Github pro vasculo+Angularis project

  1. 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
  2. Etiam in vi.helloworld.ru subdomain operationem coerceamus:

    CI/CD in Actionibus Github pro vasculo+Angularis project
    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);

    CI/CD in Actionibus Github pro vasculo+Angularis project

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.

  1. Ite ad Instrumenta & Occasus> Occasus> Firewall:
    CI/CD in Actionibus Github pro vasculo+Angularis project
  2. 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

    CI/CD in Actionibus Github pro vasculo+Angularis project

  3. Addemus etiam regulam quae portuum PostgreSQL et RabbitMQ tabulas administrationis ad externum mundum aperiet;

    CI/CD in Actionibus Github pro vasculo+Angularis project

  4. Applicare praecepta utens in Applicare Mutationes button:

    CI/CD in Actionibus Github pro vasculo+Angularis project

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.

  1. Subscriptioni nostrae website Helloworld itur et ad Git ordinem itur:

    CI/CD in Actionibus Github pro vasculo+Angularis project

  2. Inserere nexum repositorio nostro Github in "Git repositorium remotum" campum et defaltam folder mutare httpdocs alii (eg. /httpdocs/hw_back):

    CI/CD in Actionibus Github pro vasculo+Angularis project

  3. Publica clavem SSH effingo ex prior gradus et addendo ejus in Github occasus.
  4. 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);

    CI/CD in Actionibus Github pro vasculo+Angularis project

  5. 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
  6. 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 file deploy.yml.

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

CI/CD in Actionibus Github pro vasculo+Angularis project

Frontend

CI/CD in Actionibus Github pro vasculo+Angularis project
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.

Source: www.habr.com