Passa ai contenuti principali

JHipster - Microservizi 2



Microservizi - 2


Introduzione

In questo post descrivo come usare l'architettura a micro-servizi presentata nel post precedente e aggiungo gli elementi per sviluppare in questa architettura.



Sviluppo

L'ipotesi di base è quella di dover sviluppare una applicazione web a microservizi, con una interfaccia utente e una serie di servizi di back-end.

La parte di front-end può essere sviluppata seguendo due strade:

1) sviluppare separatamente le due componenti usando l'apposito comando in fase di lancio del wizard:


$ jhipster --skip-client



oppure:



$ jhipster --skip-server



2) sviluppare una monolitica e poi portare nell'architettura a micro servizi: la parte di "services" e la parte di "webapp"



Componenti

Scenario 1

Importazione del jdl (prima sul gateway e poi sul microservizio)

Il Gateway in questa fase rappresenta la componente sulla quale ci concentreremo. A questo arriveranno le chiamare del browser e dovrà rispondere alle richieste.

1) Generare le entità con il comando :

  $ jhipster import-jdl jhipster-jdl.jh

Da questo accedo a front-end e back-end perché vengono generati tutti e due sul gateway

2) Generare le entità sul micro-servizio con il comando :

  $ jhipster import-jdl jhipster-jdl.jh

In questo caso si può notare che la cartella relativa alla webapp risulta vuota:


Essendo un microse-rvizio la procedura di importazione del jdl non ha creato la parte di front-end, giustamente !!!

Tornando sul gateway, sul quale l'applicazione è già utilizzabile avendo questo generato sia front-end che back-end, bisogna impostare l'url alla quale deve richiedere i servizi del back-end:

/webpack/webpack.common.js

impostare la costante:

SERVER_API_URL: `'http://IP_MICROSERVIZIO:8081/'`


Scenario 2

Importazione del jdl (prima sul micro-servizio e poi sul gateway dal microservizio)

sul gateway bisogna lanciare:
$ jhipster entity [NOMEENTITA]


Esempio concreto: login




1) Importato jdl nel progetto loginMS
2) Creato nuovo progetto gateway
3) Settato su entrambi il registry



Spring Cloud Config Server


Vediamo come sfruttare questa componente dello stack JHipster.
Questa componente punta distribuire ed esternalizzare, in una architettura a microservizi, i parametri di configurazione. E' costituita da un server (integrato nel registry) e di un client (integrato in ogni microservizio).
L'implementazione prevede di default l'uso di git come componente di archiviazione. Quindi da git viene letta la configurazione di default.


Funzionamento

La prima cosa che fanno le applicazioni appena partono è registrarsi al Registry per ricevere la loro configurazione. Questo vale sia per i microservizi che per il gateway. Appena partono, le applicazioni, creano una istanza di una variabile "Environment" (org.springframework.core.env.Environment) che viene alimentata dal metodo della "SpringApplication" "getEnvironment()".
Il tutto viene letto dal repository git:

https://github.com/jhipster/jhipster-registry-sample-config.git


Uso



Ho comincianto creando un progetto su git e importando il codice dal git precendete:




Poi ho aggiunto una variabile:


my:
loggin:
logpath: \app\log\

Ho clonato il progetto relativo al registry dal repository git:


$ git clone https://github.com/jhipster/jhipster-registry.git



Ho modificato la variabile, presente in:

central-config/application.yml


spring.cloud.config.server.composite.uri facendola puntare al mio repo con il file application.yml. Ho lanciato il progetto del Registry e mi risulta la possibilità di ottenere la distribuzione di un json con la configurazione:

http://IP_SERVER:8761/config/jhipster-registry/dev

Ora passiamo alla "dockerizzazione" del Registry così impostato.
Attenzione al comando:


JHipster costruisce applicazioni già pronte ad essere dockerizzate. Scrive un file di configurazione per docker in:

src/main/docker/


Dockerizziamo una applicazione


Avendo scaricato il progetto del registry, avendolo modificato, ora devo renderlo una immagine docker. Il progetto è stato modificato in Eclipse sotto Windows. Il processo qui documentato vale per qualunque progetto maven, per passare dal codice al microservizio dockerizzato in esecuzione.

Per ottenere l'immagine docker a partire dal progetto maven di un microservizio sul server è installato e usato JIB. Quindi basterà:


  • trasferire il tar del progetto maven, dalla macchina di sviluppo, nella dir dell'utente: /home/utente/downloads/src
  • copiare il pacchetto compresso come sudo nella dir di lavoro: 

$ sudo cp /home/utente/downloads/src/[NOMEDELMICROSERVIZIO.TAR] .

  • cancellare l'eventuale directory con i sorgenti di versioni precedenti: 

$ sudo rm -R [NOMEDELMICROSERVIZIO]


    • scompattare il progetto del microservizio:

    $ sudo tar xvf [NOMEDELMICROSERVIZIO.TAR]
    • spostarsi nella directory del progetto:

    $ cd NOMEDELMICROSERVIZIO


        • buildare l'immagine del docker manualmente:

        $ sudo mvn -X -e package -Pdev verify -DskipTests jib:dockerBuild

          • in alternativa vediamo come buildare l'immagine del docker da Eclipse:
            


          Specificare come Goal: package jib:buildTar
          Profiles: dev
          Ed eventualmente "Skip Tests" per evitare l'esecuzione degli alfa test e velocizzare la build.


          Specificare la JVM desiderata per la compilazione.



            • maven risponderà con il nome del microservizio buildato:

            [INFO] Built image to Docker daemon as [NOMEDELMICROSERVIZIO]


                • individuare il nome del container del microservizio con:

                $ sudo docker container ps


                      •  se è in esecuzione, altrimenti se è fermo:

                      $ sudo docker container ps -a


                          • appuntarsi "CONTAINER ID" e "IMAGE"
                          • fermare la precedente istanza del microservizio:

                          $ sudo docker container stop [CONTAINER ID]


                              • rimuovere il vecchio container:

                              $ sudo docker rm [CONTAINER ID]


                                  • rimuovere la vecchia immagine:

                                  $ sudo docker image rm [IMAGE]


                                      • lanciare il run della nuova immagine che creerà in nuovo container, con il nome da assegnare CONTAINER NAME, e lo eseguirà:

                                      $ sudo docker run --network host --name [CONTAINER NAME] -d [IMAGE]


                                          • per vedere i log del microservizio in esecuzione:


                                          $ sudo docker logs [CONTAINER NAME]


                                          Note



                                          1) Se si vuole evitare la compilazione della parte relativa ai test, aggiungere questa fra le "property" nel pom.xml:

                                          <maven.test.skip>true</maven.test.skip>

                                          2) Quello proposto per l'ambiente di sviluppo che prevede l'uso di un docker, almeno sotto Windows, non è utilizzabile in produzione perché docker genera un ip locale alla macchina. La soluzione in produzione richiede, allo stato attuale, un docker in linux.

                                          3) Ho scaricato e lanciato il docker del jhipster-registry.
                                          Per impostare la rete del docker in modalità bridge per usare l'ip dell'host per implementare il servizio:


                                          $ sudo docker run --network host jhipster/jhipster-registry


                                          Licenza Creative Commons
                                          Quest'opera è distribuita con Licenza Creative Commons Attribuzione 4.0 Internazionale (CC BY 4.0) - Condividi allo stesso modo

                                          Commenti

                                          Post popolari in questo blog

                                          Telecamere Ip con accesso "nascosto"

                                          Telecamere Ip con accesso "nascosto" Storia triste di un auto-hacking obbligato che mi ha fatto scoprire come la nostra privacy è realmente messa a rischi. Storia Ho acquistato dal mercatino/fiera del Radioamatore di Fasano quattro telecamere IP. La scatola riporta "Smart Camera" LF4810. Ne ho montata una e testata in tutte le sue funzionalità per oltre un mese. Chiaramente la manualistica scarsissima, come da tradizione in questi prodotti cinesi di costo molto concorrenziale, consiste in un "pieghevole" di 4 facciate. Chiaramente non erano documentate le impostazioni necessarie per attivare i protocolli ONVIF e RTSP che mi sono indispensabili per l'uso che ne devo fare. Nonostante questa scarsa documentazione dopo l'installazione base fatta con l'apposita app: tutto sembrava corretto. Chiaramente la prima azione che ho compiuto è stata quella di cambiare la password che di default è "123". Subito dopo h

                                          Dynamic DNS con Duckdns.org in HTTPS

                                          Obiettivo Avere un dominio https con certificato valido da usare come endpoint pubblico per Homeassistant e per un WebHook per i bot telegram. Fase 1 Registrazione del dominio in un servizio di dynamic DNS come https://www.duckdns.org/   : Scegliere per quale sistema operativo installare il client che si occuperà dell'aggiornamento dell'ip: Seguire la semplice guida per la configurazione del processo cron: Fase 2 Creazione del certificato e installazione sul server. Di tutto questo si occuperà una applicazione che si chiama certbot. $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt install python-certbot-apache $ sudo certbot --apache -d ol3.duckdns.org -d www.ol3.duckdns.org Fase 3 Esporre il servizio https sulla rete pubblica. Aprire o reindirizzare la porta 443 verso l'host sul quale si è fatta la configurazione di certbot dal proprio router. Il certificato di certbot è valido per novanta giorn

                                          JHipster - Uso base

                                          Cosa è JHipster è un "generatore di applicazioni" che fornisce tutto lo stack necessario ad implementare una applicazione web e/o a microservizi basata su Spring Boot e AngularJs. E' dotato di un marketplace di componenti già pronte: https://www.jhipster.tech/#modules E' dotato di uno strumento web per la modellazione dello schema E-R: https://start.jhipster.tech/jdl-studio/ Prerequisiti - Java 8  - Node.js (usare la versione LTS 64-bit) - NPM viene installato con Node.js ma va aggiornato      $ npm install -g npm - Per usare il JHipster Marketplace, installare Yeoman:       $ npm install -g yo Uso base Gli step, presi dal sito ufficiale sono questi: 1. Installare JHipster:       $ npm install -g generator-jhipster Nota: per installare una versione specifica del generator:   $ npm install -g generator-jhipster@6.0.5 2. Crea una nuova directory ed entra dentro questa:   $ mkdir myApp   $ cd M yApp 3. Eseguire JHipster e