á°áá ááá˝áá! áááá á¨áἠá áááŹá˝áá˝á á Red Hat OpenShift áá áĽáá´áľ áá°ááŤáľ áĽáá°ááťá á¨áááłáá áľ á°á¨áłáłá á áľááłá˝á ááá°áá ááá˘
áŁááá ááĽáᣠáááá á¨áľá áá°áá áŞáŤáá˝á á OpenShift ááľá¨á áá áááááŁáľ áĽá ááá°ááŤáľ á¨á°áá°ááá á á˛áąá S2I (ááá-áá°-ááľá) ááᢠááľá áŤááá á á
á á áľááš ááŤáᢠá¨ááŤá á áááŹá˝áá á ááĽááľ á¨áá°ááŤáľ áááľ áá ááááľ áá á¨á áĽá áᏠᨠS2I ááľáá áĽáá° "ááá
" ááᢠááľá áĽáá´áľ áĽáá°ááá áá áĽá á¨á°ááá
ᨠOpenShift áľáĽá°áŁáá˝ áá áĽááŁááŤááá˘
á¨ááᢠááľáá á á˝áł
á ááá XNUMX áá áĽáá°ááá˝ááᣠá áĽáááš áááá á¨áľá á áááŹá˝áá˝ á¨áááŁáł á°á¨á á°áĽá á¨áá ፠á˛áá áá á á á°áááś áĽáá° áŽáľ áááá áĽáŁ á ááŤáł á¨ááá áááááľ áĽá áááá áŤá á°ááŁáŤáľá áŤá¨ááááᢠá áĽááá ááááá˝ ááááŤáľ á¨á°áá áááá˝ - áĽá áá á¨áááááłááľ HTMLᣠJavaScript áĽá CSS - á áá¤áą á áá ááľáĽ ááááŁáᢠá¨áá ááá°á ááá á áĽááá áá á áá ááááľ á¨áááŁáł ááłáŞáŤáá˝ áĽá á áá áĽáá°ááá ááá°ááᣠáĽá á React áá á¨./build á áá áááá (á¨áá á áłá˝ á áááá áĽááááłáá)á˘
ááá-áá°-ááľá (S2I)
á áá
á˝áá ááľáĽ âS2I áááľá áá áĽá áĽáá´áľ áĽáá°áá ááá áľâ á ááá áááľ áá á áááŤá (áľááá
á¨á áá ááá ἠáá˝áá)
á¨áá°áĽá°á˘áŤ á°á¨á
á¨áá°áĽá°á˘áŤá á°á¨á á á°ááĽáŽ áśá¨á áááŁáłá á˛áŤáľáŹáą áĽá á á á˛áľ Docker ááľá á˛á¨ááą á¨áááá áá á áŁá á°ááłáłá ááᢠá áá áá á¨áľ áá á°á¨á á OpenShift ááľá¨á áá áááŁáł á˛ááá áá¨á°áłá.
á¨áľá áá°áá áŞáŤ ááᢠááľáá á á°ááá¨á°áŁ á¨áĽááľáá áá°áá áŞáŤ áĽááá˝ á¨ááŤá áĽá áááŁáłáá á¨ááľáŹáľ áááááľ á áá áľá˘
áá°á á˛á áĽáá°á°ááááá, á¨á°á áááá, ááľááá á¨á°áááŁá áá°áá áŞáŤ á á¨áľáá ááłáŞáŤáá˝ áĽáá°áá áá ááá°áá. áááłáᣠá React áááł áá ./build ááá°á ááááᣠáĽá áá áááá á áááŹá˝áá˝ á¨ááŽáááľ_áľá/á˛áľáľ áá á°á ááááᢠáĽáᣠáŁááá ááĽá áá áĽáá°ááłá¨áᣠá ááŁáŞááľ áĽáá˛ááᣠá¨á°ááá¨á á¨áá¤áľ áááŤá á¨áááá áľ áŚáłáŁ á OUTPUT_DIR á áŤáŁá˘ á°áááá á áŠá ááťá áá˝ááᢠáĽááá˛á ᣠá¨áá¤áľ áá á°áŠ á¨áááá áľ áŚáł á¨áááá áá° áááá áľááááŤá á ááá á¨á°áá á¨áá áá ááľ á ááľá áá ááłáá áá°á á áá á°á áááľá /opt/apt-root/output áá áąá˘ áá á¨áá¨áá á¨áá á˝áá ááá¨áłáľ á áľááá áá, á áá áá á¨áááĽááá á°á¨á - á¨áŠáŤáá á°á¨á á ááĽááľ áĽáá.
á ááľ á°á¨á
áá
á°á¨á á¨áá¨áááá á áľáĽá°áŁ á°á¨á á ááá á¨á á á˛áľ ááľá áá áá° áśá¨á áŠáŤ áĽáŞ á˛á°á¨á ááᢠá OpenShift ááľá¨á áá á˛á°áŤáá á°ááłáłá ááᢠááŁáŞ
áá áá´ á áááŹá˝áá˝á á ááĽááľ ááá°ááŤáľ áĽáŠ ááᣠááá áá á á á ááá á¨áááááłááľ áááľá á áá ááááľ ááá á¨áĽ á ááá¨ááᢠá°á áᣠá áĽáááą áĽá á¨ááááá á á¨áááááłááľ áááľá áĽáť áľáááᣠá ááľáá˝á ááľáĽ Node.js ááŤá á áŤáľááááá - á¨áľá á áááá á á ááá˘
á áá á áááá˝ áľáá°á á°áĽ á ááľ ááá áŤáľáááááᣠá˛áá˝á áá ááá áŤáľáááááᢠá áá áááł, á á°áá°ááľ á¨á°á°áŠ áááŁáłáá˝ á áá áá¸á.
á°áá°ááľ ááááŁáá˘
á¨áá˝ááľá áá
ááá˘
"áááľ ááŁá¤áá˝ á ááľ áá ááŁáአáá˝ááᣠá áá°áá á¨á°á ááᨠá áŤá á˛áŤááá áááá á°áá áŤáá á áŤá á á°áᨠááľá á ááľá°áááľ áŤáá á áŤá áááľáŹáľ áá á ááá˘"
á áá á áááá˝áŁáááŁáłá˝áá áááľáŹáľ á¨áἠá á ááᢠááľáá ááá áá áĽáá˝ááááŁáĽá áááłá˝áá ááá á¨áĽ á¨áἠá°áá¨á ááľááŁá°ááłáłá NGINXá áá áá áĽáá˝áááá˘
áľááá á¨áἠá á á°áŞ ááľáá áĽáá° âááá â ááᢠááá ááá áľ áĽá á á°ááłáłá áá áľáá˝ á¨áŠáŤ áá ááľá áĽáá˛áá¨á ááľá¨á áĽáá˝áááá˘
á áá áá áá á áአááłá áĽáááá¨á°áá˘
ááľáá á áĽáá áááá
áááá ááá á ááľ áá áááľá¨á áá¨áłáá
áá áá ááá á á áá áááá áĽáááá¨á°á áĽá á áááŞáŤáá˝ ááá áĽááááá˘
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 ááŁáŞáá áá áĽáá° á¨áá¤áľ áá á°á áľááá áá ááá áá á á áááá ááá á áá ááá áá áá¤áľ áĽáá° á áľáááááą ááá¨á áááá áłáá˘
á áá á¨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'
áśáľá°ááá áĽá á áŤá°ááá ááľáá˝ áááá¨áą. áááąá áĽáá° áśá¨á ááľáá˝ á°ááá¸ááᣠáĽá á¨á¨áľ áĽáá°áᥠá ááá áá¨áľ áá˝ááá˘
áŚáľá°áá ááľá ááĽ-á á-ááᢠáá áĽá á¨ááŁá ᨠnodeshift/ubi8-s2i-web-app 10.x áá áá፠á°á°áĽáśáłá
á áŤá°áá ᨠNGINX ááľá áá (áľáŞáľ 1.12) á¨á
áἠáá áá፠áŤáá
á áá á¨ááááŞáŤáášá áááľ ááľáá˝ áĽáá. áááąá ááááŞáŤ áá áŁáś áá¸á áĽá á¨á°áá áŠáľ á áááŁáłá áá áľ áĽáť áá. á¨ááááŞáŤá ááľáᣠreact-web-app-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 á¨á°á°á¨áá ááľáá áá°á á˛á á ImageStream ááá áá áŤá¨ááá á¨áľá-áá°áá áŞáŤ-ááá˘-á ááľ áá ááľáá áĽáá áá áááá˘
ááľáá 5 áá á¨S2I ááľá á¨áá°ááá á¨áá á°á¨á᪠áááŁáł áá áá áĽáááááá ááá áĽá á¨áľá áá°áá áŞáŤ ááᢠááľáᢠá ááááŞáŤá á áá áá ᣠá¨áá°áĽá°á˘áŤá á°á¨á á¨á°á ááá á áá ááľá 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
áľááá á¨ááá°áá á¨áááŁáł áá á¨áľ ááá˝-áľá-áá°áá áŞáŤ-á ááľ áá ááᣠáĽá á áŁá ááá á áá á°á¨á ááááŤáá˘
1 á¨á°á°á¨áá ááľáá á á˛áľ ááá á áá°áá - á ááá á¨áááŁáłá áá¤áľ áá° ááá˝-áľá-áá°áá áŞáŤ-á ááľ áá ááľá áĽáá°áᣠááááŤáá˘
áĽáá° ááľáá áá á 2 á¨á°á°á¨áá ááľáá á¨ááá áŽáąá á¨á¨áľ ááááľ áĽáá°ááťá áŤáłáŤáᢠááá áá áĽáá áá á¨áĽáá á¨á°áá°á° áá áĽáŤáá áĽááłá á áľá°áá:: á¨áá á á áá á áá á¨áá ááá ááľá - á¨áŹááľ-áľá-á á-ááᢠ(á ááľáá 3 áá á¨á°ááá¨á°á)ᢠááá áááŁá¸á á¨áááááá¸á áááá˝ á ááľá ááľáĽ áá¸á áĽá áŚáłá¸á á 4 ááľáá áá á°ááá§á, á áĽá áááł /opt/app-root/output/ áá. áŤáľáłááą, á¨áĽáá áá°áá áŞáŤ á ááááŁáľ áá¤áśá˝ áá á°ááľáá°á á¨á°áá áŠáľ áááá˝ á¨ááááĄá áľ áŚáł áá.
á áľáŤá 5 áá á¨á°ááá¸á á¨ááľá¨áť áá á°á á ááá á áá áŤáá áá፠áá (áá áĽáť ááᣠá áľáłááľáŁ á ááłááľ á áľááłá ááá ááľáĽ áĽá¨áŽá OpenShift á á°áŁáá ááá ááľáĽ áĽáá á á á¨áŁá˘á áŽáááá°á áá á áá°áá)á˘
á¨áľáľáŤá´áá ááá - 6 á¨á°á°á¨á ááľáá - áĽáá˛áá á¨ááááŞáŤá á¨áááŁáł áá á áá á°ááłáłá áá. á áá áá áĽáť á ImageStream ááá ááľáĽ áŤá¨ááá nginx-image-runtime á áĽáá ááááá˘
á áá¨á¨áťáᣠ7 á¨ááá ááľáá ááá˝-áľá-á á-ááá˘á ááľá á á°áá¨á¨ ááĽá áá áá áááŁáł á¨ááŤáááłá á°á ááľá á´áá˝ ááá ááá˘
áŤáá áá፠áá á áĽááľ á áŁá ááá áá°á á á¨áá°ááŤáľ áá á¨áľá áĽáá˛áá á¨á áááááśá˝ áĽá ááááśá˝ áá á¨á°áŤáŤá áááŽá˝á áááᣠááá áá áá°á፠á áŁá áĽá áááá ááľáĽ á áááŁáᢠáĽáŁáá á¨áá°áá á¨á ááľá ááá˝-áľá-áá°áá áŞáŤ-á ááľ áá ááľá áááá áἠáá áá˘
á¨áá°áá áŞáŤ áá°ááŤáľ
áľááá á áá á áĽááąá á¨á°ááá¨áľá, áá°áá áŞáŤá ááá°ááŤáľ áĽáá´áľ áĽáá°áá ááá áľ áĽáá.
á áĽááłá˝áá ááá°ááŤáľ oc á¨á°áŁááá á¨OpenShift á°áá á ááłáŞáŤ áá áá áĽáá˝ááááĄ-
$ 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 áá°áá áŞáŤ áá˝áĄ
áá፠1
áá áááá á áááŞáá˝á á ááá˘
á¨OUTPUT_DIR á°áááá á áľá°áá áĽáá áŤáá áľááá°-áĽááľ á ááľ ááá˘
áá፠2
á áá
á˝áá ááľáĽ NGINX á áĽáá° áľá á áááá á°á ááá, ááá áá á Apache áá°áŤáľ á áŁá ááá áá, á ááá ááľáĽ áŤááá á áĽááľ áĽáť ááááĄ.
áá°áá°ááŤ
á áá á°á¨áłáłá á¨ááááŞáŤ ááá áááá á¨áľá áá°áá áŞáŤáá˝á á OpenShift ááľá¨á áá áĽáá´áľ á ááĽááľ áá°ááŤáľ áĽáá°ááťá á áłáá°ááᢠáᏠá¨áľá áá°áá áŞáŤ ááľá áá áĽáá°áá°áŤ áĽá áĽáá´áľ áĽáá° NGINX áŤá áášá á¨áľá á áááá áá áĽáá´áľ áĽáá°ááŁáá á°áááá°áá á á°áá°ááľ á¨á°á°áŠ áááŁáłáá˝á á áá áá ááááľ ááá á¨áá á¨áá°áá áŞáŤ áááŁáłá˘ á áááĽáá áĽá á áá¨á¨áťá á áá á°á¨áłáłá ááŁáĽá ááá°áá áŞáŤá á OpenShift áá áĽáá´áľ á¨ááᢠá áááá áĽáá°ááŤáľáŹáą áĽá á¨á áŤáŁá˘ áĽá á¨áááľ áááá˝á áááłá°áá áĽáá¨áááŁááá˘
á¨áá á°á¨áłáłá ááŁáĽáá˝ áááľ
- ááá 1áĄ
áááá á¨áľá áá°áá áŞáŤáá˝á á áĽááľ áĽááááá˝ áĽáá´áľ áá°ááŤáľ áĽáá°ááťá ; - ááá 2ᥠá á˛áľ á¨S2I ááľá á áá áŤáá á¨á¤á˝á˛á˛á á áááá ááľá ááᣠáááłá NGINXᣠá°ááá ᨠOpenShift áľáĽá°áŁáá˝á ááááľ áá°ááŤáľ áĽáá´áľ áá áá áĽáá°ááťááŁ
- ááá 3ᥠááá°áá áŞáŤá á OpenShift ááľá¨á áá áĽáá´áľ á¨áááľ á ááááá áááľ áĽá á¨á áŤáŁá˘á á¨ááá áľáááľ áá áááłá°á áĽáá°ááťáá˘
á°á¨á᪠ááááá˝
- áá á˘-áá˝áá
áá° OpenShift á áá°ááŤáľ áá . - áá áá¨á
OpenShift áĽá Kubernetes .
ááá: hab.com