Nykyaikaiset sovellukset OpenShiftissä, osa 2: ketjutetut koontiversiot
Hei kaikki! Tämä on sarjamme toinen viesti, jossa näytämme, kuinka modernit verkkosovellukset otetaan käyttöön Red Hat OpenShiftissä.
Edellisessä postauksessa käsittelimme hieman uuden S2I (source-to-image) -muodostinkuvan ominaisuuksia, joka on suunniteltu nykyaikaisten verkkosovellusten rakentamiseen ja käyttöönottoon OpenShift-alustalla. Sitten kiinnostuimme sovelluksen nopeasta käyttöönotosta, ja tänään tarkastelemme, kuinka S2I-kuvaa voidaan käyttää "puhtaana" rakennuskuvana ja yhdistää se siihen liittyviin OpenShift-kokoonpanoihin.
Puhdas rakentajan kuva
Kuten mainittiin osassa XNUMX, useimmissa nykyaikaisissa verkkosovelluksissa on niin kutsuttu rakennusvaihe, joka tyypillisesti suorittaa toimintoja, kuten koodin transpilaatiota, useiden tiedostojen yhdistämistä ja pienentämistä. Näiden toimintojen tuloksena saadut tiedostot - ja tämä on staattinen HTML, JavaScript ja CSS - tallennetaan tuloskansioon. Tämän kansion sijainti riippuu yleensä siitä, mitä koontityökaluja käytetään, ja Reactille tämä on ./build-kansio (palaamme tähän tarkemmin alla).
Lähteestä kuvaksi (S2I)
Tässä viestissä emme kosketa aihetta "mikä on S2I ja miten sitä käytetään" (voit lukea lisää tästä täällä), mutta on tärkeää tehdä selväksi tämän prosessin kaksi vaihetta, jotta ymmärrät, mitä Web App Builder -kuva tekee.
Kokoamisvaihe
Kokoonpanovaihe on luonteeltaan hyvin samanlainen kuin mitä tapahtuu, kun suoritat Docker buildin ja päädyt uuteen Docker-kuvaan. Vastaavasti tämä vaihe tapahtuu aloitettaessa koontiversio OpenShift-alustalla.
Web App Builder -otoksen tapauksessa se on vastuussa sovelluksesi riippuvuuksien asentamisesta ja koontiversion suorittamisesta. koota käsikirjoitus. Oletusarvoisesti rakennustyökalun näköistiedosto käyttää npm run build -rakennetta, mutta tämä voidaan ohittaa ympäristömuuttujan NPM_BUILD avulla.
Kuten aiemmin totesimme, valmiin, jo rakennetun sovelluksen sijainti riippuu käyttämistäsi työkaluista. Esimerkiksi Reactin tapauksessa tämä on ./build-kansio, ja Angular-sovelluksissa se on projektin_nimi/dist-kansio. Ja kuten edellisessä viestissä jo näytettiin, lähtöhakemiston sijainti, joka on asetettu oletuksena rakentamaan, voidaan ohittaa ympäristömuuttujan OUTPUT_DIR kautta. No, koska tuloskansion sijainti vaihtelee kehyksestä riippuen, kopioit luotu tulosteen kuvan vakiokansioon, nimittäin /opt/apt-root/output. Tämä on tärkeää tämän artikkelin loppuosan ymmärtämiseksi, mutta katsotaan nyt nopeasti seuraavaa vaihetta - suoritusvaihetta.
ajovaihe
Tämä vaihe tapahtuu, kun kokoonpanovaiheen aikana luodulle uudelle kuvalle tehdään kutsu Docker-ajolle. Sama tapahtuu, kun otetaan käyttöön OpenShift-alustalla. Oletus suorita komentosarja käyttää palvele moduulia palvelemaan yllä olevassa vakiotulostushakemistossa sijaitsevaa staattista sisältöä.
Tämä menetelmä sopii sovellusten nopeaan käyttöönottoon, mutta staattista sisältöä ei yleensä suositella tällä tavalla. No, koska todellisuudessa tarjoamme vain staattista sisältöä, emme tarvitse Node.js:ää asennettuna kuvamme sisään - verkkopalvelin riittää.
Toisin sanoen koottaessa tarvitsemme yhtä asiaa, kun suoritamme toisen. Tässä tilanteessa ketjutetut rakenteet ovat hyödyllisiä.
"Kaksi kokoonpanoa voidaan linkittää yhteen, joista toinen luo käännetyn kokonaisuuden ja toinen isännöi kokonaisuutta erillisessä kuvassa, jota käytetään kyseisen kokonaisuuden suorittamiseen."
Toisin sanoen voimme käyttää Web App Builder -kuvaa koontiversiomme suorittamiseen ja sitten käyttää verkkopalvelimen kuvaa, samaa NGINX:ää, sisältömme palvelemiseen.
Näin ollen voimme käyttää Web App Builder -kuvaa "puhtaan" rakennustyökaluna ja samalla meillä on pieni ajonaikainen kuva.
Katsotaanpa tätä tiedostoa yksityiskohtaisemmin ja aloitetaan parametrit-osiosta.
parameters:
- name: SOURCE_REPOSITORY_URL
description: The source URL for the application
displayName: Source URL
required: true
- name: SOURCE_REPOSITORY_REF
description: The branch name for the application
displayName: Source Branch
value: master
required: true
- name: SOURCE_REPOSITORY_DIR
description: The location within the source repo of the application
displayName: Source Directory
value: .
required: true
- name: OUTPUT_DIR
description: The location of the compiled static files from your web apps builder
displayName: Output Directory
value: build
required: false
Kaikki täällä on melko selvää, mutta kannattaa kiinnittää huomiota parametriin OUTPUT_DIR. Esimerkkimme React-sovelluksessa ei ole mitään huolestuttavaa, koska React käyttää oletusarvoa tuloskansiona, mutta Angularin tai jonkin muun tapauksessa tätä parametria on muutettava tarpeen mukaan.
Katso kolmatta ja neljättä kuvaa. Ne molemmat määritellään Docker-kuviksi, ja näet selvästi, mistä ne tulevat.
Kolmas kuva on web-app-builder ja se on peräisin nodeshift/ubi8-s2i-web-app-tunnisteesta 10.x. Docker-keskitin.
Neljäs on NGINX-kuva (versio 1.12), jossa on viimeisin tagi Docker-keskitin.
Katsotaan nyt kahta ensimmäistä kuvaa. Ne ovat molemmat tyhjiä alussa ja luodaan vasta rakennusvaiheen aikana. Ensimmäinen kuva, react-web-app-builder, on tulos kokoonpanovaiheesta, joka yhdistää web-app-builder-runtime-kuvan ja lähdekoodimme. Siksi lisäsimme tämän kuvan nimeen "-builder".
Toinen kuva - react-web-app-runtime - on tulos nginx-image-runtime-tiedoston ja joidenkin react-web-app-builder-kuvan tiedostojen yhdistämisestä. Tätä kuvaa käytetään myös käyttöönoton aikana, ja se sisältää vain sovelluksemme verkkopalvelimen ja staattisen HTML:n, JavaScriptin ja CSS:n.
Hämmentynyt? Katsotaanpa nyt koontikokoonpanoja ja se tulee hieman selkeämmäksi.
Mallissamme on kaksi koontikokoonpanoa. Tässä on ensimmäinen, ja se on melko vakio:
Kuten näet, rivi tunnisteella 1 sanoo, että tämän koontiversion tulos sijoitetaan samaan react-web-app-builder-kuvaan, jonka näimme hieman aiemmin ImageStreams-osiossa.
Rivi 2 kertoo, mistä koodi saa. Meidän tapauksessamme tämä on git-arkisto, ja sijainti, viite ja kontekstikansio määräytyvät parametrien mukaan, jotka olemme jo nähneet yllä.
Rivi, jonka nimi on 3, on se, mitä näimme jo parametriosiossa. Se lisää OUTPUT_DIR-ympäristömuuttujan, joka esimerkissämme on build.
Rivi, jonka nimi on 4, kehottaa käyttämään web-app-builder-runtime-kuvaa, jonka näimme jo ImageStream-osiossa.
Rivi 5 sanoo, että haluamme käyttää inkrementaalista koontiversiota, jos S2I-kuva tukee sitä ja Web App Builder -kuva tukee sitä. Ensimmäisellä käynnistyksellä, kun kokoonpanovaihe on suoritettu, kuva tallentaa node_modules-kansion arkistotiedostoon. Sitten seuraavissa ajoissa kuva yksinkertaisesti purkaa tämän kansion koontiajan lyhentämiseksi.
Ja lopuksi, rivi, jonka nimi on 6, on vain muutamia laukaisimia, jotka saavat koontiversion toimimaan automaattisesti ilman manuaalista puuttumista, kun jokin muuttuu.
Kaiken kaikkiaan tämä on melko vakiorakennekokoonpano.
Katsotaanpa nyt toista koontikokoonpanoa. Se on hyvin samanlainen kuin ensimmäinen, mutta siinä on yksi tärkeä ero.
Joten toinen koontikokoonpano on react-web-app-runtime, ja se alkaa melko vakiona.
Rivi, jonka nimi on 1, ei ole mikään uusi - se kertoo yksinkertaisesti, että koontitulos lisätään react-web-app-runtime-kuvaan.
Rivi 2, kuten edellisessä kokoonpanossa, osoittaa, mistä lähdekoodi saa. Mutta huomaa, että tässä sanomme, että se on otettu kuvasta. Lisäksi juuri luomastamme kuvasta - react-web-app-builderista (merkitty rivillä 3). Tiedostot, joita haluamme käyttää, ovat kuvan sisällä ja niiden sijainti siellä on asetettu riville 4, meidän tapauksessamme se on /opt/app-root/output/. Jos muistat, tähän tallennetaan sovelluksemme rakentamisen tulosten perusteella luodut tiedostot.
Kohdekansio, joka on määritetty termissä tunnisteella 5, on yksinkertaisesti nykyinen hakemisto (tämä on kaikki, muista, että se toimii jossain taianomaisessa OpenShift-nimisessä esineessä, ei paikallisessa tietokoneessa).
Strategiaosio – rivillä 6 – on myös samanlainen kuin ensimmäinen koontikokoonpano. Vain tällä kertaa aiomme käyttää nginx-image-runtimea, jonka näimme jo ImageStream-osiossa.
Lopuksi rivi 7 on osa triggereistä, jotka aktivoivat tämän koontiversion aina, kun react-web-app-builder-kuva muuttuu.
Muuten tämä malli sisältää melko tavallisia käyttöönottokokoonpanoja sekä asioita, jotka liittyvät palveluihin ja reitteihin, mutta emme mene siihen liian yksityiskohtiin. Huomaa, että käyttöön otettava kuva on react-web-app-runtime-kuva.
Sovelluksen käyttöönotto
Joten nyt kun olemme tarkastelleet mallia, katsotaanpa, kuinka sitä käytetään sovelluksen käyttöönottoon.
Voimme käyttää OpenShift-asiakastyökalua nimeltä oc ottaaksemme käyttöön mallimme:
Tässä artikkelissa käytimme NGINX:ää verkkopalvelimena, mutta sen korvaaminen Apachella on melko helppoa, vaihda vain malli tiedostossa NGINX kuva päälle Apache-kuva.
Johtopäätös
Tämän sarjan ensimmäisessä osassa näytimme, kuinka modernit verkkosovellukset otetaan nopeasti käyttöön OpenShift-alustalla. Tänään tarkastelimme, mitä Web App -kuva tekee ja kuinka se voidaan yhdistää puhtaaseen verkkopalvelimeen, kuten NGINX, käyttämällä ketjutettuja koontiversioita tuotantovalmimman sovelluksen koontiversion luomiseksi. Tämän sarjan seuraavassa ja viimeisessä artikkelissa näytämme, kuinka voit käyttää kehityspalvelinta sovelluksellesi OpenShiftissä ja varmistaa paikallisten ja etätiedostojen synkronoinnin.
Osa 2: Uuden S2I-kuvan käyttäminen olemassa olevan HTTP-palvelinkuvan, kuten NGINX:n, kanssa käyttämällä siihen liittyviä OpenShift-kokoonpanoja tuotantokäyttöön;
Osa 3: kuinka käyttää kehityspalvelinta sovelluksellesi OpenShift-alustalla ja synkronoida se paikallisen tiedostojärjestelmän kanssa.