Tere kÔigile! See on meie teise postituse seeria, kus nÀitame, kuidas juurutada kaasaegseid veebirakendusi Red Hat OpenShiftis.

Eelmisel postitusel puudutasime veidi uue S2I (source-to-image) builder-ima vĂ”imalusi, mis on mĂ”eldud kaasaegsete veebirakenduste kogumiseks ja juurutamiseks OpenShift platvormil. Sel korral keskendume kiire juurutamise teemale, kuid tĂ€na vaatame, kuidas kasutada S2I-ima âpuhtaâ builder-ima ja ĂŒhendada seda seotud OpenShifti kogumitega.
Puhas builder-ima
Kuidas mainisime esimeses osas, on enamikul kaasaegsetest veebirakendustest nn kogumisetapp, kus tavaliselt viiakse lĂ€bi sellised toimingud nagu koodi transpileerimine, mitme faili ĂŒhendamine ja minifikatsioon. Neid toiminguid tulemusena saadud failid â need on staatiline HTML, JavaScript ja CSS â paigutatakse vĂ€ljundkausta. Selle kausta asukoht sĂ”ltub tavaliselt kasutatavatest kogumistööriistadest ja Reacti puhul on see kaust ./build (tĂ€iendame seda teemat allpool).
Source-to-Image (S2I)
Selles postituses me ei kĂ€sitle teemat âmis on S2I ja kuidas seda kasutadaâ (selle kohta saab rohkem lugeda ), kuid on oluline selgelt mĂ”ista selle protsessi kahte etappi, et mĂ”ista, mida teeb Web App Builder'i ima.
Kogumise etapp (assemble phase)
Kogumise etapp on oma olemuselt vÀga sarnane sellele, mis juhtub, kui kÀivitate docker build'i ja saate tulemuseks uue Docker-i ima. SeetÔttu toimub see etapp OpenShift platvormil kogumise kÀivitamisel.
Web App Builder'i ima puhul vastutab teie rakenduse sĂ”ltuvuste installimise ja kogumise kĂ€ivitamise eest . Vaikimisi kasutab builder-ima konstruktsiooni npm run build, kuid seda saab ĂŒletada keskkonnamuutujaga NPM_BUILD.
Nagu varem mainitud, sĂ”ltub valminud, juba kokku pandud rakenduse asukoht kasutatavadest tööriistadest. NĂ€iteks Reacti puhul on see kaust ./build, Angulari rakenduste puhul aga kaust project_name/dist. Ja nagu eelmises postituses nĂ€idatud, saab vĂ€ljundikausta asukohta, mis on vaikimisi mÀÀratud kui build, ĂŒle kirjutada keskkonnamuutuja OUTPUT_DIR kaudu. Kuna vĂ€ljundikausta asukoht erineb raamistikust raamistikku, kopeerite lihtsalt genereeritud vĂ€ljundi standardkausta kujunduses, nimelt /opt/apt-root/output. See on oluline edasise osa mĂ”istmiseks, aga vahepeal vaatame kiirelt jĂ€rgmist etappi â kĂ€ivitamine (run phase).
KĂ€ivitamise etapp (run phase)
See etapp tekib, kui uue kujundi, mis on loodud assambleerimise etapis, kutsutakse vĂ€lja docker run. See toimub ka avamisel OpenShift platvormil. Vaikimisi kasutab staatilise sisu teenindamiseks, mis asub ĂŒlaltoodud standardse vĂ€ljundikausta.
See meetod on hea rakenduste kiireks juurutamiseks, kuid tegelikult ei ole soovitatav staatilist sisu sellisel moel teenindada. Kuna me teenindame ainult staatilist sisu, ei ole meie kujunduses sisalduv Node.js vajalik â piisab veebiserverist.
TeisisĂ”nu, kogumisel on meil ĂŒks, kĂ€ivitamisel aga teine. Sellises olukorras tulevad kasuks seotud kogumid (chained builds).
Seotud kogumid (chained builds)
Siin on, mida öeldakse OpenShift dokumentatsioonis:
âKaks kogumit saab omavahel siduda, kusjuures ĂŒks neist genereerib kompileeritud ĂŒksuse ja teine paigutab selle ĂŒksuse eraldi kujundusse, mida kasutatakse selle ĂŒksuse kĂ€itamiseks.â
TeisisÔnu, me vÔime kasutada Web App Builder'i kujundit, et kÀivitada meie kogumine, ja seejÀrel kasutada veebiserveri kujundit, nÀiteks NGINX-i, et teenindada meie sisu.
Seega saame kasutada Web App Builder'i kujundit kui âpuhastâ builder'it ja samal ajal omada vĂ€ikese suurusega runtime kujundit.
NĂŒĂŒd kĂ€sitleme seda konkreetses nĂ€ites.
Treeninguks kasutame , mis on loodud kÀsureatööriista create-react-app abil.
Koguda kÔik kokku aitab meil .
Vaatame seda faili lÀhemalt ja alustame parameetrite jaotusest.
parameetrid:
- nimi: SOURCE_REPOSITORY_URL
kirjeldus: Rakenduse allika URL
kuvamisnimi: Allika URL
nÔutav: tÔene
- nimi: SOURCE_REPOSITORY_REF
kirjeldus: Rakenduse haru nimi
kuvamisnimi: Allika haru
vÀÀrtus: master
nÔutav: tÔene
- nimi: SOURCE_REPOSITORY_DIR
kirjeldus: Rakenduse asukoht allika repositooriumis
kuvamisnimi: Allika kaust
vÀÀrtus: .
nÔutav: tÔene
- nimi: OUTPUT_DIR
kirjeldus: Koht kompileeritud staatiliste failide jaoks teie veebirakenduse koosturi seest
kuvamisnimi: VĂ€ljundi kaust
vÀÀrtus: build
nÔutav: vale
Siin on kĂ”ik ĂŒsna arusaadav, kuid vÀÀrtus OUTPUT_DIR parameetrit tuleks tĂ€helepanelikult vaadata. Meie nĂ€ites React-rakenduse puhul ei pea me muretsema, kuna React kasutab vĂ€ljundikaustana vaikimisi vÀÀrtust, kuid Angulari vĂ”i muu puhul tuleb see parameeter vastavalt muuta.
NĂŒĂŒd vaatame ImageStream-ide jaotust.
- apiVersioon: v1
liik: ImageStream
metadata:
nimi: react-web-app-builder // 1
spec: {}
- apiVersioon: v1
liik: ImageStream
metadata:
nimi: react-web-app-runtime // 2
spec: {}
- apiVersioon: v1
liik: ImageStream
metadata:
nimi: web-app-builder-runtime // 3
spec:
sildid:
- nimi: latest
from:
liik: DockerImage
nimi: nodeshift/ubi8-s2i-web-app:10.x
- apiVersioon: v1
liik: ImageStream
metadata:
nimi: nginx-image-runtime // 4
spec:
sildid:
- nimi: latest
from:
liik: DockerImage
nimi: 'centos/nginx-112-centos7:latest'
Vaadake kolmandat ja neljandat pilti. Need on mÔlemad mÀÀratletud kui Docker-pildid ja on selgelt nÀha, kust nad pÀrinevad.
Kolmas pilt on web-app-builder ja see pÀrineb nodeshift/ubi8-s2i-web-app koos sildiga 10.x .
Neljandaks on NGINX (versioon 1.12) pilt koos sildiga latest .
NĂŒĂŒd vaatame kahte esimest pilti. Need on mĂ”lemad alguses tĂŒhjad ja luuakse ainult koostamisetapis (build phase). Esimene pilt â react-web-app-builder â saab olema koosseisu tulemuseks, mis ĂŒhendab web-app-builder-runtime pildi ja meie lĂ€htekoodi. SeetĂ”ttu lisasime sellele pildile nime lĂ”ppu â-builderâ.
Teine pilt â react-web-app-runtime â saab olema nginx-image-runtime ja mĂ”ne faili ĂŒhendamise tulemus react-web-app-builder pildist. See pilt kasutatakse samuti juurutamisel ja sisaldab ainult veebiserverit ning meie rakenduse staatilist HTML-i, JavaScripti ja CSS-i.
JĂ€rsk? Vaatame nĂŒĂŒd koostamiskonfiguratsioone ja see muutub veidi selgemaks.
Meie mallel on kaks koostamiskonfiguratsiooni. Siin on neist esimene ja see on ĂŒsna tavaline:
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
Kuidas nĂ€eme, et 1. mĂ€rgiga rida ĂŒtleb, et selle kompileerimise tulemus paigutatakse just sellesse pildi react-web-app-builder, mida me varem nĂ€gime ImageStreamide jagu.
2. mĂ€rgiga rida ĂŒtleb, kust koodi vĂ”tta. Meie puhul on see git-repositoorium ning asukoht, ref ja kontekstikaust on mÀÀratletud parameetritega, mida oleme juba varem nĂ€inud.
3. mĂ€rgiga rida â see on see, mida me oleme juba nĂ€inud parameetrite sektsioonis. See lisab keskkonnamuutuja OUTPUT_DIR, mis meie nĂ€ites on vĂ”rdundus build.
4. mĂ€rgiga rida ĂŒtleb kasutada pilti web-app-builder-runtime, mida me oleme juba nĂ€inud ImageStreamide sektsioonis.
5. mĂ€rgiga rida ĂŒtleb, et me tahame kasutada inkrementaalset kompileerimist, kui S2I-pilt seda toetab, ja Web App Builder toetab. Esimese kĂ€ivitamise ajal, pĂ€rast kokkupanekufaasi lĂ”petamist, salvestab pilt node_modules kausta arhivifaili. SeejĂ€rel jĂ€rgmisel kĂ€ivitamisel dekompresseerib pilt lihtsalt selle kausta, et lĂŒhendada ehituskestvust.
Ja lĂ”puks, 6. mĂ€rgiga rida â see on lihtsalt mĂ”ned triggarid, et kompileerimist saaks automaatselt alustada, ilma kĂ€sitsi sekkumiseta, kui midagi muutub.
ĂhesĂ”naga, see on ĂŒsna tavaline kompileerimise konfiguratsioon.
NĂŒĂŒd vaatame teist kompileerimiskonfiguratsiooni. See on vĂ€ga sarnane esimesele, kuid 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\/.
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 et, teine konfiguratsioon on react-web-app-runtime ja see algab ĂŒsna tavapĂ€raselt.
MĂ€rgi 1 real pole midagi uut â see ĂŒtleb lihtsalt, et koostamise tulemus pannakse react-web-app-runtime pildile.
MÀrgi 2 real, nagu ka eelnevas konfiguratsioonis, nÀidatakse, kust lÀhtekood vÔtta. Kuid pöörake tÀhelepanu, et siin öeldakse, et see vÔetakse pildist. Ja see pilt, millest me just rÀÀkisime, on react-web-app-builder (mille oleme nÀidanud mÀrgi 3 real). Failid, mida soovime kasutada, asuvad pildi sees ja nende asukoht seal mÀÀratakse mÀrgi 4 real, meie puhul on see \/opt\/app-root\/output\/. Kui mÀletate, just sinna pannakse failid, mis genereeritakse meie rakenduse koostamisprotsessi tulemusena.
MÀrgi 5 real mÀÀratud sihtkaust on lihtsalt praegune kataloog (kÔik see, meenutame, töötab mingisugustes maagilistes asjades nimega OpenShift, mitte teie kohalikel arvutitel).
Jaotises strategy â mĂ€rgi 6 real â on samuti sarnane esimesele koostamise konfiguratsioonile. Ainult seekord kavatseme kasutada nginx-image-runtime'i, mida oleme juba nĂ€inud ImageStreami jaotises.
LÔpuks, mÀrgi 7 real on see triggereid sektsioon, mis aktiveerib selle koostamise iga kord, kui react-web-app-builder pilt muutub.
Muus osas sisaldab see mall ĂŒsna tavapĂ€rast juurutamise konfiguratsiooni ning ka asju, mis puudutavad teenuseid ja marsruute, kuid me ei sĂŒvene sellesse. Pange tĂ€hele, et juurutatav pilt on react-web-app-runtime.
Rakenduse juurutamine
Nii et vaatame mallile peale, kuidas seda rakenduse juurutamiseks kasutada.
Saame kasutada OpenShifti klienditööriista nimega oc, et juurutada meie malli:
$ 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
Eespool oleval ekraanipildil on esimene kÀsk tahtlikult inseneritehniline viis mallide leidmiseks.\/openshiftio\/application.yaml.
Teine kÀsk loob lihtsalt uue rakenduse selle malli alusel.
PÀrast nende kÀskude töötlemist nÀeme, et meil on kaks koostamist:

Ja tagasi ĂŒlevaate ekraanile nĂ€eme, et pod on kĂ€ivitatud:

Klikkige lingil ja jÔuame meie rakendusse, mis on vaikimisi React Appi leht:

Lisa 1
Angulari armastajatele on meil samuti .
Mall siin on sama, vÀlja arvatud muutuja OUTPUT_DIR.
Lisaosa 2
Selles artiklis kasutasime veebiserverina NGINX-i, kuid selle saab ĂŒsna lihtsalt asendada Apache'iga, kui lihtsalt muudate mallifailis. . Tundub, et .
KokkuvÔte
Selle seeria esimeses osas nĂ€itasime, kuidas kiiresti kĂ€ivitada kaasaegseid veebirakendusi OpenShift'i platvormil. TĂ€na vaatleme, mis teeb Web App'i pildi ja kuidas seda saab kombineerida puhta veebiserveri, nĂ€iteks NGINX-iga, kasutades seotud kogumisi (chained build), et korraldada tootmisoludele sobilikumat rakenduste kogumist. Seeria jĂ€rgmises ja viimases artiklis nĂ€itame, kuidas kĂ€ivitada OpenShift'is arendusserver oma rakendusele ja tagada lokaalsete ja kaugfailide sĂŒnkroniseerimine.
Selle seeria artiklite sisu
- Osa 1: ;
- Osa 2: kuidas kasutada uut S2I pilti koos olemasoleva HTTP-serveri pildiga, nÀiteks NGINX-iga, kasutades OpenShift'i seotud kogumisi, et korraldada tootmispaigaldust;
- Osa 3: kuidas kĂ€ivitada OpenShift'i platvormil arendusserver oma rakendusele ja sĂŒnkroniseerida see kohaliku failisĂŒsteemiga.
Lisainfo
- Tasuta e-raamat .
- Teave .
Allikas: habr.com
