Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds

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

Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds

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 siin), 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 assemble script. 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 kĂ€ivitusskripti kasutab serve moodul 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 seotud kogumite (chained builds) 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 lihtsat React rakendust, mis on loodud kÀsureatööriista create-react-app abil.

Koguda kÔik kokku aitab meil OpenShift'i mallifail.

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 Docker hub.

Neljandaks on NGINX (versioon 1.12) pilt koos sildiga latest Docker hub.

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:

Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds

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

Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds

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

Kaasaegsed rakendused OpenShiftis, 2. osa: seotud kogumid chained builds

Lisa 1

Angulari armastajatele on meil samuti rakenduse nÀidis.

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. NGINX-i pilt . Tundub, et Apache'i pilt.

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: kuidas kĂ€itada kaasaegseid veebirakendusi vaid mĂ”ne sammuga;
  • 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

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster