Салом ба ҳама! Ин дуввумин паём дар силсилаи мост, ки дар он мо нишон медиҳем, ки чӣ гуна ҷойгир кардани замимаҳои муосири веб дар Red Hat OpenShift.
Дар мақолаи қаблӣ, мо каме ба имкониятҳои тасвири созандаи нави S2I (сарчашма ба тасвир), ки барои сохтан ва ҷойгир кардани замимаҳои муосири веб дар платформаи OpenShift пешбинӣ шудааст, каме дахл кардем. Сипас, мо ба мавзӯи зуд ҷойгиркунии барнома таваҷҷӯҳ доштем ва имрӯз мо дида мебароем, ки чӣ гуна тасвири S2I-ро ҳамчун тасвири созандаи "пок" истифода бурда, онро бо анҷуманҳои марбути OpenShift якҷоя кардан мумкин аст.
Тасвири бинокори тоза
Тавре ки мо дар Қисми XNUMX қайд кардем, аксари барномаҳои веби муосир марҳилаи ба истилоҳ сохтан доранд, ки маъмулан амалиётҳоро ба монанди интиқоли код, пайвастани файлҳои сершумор ва минификатсия иҷро мекунанд. Файлҳое, ки дар натиҷаи ин амалҳо ба даст омадаанд - ва ин HTML статикӣ, JavaScript ва CSS - дар папкаи баромад нигоҳ дошта мешаванд. Ҷойгиршавии ин ҷузвдон одатан аз он вобаста аст, ки кадом асбобҳои сохтмонӣ истифода мешаванд ва барои React ин папкаи ./build хоҳад буд (мо ба ин муфассалтар дар зер бармегардем).
Сарчашма ба тасвир (S2I)
Дар ин мақола мо ба мавзӯи "S2I чист ва чӣ тавр истифода бурдани он" дахл намекунем (шумо метавонед дар ин бора бештар хонед
Марҳилаи монтаж
Марҳилаи васлкунӣ табиатан ба он чизе, ки ҳангоми иҷро кардани docker build ва бо тасвири нави Docker анҷом мешавад, хеле монанд аст. Мутаносибан, ин марҳила ҳангоми оғоз кардани сохтмон дар платформаи OpenShift рух медиҳад.
Дар сурати тасвири Web App Builder, он барои насб кардани вобастагии барномаи шумо ва иҷро кардани сохтмон масъул аст.
Тавре ки мо қаблан гуфта будем, ҷойгиршавии замимаи аллакай сохташуда аз он вобаста аст, ки шумо кадом асбобҳоро истифода мебаред. Масалан, дар ҳолати React ин папкаи ./build ва барои барномаҳои Angular ҷузвдони project_name/dist хоҳад буд. Ва, тавре ки аллакай дар паёми қаблӣ нишон дода шудааст, макони директорияи баромад, ки бо нобаёнӣ сохта шудааст, метавонад тавассути тағирёбандаи муҳити OUTPUT_DIR аз нав сабт карда шавад. Хуб, азбаски ҷойгиршавии ҷузвдони баромад аз чаҳорчӯба ба чаҳорчӯба фарқ мекунад, шумо танҳо баромади тавлидшударо ба ҷузвдони стандартии тасвир нусхабардорӣ мекунед, яъне /opt/apt-root/output. Ин барои фаҳмидани қисми боқимондаи ин мақола муҳим аст, аммо ҳоло биёед зуд ба марҳилаи навбатӣ - марҳилаи давидан назар кунем.
марҳилаи иҷро
Ин марҳила вақте рух медиҳад, ки занг ба иҷроиши докер дар тасвири наве, ки дар марҳилаи васлкунӣ сохта шудааст, сурат мегирад. Ҳамин чиз ҳангоми ҷойгиркунӣ дар платформаи OpenShift рӯй медиҳад. Пешфарз
Ин усул барои зуд ҷойгиркунии барномаҳо хуб аст, аммо ба таври умум тавсия дода намешавад, ки мундариҷаи статикиро бо ин роҳ пешниҳод кунед. Хуб, азбаски дар асл мо танҳо мундариҷаи статикиро пешкаш мекунем, ба мо лозим нест, ки дар дохили тасвири мо Node.js насб карда шавад - сервери веб кифоя мекунад.
Ба ибораи дигар, ҳангоми монтаж ба мо як чиз лозим аст, ҳангоми иҷроиш чизи дигар лозим аст. Дар ин ҳолат, сохторҳои занҷирӣ мувофиқанд.
Сохтмони занҷир
Ин аст он чизе ки онҳо дар бораи он менависанд
"Ду ассамблеяро бо ҳам пайваст кардан мумкин аст, ки яке объекти тартибдодашударо тавлид мекунад ва дигаре он объектро дар тасвири алоҳидае, ки барои идора кардани ин объект истифода мешавад, ҷойгир мекунад."
Ба ибораи дигар, мо метавонем тасвири Web App Builder-ро барои иҷро кардани сохтани худ истифода барем ва сипас тасвири веб-сервер, ҳамон NGINX-ро барои хидмат ба мундариҷаи худ истифода барем.
Ҳамин тариқ, мо метавонем тасвири Web App Builder -ро ҳамчун созандаи "пок" истифода барем ва ҳамзамон тасвири хурди корӣ дошта бошем.
Акнун биёед инро бо мисоли мушаххас дида бароем.
Барои омӯзиш мо истифода хоҳем кард
Ин ба мо кӯмак мекунад, ки ҳама чизро якҷоя кунем
Биёед ин файлро муфассалтар дида бароем ва аз бахши параметрҳо оғоз кунем.
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.
Фармони дуюм танҳо як барномаи навро дар асоси ин қолаб эҷод мекунад.
Пас аз кор кардани ин фармонҳо, мо мебинем, ки мо ду анҷуман дорем:
Ва баргаштан ба экрани Барраси, мо паҳлӯи оғозшударо мебинем:
Истинодро клик кунед ва мо ба барномаи мо, ки саҳифаи пешфарзии React App аст, бурда мешавем:
Илова 1
Барои дӯстдорони Angular мо низ дорем
Намунаи ин ҷо якхела аст, ба истиснои тағирёбандаи OUTPUT_DIR.
Илова 2
Дар ин мақола мо NGINX-ро ҳамчун веб-сервер истифода мебарем, аммо иваз кардани он бо Apache хеле осон аст, танҳо қолаби файлро тағир диҳед
хулоса
Дар қисми аввали ин силсила, мо нишон додем, ки чӣ тавр ба зудӣ ҷойгир кардани замимаҳои муосири веб дар платформаи OpenShift. Имрӯз мо дида баромадем, ки тасвири Web App чӣ кор мекунад ва чӣ гуна онро метавон бо веб-сервери пок ба монанди NGINX бо истифода аз сохторҳои занҷир муттаҳид кард, то як сохтани замимаи барои истеҳсол омодатар эҷод кунад. Дар мақолаи навбатӣ ва ниҳоии ин силсила, мо нишон медиҳем, ки чӣ гуна сервери таҳияи барномаи худро дар OpenShift иҷро кардан ва ҳамоҳангсозии файлҳои маҳаллӣ ва дурдастро таъмин кардан мумкин аст.
Мундариҷаи ин силсила мақолаҳо
- Қисми 1:
чӣ тавр ҷойгир кардани замимаҳои веби муосир дар чанд қадам ; - Қисми 2: Чӣ тавр истифода бурдани тасвири нави S2I бо тасвири сервери мавҷудаи HTTP, ба монанди NGINX, бо истифода аз анҷуманҳои алоқаманди OpenShift барои густариши истеҳсолот;
- Қисми 3: чӣ гуна бояд сервери таҳияи барномаи худро дар платформаи OpenShift иҷро кунад ва онро бо системаи файлии маҳаллӣ ҳамоҳанг созад.
Захираҳои иловагӣ
- Китоби ройгони электронӣ
Ҷойгиркунӣ дар OpenShift . - Маълумот дар бораи
OpenShift ва Kubernetes .
Манбаъ: will.com