Барномаҳои замонавӣ дар OpenShift, қисми 2: сохтани занҷирҳо

Салом ба ҳама! Ин дуввумин паём дар силсилаи мост, ки дар он мо нишон медиҳем, ки чӣ гуна ҷойгир кардани замимаҳои муосири веб дар Red Hat OpenShift.

Барномаҳои замонавӣ дар OpenShift, қисми 2: сохтани занҷирҳо

Дар мақолаи қаблӣ, мо каме ба имкониятҳои тасвири созандаи нави S2I (сарчашма ба тасвир), ки барои сохтан ва ҷойгир кардани замимаҳои муосири веб дар платформаи OpenShift пешбинӣ шудааст, каме дахл кардем. Сипас, мо ба мавзӯи зуд ҷойгиркунии барнома таваҷҷӯҳ доштем ва имрӯз мо дида мебароем, ки чӣ гуна тасвири S2I-ро ҳамчун тасвири созандаи "пок" истифода бурда, онро бо анҷуманҳои марбути OpenShift якҷоя кардан мумкин аст.

Тасвири бинокори тоза

Тавре ки мо дар Қисми XNUMX қайд кардем, аксари барномаҳои веби муосир марҳилаи ба истилоҳ сохтан доранд, ки маъмулан амалиётҳоро ба монанди интиқоли код, пайвастани файлҳои сершумор ва минификатсия иҷро мекунанд. Файлҳое, ки дар натиҷаи ин амалҳо ба даст омадаанд - ва ин HTML статикӣ, JavaScript ва CSS - дар папкаи баромад нигоҳ дошта мешаванд. Ҷойгиршавии ин ҷузвдон одатан аз он вобаста аст, ки кадом асбобҳои сохтмонӣ истифода мешаванд ва барои React ин папкаи ./build хоҳад буд (мо ба ин муфассалтар дар зер бармегардем).

Сарчашма ба тасвир (S2I)

Дар ин мақола мо ба мавзӯи "S2I чист ва чӣ тавр истифода бурдани он" дахл намекунем (шумо метавонед дар ин бора бештар хонед дар ин ҷо), аммо барои фаҳмидани он ки тасвири Web App Builder чӣ кор мекунад, дар бораи ду қадами ин раванд равшан будан муҳим аст.

Марҳилаи монтаж

Марҳилаи васлкунӣ табиатан ба он чизе, ки ҳангоми иҷро кардани docker build ва бо тасвири нави Docker анҷом мешавад, хеле монанд аст. Мутаносибан, ин марҳила ҳангоми оғоз кардани сохтмон дар платформаи OpenShift рух медиҳад.

Дар сурати тасвири Web App Builder, он барои насб кардани вобастагии барномаи шумо ва иҷро кардани сохтмон масъул аст. скрипт ҷамъ кунед. Бо нобаёнӣ, тасвири созанда конструксияи npm run-ро истифода мебарад, аммо ин метавонад тавассути тағирёбандаи муҳити NPM_BUILD бекор карда шавад.

Тавре ки мо қаблан гуфта будем, ҷойгиршавии замимаи аллакай сохташуда аз он вобаста аст, ки шумо кадом асбобҳоро истифода мебаред. Масалан, дар ҳолати React ин папкаи ./build ва барои барномаҳои Angular ҷузвдони project_name/dist хоҳад буд. Ва, тавре ки аллакай дар паёми қаблӣ нишон дода шудааст, макони директорияи баромад, ки бо нобаёнӣ сохта шудааст, метавонад тавассути тағирёбандаи муҳити OUTPUT_DIR аз нав сабт карда шавад. Хуб, азбаски ҷойгиршавии ҷузвдони баромад аз чаҳорчӯба ба чаҳорчӯба фарқ мекунад, шумо танҳо баромади тавлидшударо ба ҷузвдони стандартии тасвир нусхабардорӣ мекунед, яъне /opt/apt-root/output. Ин барои фаҳмидани қисми боқимондаи ин мақола муҳим аст, аммо ҳоло биёед зуд ба марҳилаи навбатӣ - марҳилаи давидан назар кунем.

марҳилаи иҷро

Ин марҳила вақте рух медиҳад, ки занг ба иҷроиши докер дар тасвири наве, ки дар марҳилаи васлкунӣ сохта шудааст, сурат мегирад. Ҳамин чиз ҳангоми ҷойгиркунӣ дар платформаи OpenShift рӯй медиҳад. Пешфарз скриптро иҷро кунед истифода мебарад модули хизмат барои хидмат ба мундариҷаи статикӣ, ки дар феҳристи баромади стандартии боло ҷойгир аст.

Ин усул барои зуд ҷойгиркунии барномаҳо хуб аст, аммо ба таври умум тавсия дода намешавад, ки мундариҷаи статикиро бо ин роҳ пешниҳод кунед. Хуб, азбаски дар асл мо танҳо мундариҷаи статикиро пешкаш мекунем, ба мо лозим нест, ки дар дохили тасвири мо Node.js насб карда шавад - сервери веб кифоя мекунад.

Ба ибораи дигар, ҳангоми монтаж ба мо як чиз лозим аст, ҳангоми иҷроиш чизи дигар лозим аст. Дар ин ҳолат, сохторҳои занҷирӣ мувофиқанд.

Сохтмони занҷир

Ин аст он чизе ки онҳо дар бораи он менависанд биноҳои занҷирӣ дар ҳуҷҷатҳои OpenShift:

"Ду ассамблеяро бо ҳам пайваст кардан мумкин аст, ки яке объекти тартибдодашударо тавлид мекунад ва дигаре он объектро дар тасвири алоҳидае, ки барои идора кардани ин объект истифода мешавад, ҷойгир мекунад."

Ба ибораи дигар, мо метавонем тасвири Web App Builder-ро барои иҷро кардани сохтани худ истифода барем ва сипас тасвири веб-сервер, ҳамон NGINX-ро барои хидмат ба мундариҷаи худ истифода барем.

Ҳамин тариқ, мо метавонем тасвири Web App Builder -ро ҳамчун созандаи "пок" истифода барем ва ҳамзамон тасвири хурди корӣ дошта бошем.

Акнун биёед инро бо мисоли мушаххас дида бароем.

Барои омӯзиш мо истифода хоҳем кард барномаи оддии React, бо истифода аз асбоби сатри фармони create-react-app сохта шудааст.

Ин ба мо кӯмак мекунад, ки ҳама чизро якҷоя кунем Файли қолаби OpenShift.

Биёед ин файлро муфассалтар дида бароем ва аз бахши параметрҳо оғоз кунем.

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

Ҳама чиз дар ин ҷо хеле равшан аст, аммо ба параметри OUTPUT_DIR диққат додан лозим аст. Барои барномаи React дар мисоли мо, ҳеҷ чизи ташвишовар нест, зеро React арзиши пешфарзро ҳамчун ҷузвдони баромад истифода мебарад, аммо дар ҳолати Angular ё чизи дигар, ин параметрро дар ҳолати зарурӣ тағир додан лозим аст.

Акнун биёед ба бахши ImageStreams назар андозем.

- 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'

Ба тасвирҳои сеюм ва чорум нигаред. Ҳардуи онҳо ҳамчун тасвирҳои Docker муайян карда шудаанд ва шумо метавонед ба таври равшан бубинед, ки онҳо аз куҷоянд.

Тасвири сеюм web-app-builder аст ва он аз nodeshift/ubi8-s2i-web-app бо нишони 10.x меояд. Маркази докер.

Чорум як тасвири NGINX (версияи 1.12) бо барчаспҳои навтарин аст Маркази докер.

Акнун биёед ду тасвири аввалро бубинем. Ҳардуи онҳо дар оғоз холӣ ҳастанд ва танҳо дар марҳилаи сохтмон сохта мешаванд. Тасвири аввал, react-web-app-builder, натиҷаи як қадами васлкунӣ хоҳад буд, ки тасвири web-app-builder-runtime ва рамзи сарчашмаи моро муттаҳид мекунад. Барои ҳамин мо ба номи ин тасвир “-Builder” илова кардем.

Тасвири дуюм - react-web-app-runtime - натиҷаи омезиши nginx-image-runtime ва баъзе файлҳо аз тасвири react-web-app-builder хоҳад буд. Ин тасвир инчунин ҳангоми ҷойгиркунӣ истифода мешавад ва танҳо сервери веб ва HTML, JavaScript, CSS-и статикии замимаи моро дар бар мегирад.

ошуфтааст? Акнун биёед ба конфигуратсияҳои сохта назар андозем ва он каме равшантар мешавад.

Шаблони мо ду конфигуратсияи сохта дорад. Ин аввалин аст ва он хеле стандартист:

  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

Тавре ки шумо мебинед, сатри дорои нишони 1 мегӯяд, ки натиҷаи ин сохтмон дар ҳамон тасвири реаксия-веб-барнома-созанда ҷойгир карда мешавад, ки мо каме пештар дар бахши ImageStreams дида будем.

Сатри бо 2 нишондодашуда ба шумо мегӯяд, ки кодро аз куҷо гиред. Дар ҳолати мо, ин анбори git аст ва макон, реф ва папкаи контекст аз рӯи параметрҳое, ки мо аллакай дар боло дидаем, муайян карда мешаванд.

Хати бо нишони 3 он чизест, ки мо аллакай дар бахши параметрҳо дидем. Он тағирёбандаи муҳити OUTPUT_DIR -ро илова мекунад, ки дар мисоли мо сохта шудааст.
Дар сатри нишондодашуда 4 гуфта мешавад, ки тасвири web-app-builder-runtime -ро истифода баред, ки мо онро аллакай дар бахши ImageStream дидаем.

Дар сатри нишони 5 гуфта мешавад, ки мо мехоҳем сохтани афзояндаро истифода барем, агар тасвири S2I онро дастгирӣ кунад ва тасвири Web App Builder дастгирӣ кунад. Дар оғози аввал, пас аз анҷоми марҳилаи васлкунӣ, тасвир папкаи node_modules -ро дар файли бойгонӣ захира мекунад. Сипас, дар иҷроҳои минбаъда, тасвир танҳо ин ҷузвдонро мекушояд, то вақти сохтмонро кам кунад.

Ва ниҳоят, хати бо нишондоди 6 танҳо як чанд триггер аст, ки сохтмон ба таври худкор бидуни дахолати дастӣ ҳангоми тағир додани чизе кор кунад.

Дар маҷмӯъ, ин конфигуратсияи хеле стандартии сохтмон аст.

Акнун биёед ба конфигуратсияи дуюми сохтмон назар андозем. Он ба аввалин хеле монанд аст, аммо як фарқияти муҳим вуҷуд дорад.

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

Ҳамин тавр, конфигуратсияи дуюми сохтмон react-web-app-runtime аст ва он хеле стандартӣ оғоз меёбад.

Хати бо нишони 1 чизи нав нест - он танҳо мегӯяд, ки натиҷаи сохтмон ба тасвири react-web-app-runtime гузошта мешавад.

Сатри 2, ки дар конфигуратсияи қаблӣ нишон дода шудааст, нишон медиҳад, ки рамзи сарчашмаро аз куҷо гирифтан мумкин аст. Аммо таваҷҷуҳ кунед, ки дар ин ҷо мо мегӯем, ки он аз тасвир гирифта шудааст. Гузашта аз ин, аз тасвире, ки мо нав офаридаем - аз react-web-app-builder (дар сатри 3 нишон дода шудааст). Файлҳое, ки мо мехоҳем истифода кунем, дар дохили тасвир ҳастанд ва ҷойгиршавии онҳо дар сатри 4 бо нишони XNUMX гузошта шудааст, дар ҳолати мо ин /opt/app-root/output/ аст. Агар шумо дар хотир доред, дар ин ҷо файлҳои дар асоси натиҷаҳои сохтани замимаи мо тавлидшуда нигоҳ дошта мешаванд.

Папкаи таъиноти дар истилоҳ бо нишони 5 нишондодашуда танҳо феҳристи ҷорӣ аст (ҳамааш дар хотир доред, ки дар дохили ягон чизи ҷодугарӣ бо номи OpenShift кор мекунад, на дар компютери маҳаллии шумо).

Бахши стратегия - хати бо нишони 6 - низ ба конфигуратсияи аввалини сохтмон монанд аст. Танҳо ин дафъа мо nginx-image-runtime-ро истифода мебарем, ки онро аллакай дар бахши ImageStream дидаем.

Ниҳоят, хати бо нишони 7 як бахши триггерҳост, ки ҳар дафъае, ки тасвири react-web-app-builder тағир меёбад, ин сохтмонро фаъол мекунад.

Дар акси ҳол, ин қолаб конфигуратсияи хеле стандартии ҷойгиркунӣ ва инчунин чизҳоеро, ки ба хидматҳо ва масирҳо марбутанд, дар бар мегирад, аммо мо ба ин тафсилоти аз ҳад зиёд ворид намешавем. Лутфан таваҷҷӯҳ намоед, ки тасвире, ки ҷойгир карда мешавад, тасвири react-web-app-runtime мебошад.

Ҷойгиркунии барнома

Пас, ҳоло, ки мо ба шаблон назар кардем, биёед бубинем, ки чӣ тавр онро барои ҷойгиркунии барнома истифода бурдан мумкин аст.

Мо метавонем асбоби муштарии OpenShift бо номи oc-ро барои ҷойгиркунии қолаби худ истифода барем:

$ 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

Фармони аввал дар скриншоти дар боло овардашуда як роҳи дидаю дониста муҳандисии пайдо кардани қолаб мебошад./openshiftio/application.yaml.

Фармони дуюм танҳо як барномаи навро дар асоси ин қолаб эҷод мекунад.

Пас аз кор кардани ин фармонҳо, мо мебинем, ки мо ду анҷуман дорем:

Барномаҳои замонавӣ дар OpenShift, қисми 2: сохтани занҷирҳо

Ва баргаштан ба экрани Барраси, мо паҳлӯи оғозшударо мебинем:

Барномаҳои замонавӣ дар OpenShift, қисми 2: сохтани занҷирҳо

Истинодро клик кунед ва мо ба барномаи мо, ки саҳифаи пешфарзии React App аст, бурда мешавем:

Барномаҳои замонавӣ дар OpenShift, қисми 2: сохтани занҷирҳо

Илова 1

Барои дӯстдорони Angular мо низ дорем мисоли ариза.

Намунаи ин ҷо якхела аст, ба истиснои тағирёбандаи OUTPUT_DIR.

Илова 2

Дар ин мақола мо NGINX-ро ҳамчун веб-сервер истифода мебарем, аммо иваз кардани он бо Apache хеле осон аст, танҳо қолаби файлро тағир диҳед Тасвири NGINX ба Тасвири Apache.

хулоса

Дар қисми аввали ин силсила, мо нишон додем, ки чӣ тавр ба зудӣ ҷойгир кардани замимаҳои муосири веб дар платформаи OpenShift. Имрӯз мо дида баромадем, ки тасвири Web App чӣ кор мекунад ва чӣ гуна онро метавон бо веб-сервери пок ба монанди NGINX бо истифода аз сохторҳои занҷир муттаҳид кард, то як сохтани замимаи барои истеҳсол омодатар эҷод кунад. Дар мақолаи навбатӣ ва ниҳоии ин силсила, мо нишон медиҳем, ки чӣ гуна сервери таҳияи барномаи худро дар OpenShift иҷро кардан ва ҳамоҳангсозии файлҳои маҳаллӣ ва дурдастро таъмин кардан мумкин аст.

Мундариҷаи ин силсила мақолаҳо

  • Қисми 1: чӣ тавр ҷойгир кардани замимаҳои веби муосир дар чанд қадам;
  • Қисми 2: Чӣ тавр истифода бурдани тасвири нави S2I бо тасвири сервери мавҷудаи HTTP, ба монанди NGINX, бо истифода аз анҷуманҳои алоқаманди OpenShift барои густариши истеҳсолот;
  • Қисми 3: чӣ гуна бояд сервери таҳияи барномаи худро дар платформаи OpenShift иҷро кунад ва онро бо системаи файлии маҳаллӣ ҳамоҳанг созад.

Захираҳои иловагӣ

Манбаъ: will.com

Илова Эзоҳ