Tere kÔigile! Siin on meie teise postituse seeria, kus nÀitame, kuidas juurutada tÀnapÀevaseid veebirakendusi Red Hat OpenShiftis.

Eelnevas postituses kĂ€sitlesime veidi uue S2I (source-to-image) builder-pildi vĂ”imalusi, mis on mĂ”eldud tĂ€napĂ€evaste veebirakenduste kogumiseks ja juurutamiseks OpenShifti platvormil. Toona huvitusime rakenduse kiirest juurutamisest, tĂ€na vaatame aga, kuidas kasutada S2I pilti âpuhtaâ builder-pildina ja kombineerida seda seotud OpenShift'i kogumistega.
Puhas builder-pilt
Kuidas me esimeses osas mainisime, on enamikul tĂ€napĂ€evastest veebirakendustest nii-öelda kogumise etapp, kus tavaliselt teostatakse selliseid toiminguid nagu koodi transpileerimine, mitme faili ĂŒhendamine ja minimeerimine. Saadud failid â staatiline HTML, JavaScript ja CSS â paigutatakse vĂ€ljundkausta. Selle kausta asukoht sĂ”ltub tavaliselt sellest, milliseid kogumise tööriistu kasutatakse, ja React'i puhul on see kaust ./build (naaseme selle kĂŒsimuse juurde lĂ€hemal ajal).
Source-to-Image (S2I)
Selles postituses ei kÀsitleme teemat "mis on S2I ja kuidas seda kasutada" (lisaks sellele saab lugeda ), kuid on oluline selgelt mÔista kahte etappi, et mÔista, mida Web App Builderi pilt teeb.
KokkuvÔtte etapp (assemble phase)
KokkuvÔtte etapp on oma olemuselt vÀga sarnane sellele, mis juhtub, kui kÀivitate docker build ja saate uue Docker-pildi. Seega tekib see etapp OpenShift platvormil kokkupaneku kÀivitamisel.
Web App Builderi pildi puhul vastutab teie rakenduse sĂ”ltuvuste installimise ja kokkupaneku kĂ€ivitamise eest . Vaikimisi kasutab builder-pilt npm run build kĂ€su, kuid seda saab ĂŒmber mÀÀrata keskkonnamuutuja NPM_BUILD kaudu.
Nagu varem mainitud, sĂ”ltub valmis, juba kokku pandud rakenduse asukoht kasutatavatest tööriistadest. NĂ€iteks Reacti puhul asub see kaustas ./build, Angulari rakenduste puhul aga kaustas project_name/dist. Ja nagu eelmisel postitusel nĂ€idatud, saab vaikimisi mÀÀratud output-katalooge, mis on build, ĂŒle kirjutada keskkonnamuutujaga OUTPUT_DIR. Kuna output-kausta asukoht sĂ”ltub raamistikust, kopeerite lihtsalt genereeritud vĂ€ljundi standardkausta, see on /opt/apt-root/output. See on oluline arusaamiseks kĂ€esoleva artikli jĂ€rgnevast osast, aga nĂŒĂŒd vaatame kiirelt jĂ€rgmise etapi â kĂ€ivitamise (run phase) â ĂŒle.
KĂ€ivitamise etapp (run phase)
See etapp algab, kui uue pildi jaoks, mis loodi assamblee etapis, tehakse docker run kÀsk. See toimub samuti OpenShift platvormil juurutamisel. Vaikimisi kasutab statilise sisu teenindamiseks, mis asub eespool nimetatud standardse output-katalooge.
See meetod sobib rakenduste kiireks juurutamiseks, kuid tegelikult ei soovitata staatilise sisu sellisel viisil teenindada. Kuna me tegelikult teenindame ainult staatilist sisu, pole meie Node.js pildi sees installimine vajalik â piisab veebiserverist.
TeisisĂ”nu, ehitamisel vajame ĂŒhte ja tĂ€itmisel â teist. Sellises olukorras tulevad kasuks seotud ehitused (chained builds).
Seotud ehitused (chained builds)
Siin on, mida kirjutatakse OpenShift'i dokumentatsioonis:
âKaks ehitust saab omavahel siduda, kusjuures ĂŒks neist genereerib kompileeritud ĂŒksuse ja teine paigutab selle ĂŒksuse eraldi pildile, mida kasutatakse selle ĂŒksuse kĂ€itamiseks.â
Teiste sÔnadega, me saame kasutada Web App Builder pildil meie ehituse kÀitamiseks ja seejÀrel kasutada veebiserveri pilti, nÀiteks NGINX-i, et teenindada meie sisu.
Nii saame rakendada Web App Builder pilti kui "puhtat" builder'it ja omada samal ajal vÀikese suurusega kÀituspilti.
NĂŒĂŒd vaatame seda konkreetse nĂ€ite pĂ”hjal.
Treeninguks kasutame , loodud kÀsurea tööriista create-react-app abil.
Kogume kÔik kokku meie abiga .
Vaatame seda faili lÀhemalt ja alustame parameetrite osast.
parameters:
- name: SOURCE_REPOSITORY_URL
description: Rakenduse allika URL
displayName: Allika URL
required: true
- name: SOURCE_REPOSITORY_REF
description: Rakenduse haru nimi
displayName: Allika haru
value: master
required: true
- name: SOURCE_REPOSITORY_DIR
description: Rakenduse asukoht allika repos
displayName: Allika kataloog
value: .
required: true
- name: OUTPUT_DIR
description: Koostatud staatiliste failide asukoht teie veebirakenduste koostajana
displayName: VĂ€ljund kataloog
value: build
required: false
Siin on kĂ”ik ĂŒsna selge, kuid tasub tĂ€helepanu pöörata parameetrile OUTPUT_DIR. Meie nĂ€ite React-rakenduse puhul ei pea muretsema, kuna React kasutab vĂ€ljundikaustana vaikevÀÀrtust, kuid Angulari vĂ”i millegi muu puhul tuleb see parameeter vastavalt muuta.
NĂŒĂŒd vaatame ImageStreamide sektsiooni.
- apiVersion: v1
kind: ImageStream
metadata:
name: react-web-app-builder // 1
spec: {}
- apiVersion: v1
kind: ImageStream
metadata:
name: react-web-app-runtime // 2
spec: {}
- apiVersion: v1
kind: ImageStream
metadata:
name: web-app-builder-runtime // 3
spec:
tags:
- name: latest
from:
kind: DockerImage
name: nodeshift/ubi8-s2i-web-app:10.x
- apiVersion: v1
kind: ImageStream
metadata:
name: nginx-image-runtime // 4
spec:
tags:
- name: latest
from:
kind: DockerImage
name: 'centos/nginx-112-centos7:latest'
Vaata kolmandat ja neljandat pilti. Need on mÔlemad mÀÀratletud kui Docker-pildid ja on selgelt nÀhtav, kust need tulevad.
Kolmas pilt on web-app-builder ja see pÀrineb nodeshift/ubi8-s2i-web-app versiooniga 10.x. .
Neljas on NGINX pilt (versioon 1.12) versiooniga latest. .
NĂŒĂŒd vaatame kahte esimest pilti. Need on mĂ”lemad alguses tĂŒhjad ja luuakse ainult ehitusetapis (build phase). Esimene pilt â react-web-app-builder â saab olema assemblimise etapi tulemus, mis liidab web-app-builder-runtime pildi ja meie lĂ€htekoodi. Just seetĂ”ttu olime selle pildi nime kirjutanud "-builder".
Teine pilt â react-web-app-runtime â on nginx-image-runtime'i ja mĂ”nede failide kombinatsioon, mis pĂ€rinevad react-web-app-builder pildist. See pilt kasutatakse samuti juurutamisel ning see sisaldab ainult meie rakenduse veebiserverit ja staatilist HTML-i, JavaScripti ja CSS-i.
Kas see on keeruline? Vaatame nĂŒĂŒd ehituskonfiguratsioone, siis saab veidi arusaadavamaks.
Meie mallis on kaks ehituskonfiguratsiooni. Siin on neist esimene, mis on ĂŒsna standartne:
apiVersion: v1
kind: BuildConfig
metadata:
name: react-web-app-builder
spec:
output:
to:
kind: ImageStreamTag
name: react-web-app-builder:latest // 1
source: // 2
git:
uri: ${SOURCE_REPOSITORY_URL}
ref: ${SOURCE_REPOSITORY_REF}
contextDir: ${SOURCE_REPOSITORY_DIR}
type: Git
strategy:
sourceStrategy:
env:
- name: OUTPUT_DIR // 3
value: ${OUTPUT_DIR}
from:
kind: ImageStreamTag
name: web-app-builder-runtime:latest // 4
incremental: true // 5
type: Source
triggers: // 6
- github:
secret: ${GITHUB_WEBHOOK_SECRET}
type: GitHub
- type: ConfigChange
- imageChange: {}
type: ImageChange
Nagu nĂ€ha, ĂŒtleb mĂ€rgistuse 1 rida, et selle ehituse tulemus paigutatakse just sellesse react-web-app-builder pilti, mida me varem ImageStreamide jaotises nĂ€gime.
MĂ€rgitud rida 2 ĂŒtleb, kust koodi vĂ”tta. Meie puhul on see git-repositoorium, samas kui asukoht, ref ja konteksti kaust on mÀÀratud parameetritega, mida oleme juba varem nĂ€inud.
MĂ€rgitud rida 3 â see on see, mida oleme juba nĂ€inud jaotises parameetrid. See lisab keskkonnamuutuja OUTPUT_DIR, mis meie nĂ€ites on igual to build.
MĂ€rgitud rida 4 ĂŒtleb kasutada pilti web-app-builder-runtime, mida me oleme juba nĂ€inud jaotises ImageStream.
MĂ€rgitud rida 5 ĂŒtleb, et soovime kasutada inkrementeerimist, kui S2I-pilt seda toetab, ja Web App Builder â toetab. Esmase kĂ€ivitamise ajal, pĂ€rast koostamisfaasi lĂ”petamist, salvestab pilt kausta node_modules arhiivifaili. Siis jĂ€rgmistel kĂ€ivitustel lihtsalt dekompresseerib pilt selle kausta, et vĂ€hendada koostamise kestust.
Ja lĂ”puks, mĂ€rgitud rida 6 â see on lihtsalt mĂ”ned kĂ€ivitajad, et koostamine algaks automaatselt, ilma kĂ€sitsemise sekkumiseta, kui midagi muutub.
Ăldiselt on see ĂŒsna standardne koostamisconfig.
NĂŒĂŒd vaatame teist koostamisseadet. See on vĂ€ga sarnane esimesele, kuid seal on ĂŒks oluline erinevus.
apiVersion: v1
kind: BuildConfig
metadata:
name: react-web-app-runtime
spec:
output:
to:
kind: ImageStreamTag
name: react-web-app-runtime:latest // 1
source: // 2
type: Image
images:
- from:
kind: ImageStreamTag
name: react-web-app-builder:latest // 3
paths:
- sourcePath: /opt/app-root/output/. // 4
destinationDir: . // 5
strategy: // 6
sourceStrategy:
from:
kind: ImageStreamTag
name: nginx-image-runtime:latest
incremental: true
type: Source
triggers:
- github:
secret: ${GITHUB_WEBHOOK_SECRET}
type: GitHub
- type: ConfigChange
- type: ImageChange
imageChange: {}
- type: ImageChange
imageChange:
from:
kind: ImageStreamTag
name: react-web-app-builder:latest // 7
Nii, teine kogumiskonfiguratsioon on react-web-app-runtime, ja see algab ĂŒsna standardina.
MĂ€rgil 1 ei ole midagi uut â see ĂŒtleb lihtsalt, et kogumise tulemus salvestatakse react-web-app-runtime pildile.
MĂ€rgisest 2 rida, nagu ka eelnevas konfiguratsioonis, nĂ€itab, kust lĂ€htekoodi vĂ”tta. Kuid pidage meeles, et siin rÀÀgime, et see vĂ”etakse pildist. Ja just sellest pildist, mille me just loome â react-web-app-builder (mille oleme mÀÀranud mĂ€rgis 3). Failid, mida soovime kasutada, asuvad pildi sees ja nende asukoht seal on mÀÀratud mĂ€rgis 4, meie puhul see on /opt/app-root/output/. Kui mĂ€letate, siis just sinna laaditakse failid, mis genereeritakse meie rakenduse kogumise tulemuste pĂ”hjal.
Sihtkaust, mille mÀÀrasime mĂ€rgis 5 â on lihtsalt praegune kataloog (kĂ”ik see, meenutame, kĂ€ib mingisuguse maagilise asja nimega OpenShift sees, mitte teie kohalikus arvutis).
Jaotises strategy â rida, millel on mĂ€rgis 6 â nĂ€eb samuti vĂ€lja nagu esimene kogumiskonfiguratsioon. Ainult seekord kavandame kasutada nginx-image-runtime'i, mida oleme juba nĂ€inud jaos ImageStream.
LĂ”puks, rida, millel on mĂ€rgis 7 â on kĂ€ivitajate jaotis, mis aktiveerib selle kogumise igal korral, kui react-web-app-builder pilt muutub.
Tegu on muidu ĂŒsna standardse juurutamissektori konfiguratsiooniga ning hĂ”lmab ka teenuseid ja marsruute, kuid me ei sĂŒvene sellesse. Pange tĂ€hele, et juurutatav pilt on react-web-app-runtime.
Rakenduse juurutamine
Nii et pÀrast seda, kui oleme vaadanud ƥablooni, vaatame, kuidas seda rakenduse juurutamiseks kasutada.
Me kasutame OpenShift'i kliendi tööriista nimega oc, et juurutada meie ƥabloon:
$ find . | grep openshiftio | grep application | xargs -n 1 oc apply -f
$ oc new-app --template react-web-app -p SOURCE_REPOSITORY_URL=https://github.com/lholmquist/react-web-app
Esimene kĂ€sk ĂŒlaltoodud ekraanil on ekslikult inseneritehniline viis ĆĄablooni leidmiseks ./openshiftio/application.yaml.
Teine kÀsk loob lihtsalt uue rakenduse selle ƥablooni pÔhjal.
PÀrast nende kÀskude tÀitmist nÀeme, et meil on kaks koostamist:

Ja tagasipöördudes Overview ekraanile, nÀeme jooksva pod'i:

Linki klÔpsates jÔuame meie rakendusele, mis on vaikesÀttega React App leht:

TĂ€iend 1
Angulari fÀnnide jaoks on meil ka .
Mall on sama, vÀlja arvatud muutuja OUTPUT_DIR.
Lisa 2
Selles artiklis kasutasime veebiserverina NGINX-i, kuid selle saab hÔlpsasti asendada Apache'iga, lihtsalt muutes mallifailis. jÀrgnevaga .
KokkuvÔte
Selle seeria esimeses osas nĂ€itasime, kuidas kiiresti juurutada kaasaegseid veebirakendusi OpenShift platvormil. TĂ€na vaatame, mida teeb Veebirakenduse pilt ja kuidas seda saab ĂŒhendada puhta veebiserveriga nagu NGINX, kasutades seotud ehitusi (chained build), et korraldada rakenduste ehitus rohkem tootmistingimustele sobivalt. Seeria jĂ€rgmises, viimases artiklis nĂ€itame, kuidas OpenShiftis kĂ€ivitada arendusserver oma rakenduse jaoks ja tagada kohapealsete ja eemalsete failide sĂŒnkroonimine.
Selle seeria artiklite sisu
- Osa 1: ;
- Osa 2: kuidas rakendada uut S2I pilti koos juba olemasoleva HTTP-serveri pildiga, nÀiteks NGINX, kasutades OpenShifti seotud ehitusi tootmisjuurutuse korraldamiseks;
- Osa 3: kuidas avada OpenShift platvormil arendusserver oma rakendusele ja sĂŒnkroonida see kohaliku failisĂŒsteemiga.
Lisavahendid
- Tasuta e-raamat .
- Teave .
Allikas: habr.com
