Moderne aplikacije na OpenShift, dio 2: ulančane gradnje
Zdravo svima! Ovo je drugi post u našoj seriji u kojem pokazujemo kako implementirati moderne web aplikacije na Red Hat OpenShift.
U prethodnom postu malo smo se dotakli mogućnosti novog S2I (source-to-image) builder slike, koji je dizajniran za izgradnju i implementaciju modernih web aplikacija na OpenShift platformi. Zatim nas je zanimala tema brzog postavljanja aplikacije, a danas ćemo pogledati kako koristiti S2I sliku kao “čistu” sliku graditelja i kombinirati je sa srodnim OpenShift sklopovima.
Čista slika graditelja
Kao što smo spomenuli u prvom dijelu, većina modernih web aplikacija ima takozvanu fazu izrade, koja tipično izvodi operacije kao što su transpilacija koda, konkatenacija više datoteka i minifikacija. Fajlovi dobijeni kao rezultat ovih operacija - a to je statički HTML, JavaScript i CSS - pohranjuju se u izlaznu mapu. Lokacija ove fascikle obično zavisi od toga koji alati za pravljenje se koriste, a za React to će biti ./build folder (na to ćemo se vratiti detaljnije u nastavku).
Od izvora do slike (S2I)
U ovom postu se ne dotičemo teme „šta je S2I i kako ga koristiti“ (više o tome možete pročitati ovdje), ali važno je biti jasni u vezi sa dva koraka u ovom procesu da biste razumjeli šta radi slika Web App Builder-a.
Faza montaže
Faza montaže je po prirodi vrlo slična onome što se dešava kada pokrenete docker build i završite sa novom Docker slikom. Shodno tome, ova faza se javlja prilikom pokretanja gradnje na OpenShift platformi.
U slučaju slike Web App Builder, ona je odgovorna za instaliranje zavisnosti vaše aplikacije i pokretanje izgradnje. montaža skripte. Podrazumevano, slika graditelja koristi konstrukciju izgradnje npm run, ali to se može nadjačati kroz varijablu okruženja NPM_BUILD.
Kao što smo ranije rekli, lokacija gotove, već izgrađene aplikacije ovisi o tome koje alate koristite. Na primjer, u slučaju React-a ovo će biti ./build folder, a za Angular aplikacije to će biti project_name/dist folder. I, kao što je već prikazano u prethodnom postu, lokacija izlaznog direktorija, koja je po defaultu postavljena za izgradnju, može se nadjačati kroz varijablu okruženja OUTPUT_DIR. Pa, pošto se lokacija izlazne mape razlikuje od okvira do okvira, jednostavno kopirate generirani izlaz u standardni folder na slici, odnosno /opt/apt-root/output. Ovo je važno za razumijevanje ostatka ovog članka, ali za sada pogledajmo na brzinu sljedeću fazu - fazu pokretanja.
run faza
Ova faza se događa kada se izvrši poziv docker run-u na novoj slici kreiranoj tokom faze sklapanja. Isto se dešava kada se implementira na OpenShift platformi. Default pokrenuti skriptu koristi servisni modul za posluživanje statičkog sadržaja koji se nalazi u gornjem standardnom izlaznom direktoriju.
Ova metoda je dobra za brzo postavljanje aplikacija, ali se općenito ne preporučuje posluživanje statičnog sadržaja na ovaj način. Pa, pošto u stvarnosti opslužujemo samo statički sadržaj, ne trebamo Node.js instaliran unutar naše slike - web server će biti dovoljan.
Drugim riječima, pri sklapanju nam je potrebna jedna stvar, pri izvođenju nam je potrebna druga. U ovoj situaciji, lančane konstrukcije dobro dolaze.
"Dva sklopa mogu biti povezana zajedno, pri čemu jedan generiše kompajlirani entitet, a drugi hostuje taj entitet u zasebnoj slici koja se koristi za pokretanje tog entiteta."
Drugim riječima, možemo koristiti sliku Web App Builder-a za pokretanje naše izrade, a zatim koristiti sliku web servera, isti NGINX, za posluživanje našeg sadržaja.
Dakle, sliku Web App Builder-a možemo koristiti kao „čist“ graditelj i istovremeno imati malu runtime sliku.
Pogledajmo ovu datoteku detaljnije i počnimo s odjeljkom parametara.
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
Ovdje je sve prilično jasno, ali vrijedi obratiti pažnju na parametar OUTPUT_DIR. Za React aplikaciju u našem primjeru, nema razloga za brigu, budući da React koristi zadanu vrijednost kao izlaznu mapu, ali u slučaju Angulara ili nečeg drugog, ovaj parametar će se morati promijeniti po potrebi.
Pogledajte treću i četvrtu sliku. Obje su definirane kao Docker slike i možete jasno vidjeti odakle dolaze.
Treća slika je web-app-builder i dolazi iz nodeshift/ubi8-s2i-web-app označene 10.x na Docker čvorište.
Četvrta je NGINX slika (verzija 1.12) sa najnovijom uključenom oznakom Docker čvorište.
Pogledajmo sada prve dvije slike. Oba su prazna na početku i kreiraju se samo tokom faze izgradnje. Prva slika, react-web-app-builder, bit će rezultat koraka sastavljanja koji će kombinirati web-app-builder-runtime sliku i naš izvorni kod. Zato smo nazivu ove slike dodali "-builder".
Druga slika - react-web-app-runtime - će biti rezultat kombinovanja nginx-image-runtime i nekih datoteka sa slike react-web-app-builder. Ova slika će se također koristiti tokom implementacije i sadržavat će samo web server i statički HTML, JavaScript, CSS naše aplikacije.
Zbunjen? Sada pogledajmo konfiguracije izgradnje i biće malo jasnije.
Naš predložak ima dvije konfiguracije izrade. Evo prvog, i prilično je standardan:
Kao što možete vidjeti, linija s oznakom 1 kaže da će rezultat ove izrade biti smješten u istu sliku react-web-app-builder koju smo vidjeli malo ranije u odjeljku ImageStreams.
Linija označena sa 2 govori vam odakle da dobijete kod. U našem slučaju, ovo je git spremište, a lokacija, ref i kontekst folder su određeni parametrima koje smo već vidjeli gore.
Linija označena sa 3 je ono što smo već vidjeli u odjeljku parametara. Dodaje varijablu okruženja OUTPUT_DIR, koja je u našem primjeru build.
Linija označena sa 4 kaže da se koristi slika vremena izvođenja web-app-builder-a, koju smo već vidjeli u odjeljku ImageStream.
Linija označena 5 kaže da želimo da koristimo inkrementalnu gradnju ako je podržava S2I slika, a slika Web App Builder podržava. Prilikom prvog pokretanja, nakon što je faza sklapanja završena, slika će sačuvati fasciklu node_modules u arhivsku datoteku. Zatim, prilikom narednih pokretanja, slika će jednostavno raspakovati ovu fasciklu kako bi se smanjilo vreme izrade.
I na kraju, linija označena 6 je samo nekoliko pokretača za automatsko pokretanje izrade, bez ručne intervencije, kada se nešto promijeni.
Sve u svemu, ovo je prilično standardna konfiguracija izrade.
Sada pogledajmo drugu konfiguraciju izgradnje. Vrlo je sličan prvom, ali postoji jedna bitna razlika.
Dakle, druga konfiguracija izgradnje je react-web-app-runtime, i počinje prilično standardno.
Linija označena sa 1 nije ništa novo - ona jednostavno kaže da se rezultat izgradnje stavlja u react-web-app-runtime sliku.
Linija označena sa 2, kao iu prethodnoj konfiguraciji, označava odakle dobiti izvorni kod. Ali primijetite da ovdje govorimo da je preuzeto sa slike. Štaviše, sa slike koju smo upravo kreirali - iz react-web-app-builder (naznačenog u redu označenom 3). Datoteke koje želimo da koristimo nalaze se unutar slike i njihova lokacija je postavljena u liniji označenoj sa 4, u našem slučaju to je /opt/app-root/output/. Ako se sjećate, ovdje se pohranjuju datoteke generirane na osnovu rezultata izgradnje naše aplikacije.
Odredišni folder naveden u terminu sa oznakom 5 je jednostavno trenutni direktorijum (ovo je sve, zapamtite, radi unutar neke magične stvari koja se zove OpenShift, a ne na vašem lokalnom računaru).
Odjeljak strategije – linija označena 6 – također je sličan prvoj konfiguraciji izgradnje. Samo ovaj put ćemo koristiti nginx-image-runtime, što smo već vidjeli u odjeljku ImageStream.
Konačno, linija označena 7 je dio okidača koji će aktivirati ovu konstrukciju svaki put kada se promijeni slika react-web-app-builder.
Inače, ovaj predložak sadrži prilično standardnu konfiguraciju implementacije, kao i stvari koje se odnose na usluge i rute, ali nećemo ulaziti previše u detalje. Imajte na umu da je slika koja će biti raspoređena slika react-web-app-runtime.
Primena aplikacije
Sada kada smo pogledali predložak, hajde da vidimo kako ga koristiti za implementaciju aplikacije.
Možemo koristiti OpenShift klijentski alat koji se zove oc za implementaciju našeg predloška:
U ovom članku smo koristili NGINX kao web server, ali ga je prilično lako zamijeniti Apacheom, samo promijenite predložak u datoteci NGINX slika na Apache slika.
zaključak
U prvom dijelu ove serije pokazali smo kako brzo implementirati moderne web aplikacije na OpenShift platformi. Danas smo pogledali šta radi slika Web aplikacije i kako se može kombinovati sa čistim veb serverom kao što je NGINX koristeći ulančane verzije da bi se napravila aplikacija koja je spremnija za proizvodnju. U sljedećem i posljednjem članku u ovoj seriji, pokazat ćemo kako pokrenuti razvojni server za vašu aplikaciju na OpenShift-u i osigurati sinhronizaciju lokalnih i udaljenih datoteka.
Dio 2: Kako koristiti novu S2I sliku sa postojećom slikom HTTP servera, kao što je NGINX, koristeći pridružene OpenShift sklopove za primenu u proizvodnji;
Dio 3: kako pokrenuti razvojni server za vašu aplikaciju na OpenShift platformi i sinkronizirati ga s lokalnim sistemom datoteka.