ããã«ã¡ã¯ãã¿ããªïŒ ããã¯ãRed Hat OpenShift ã«ææ°ã® Web ã¢ããªã±ãŒã·ã§ã³ããããã€ããæ¹æ³ã説æããã·ãªãŒãºã® XNUMX çªç®ã®æçš¿ã§ãã
ååã®æçš¿ã§ã¯ãOpenShift ãã©ãããã©ãŒã äžã§ææ°ã® Web ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã³ãããã€ããããã«èšèšããããæ°ãã S2I (source-to-image) ãã«ã㌠ã€ã¡ãŒãžã®æ©èœã«ã€ããŠå°ã觊ããŸããã 次ã«ãã¢ããªã±ãŒã·ã§ã³ãè¿
éã«ãããã€ãããšãããããã¯ã«èå³ãæã¡ãŸãããä»æ¥ã¯ãS2I ã€ã¡ãŒãžããçŽç²ãªããã«ã㌠ã€ã¡ãŒãžãšããŠäœ¿çšãããããé¢é£ãã OpenShift ã¢ã»ã³ããªãšçµã¿åãããæ¹æ³ãèŠãŠãããŸãã
ã¯ãªãŒã³ãªãã«ããŒã€ã¡ãŒãž
第 XNUMX åã§è¿°ã¹ãããã«ãææ°ã® Web ã¢ããªã±ãŒã·ã§ã³ã®ã»ãšãã©ã«ã¯ãããããã«ã ã¹ããŒãžããããéåžžã¯ã³ãŒãã®ãã©ã³ã¹ãã€ã«ãè€æ°ã®ãã¡ã€ã«ã®é£çµãçž®å°ãªã©ã®æäœãå®è¡ããŸãã ãããã®æäœã®çµæãšããŠååŸããããã¡ã€ã« (ããã¯éç 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) ã«ã³ããŒããã ãã§ãã ããã¯ãã®èšäºã®æ®ãã®éšåãç解ããããã«éèŠã§ãããããã§ã¯æ¬¡ã®æ®µéã§ããå®è¡ãã§ãŒãºãç°¡åã«èŠãŠã¿ãŸãããã
å®è¡ãã§ãŒãº
ãã®æ®µéã¯ãã¢ã»ã³ããªæ®µéã§äœæãããæ°ããã€ã¡ãŒãžã«å¯Ÿã㊠docker run ãžã®åŒã³åºããè¡ããããšãã«çºçããŸãã OpenShift ãã©ãããã©ãŒã ã«ãããã€ããå Žåãåãããšãèµ·ãããŸãã ããã©ã«ã
ãã®æ¹æ³ã¯ã¢ããªã±ãŒã·ã§ã³ãè¿ éã«å±éããå Žåã«é©ããŠããŸãããéçã³ã³ãã³ãããã®æ¹æ³ã§æäŸããããšã¯äžè¬çã«æšå¥šãããŸããã å®éã«ã¯éçãªã³ã³ãã³ãã®ã¿ãæäŸãããããã€ã¡ãŒãžå ã« Node.js ãã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸãããWeb ãµãŒããŒã§ååã§ãã
èšãæããã°ãçµã¿ç«ãŠããšãã«å¿ èŠãªãã®ã¯ XNUMX ã€ãããå®è¡ãããšãã«ã¯å¥ã®ãã®ãå¿ èŠã«ãªããšããããšã§ãã ãã®ãããªç¶æ³ã§ã¯ããã§ãŒã³ ãã«ãã圹ã«ç«ã¡ãŸãã
é£éãã«ã
ããã圌ããæžããŠããããšã§ã
ãXNUMX ã€ã®ã¢ã»ã³ããªããªã³ã¯ã§ããŸããXNUMX ã€ã¯ã³ã³ãã€ã«æžã¿ãšã³ãã£ãã£ãçæãããã XNUMX ã€ã¯ãã®ãšã³ãã£ãã£ãå®è¡ããããã«äœ¿çšãããå¥ã®ã€ã¡ãŒãžã§ãã®ãšã³ãã£ãã£ããã¹ãããŸããã
ã€ãŸããWeb App Builder ã€ã¡ãŒãžã䜿çšããŠãã«ããå®è¡ããWeb ãµãŒã㌠ã€ã¡ãŒãž (åã 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'
XNUMXæç®ãšXNUMXæç®ã®ç»åãã芧ãã ããã ãããã¯ã©ã¡ãã Docker ã€ã¡ãŒãžãšããŠå®çŸ©ãããŠãããã©ãããæ¥ãã®ããæ確ã«ããããŸãã
8 çªç®ã®ã€ã¡ãŒãžã¯ web-app-builder ã§ã2.x ã§ã¿ã°ä»ããããnodeshift/ubi10-sXNUMXi-web-app ããååŸãããŸãã
1.12 çªç®ã¯ãææ°ã®ã¿ã°ãä»ãããã NGINX ã€ã¡ãŒãž (ããŒãžã§ã³ XNUMX) ã§ãã
ããã§ã¯æåã® XNUMX ã€ã®ç»åãèŠãŠã¿ãŸãããã ãããã¯äž¡æ¹ãšãéå§æã«ã¯ç©ºã§ããããã«ããã§ãŒãºäžã«ã®ã¿äœæãããŸãã æåã®ã€ã¡ãŒãžãreact-web-app-builder ã¯ãweb-app-builder-runtime ã€ã¡ãŒãžãšãœãŒã¹ ã³ãŒããçµåããã¢ã»ã³ã㪠ã¹ãããã®çµæã§ãã ãã®ããããã®ã€ã¡ãŒãžã®ååã«ã-builderããè¿œå ããŸããã
XNUMX çªç®ã®ã€ã¡ãŒãž (react-web-app-runtime) ã¯ãnginx-image-runtime ãšãreact-web-app-builder ã€ã¡ãŒãžã®ããã€ãã®ãã¡ã€ã«ãçµã¿åãããçµæã«ãªããŸãã ãã®ã€ã¡ãŒãžã¯å±éæã«ã䜿çšãããã¢ããªã±ãŒã·ã§ã³ã® Web ãµãŒããŒãšéç HTMLãJavaScriptãCSS ã®ã¿ãå«ãŸããŸãã
æ··ä¹±ããïŒ æ¬¡ã«ããã«ãæ§æãèŠãŠã¿ãŸããããããã«ãããããå°ãæ確ã«ãªããŸãã
ç§ãã¡ã®ãã³ãã¬ãŒãã«ã¯ XNUMX ã€ã®ãã«ãæ§æããããŸãã ãããæåã®ãã®ã§ãéåžžã«æšæºçãªãã®ã§ãã
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 ã»ã¯ã·ã§ã³ã§å°ãåã«èŠããã®ãšåãreact-web-app-builder ã€ã¡ãŒãžã«é 眮ãããããšã瀺ããŠããŸãã
2 ãšããã©ãã«ã®ä»ããè¡ã¯ãã³ãŒãã®ååŸå ã瀺ããŸãã ãã®å Žåããã㯠git ãªããžããªã§ãããå Žæãåç §ãããã³ã³ã³ããã¹ã ãã©ã«ããŒã¯ãäžã§ãã§ã«èª¬æãããã©ã¡ãŒã¿ãŒã«ãã£ãŠæ±ºå®ãããŸãã
3 ãšããã©ãã«ã®ä»ããè¡ã¯ããã©ã¡ãŒã¿ãŒ ã»ã¯ã·ã§ã³ã§ãã§ã«èŠããã®ã§ãã OUTPUT_DIR ç°å¢å€æ° (ãã®äŸã§ã¯ build) ãè¿œå ãããŸãã
4 ãšããã©ãã«ã®ä»ããè¡ã¯ãImageStream ã»ã¯ã·ã§ã³ã§ãã§ã«èŠã web-app-builder-runtime ã€ã¡ãŒãžã䜿çšããããšã瀺ããŠããŸãã
5 ãšããã©ãã«ã®è¡ã¯ãS2I ã€ã¡ãŒãžãã€ã³ã¯ãªã¡ã³ã¿ã« ãã«ãããµããŒãããŠãããWeb App Builder ã€ã¡ãŒãžãã€ã³ã¯ãªã¡ã³ã¿ã« ãã«ãããµããŒãããŠããå Žåã«ã€ã³ã¯ãªã¡ã³ã¿ã« ãã«ãã䜿çšããããšã瀺ããŠããŸãã æåã®èµ·åæãã¢ã»ã³ããªæ®µéãå®äºããåŸãã€ã¡ãŒãžã¯ãnode_modules ãã©ã«ããŒãã¢ãŒã«ã€ã ãã¡ã€ã«ã«ä¿åããŸãã ãã®åŸã®å®è¡ã§ã¯ãã€ã¡ãŒãžã¯ãã«ãæéãççž®ããããã«ãã®ãã©ã«ããŒãåçŽã«è§£åããŸãã
æåŸã«ã6 ãšããã©ãã«ã®ä»ããè¡ã¯ãäœããå€æŽããããšãã«æåä»å ¥ãªãã§èªåçã«ãã«ããå®è¡ããããã®ããã€ãã®ããªã¬ãŒã§ãã
å šäœçã«ãããã¯ããªãæšæºçãªãã«ãæ§æã§ãã
次ã«ãXNUMX çªç®ã®ãã«ãæ§æãèŠãŠã¿ãŸãããã æåã®ãã®ãšãã䌌ãŠããŸãããéèŠãªéãã XNUMX ã€ãããŸãã
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
ãããã£ãŠãXNUMX çªç®ã®ãã«ãæ§æã¯ãreact-web-app-runtime ã§ãããéåžžã«æšæºçãªãã®ããå§ãŸããŸãã
1 ãšããã©ãã«ã®ä»ããè¡ã¯æ°ãããã®ã§ã¯ãããŸãããåã«ããã«ãçµæã React-web-app-runtime ã€ã¡ãŒãžã«å ¥ããããããšã瀺ããŠããŸãã
åã®æ§æãšåæ§ã«ã2 ãšããã©ãã«ã®ä»ããè¡ã¯ããœãŒã¹ ã³ãŒãã®å ¥æå ã瀺ããŸãã ãã ããããã§ã¯ç»åããååŸãããšèšã£ãŠããããšã«æ³šæããŠãã ããã ããã«ãäœæããã°ããã®ã€ã¡ãŒãžãreact-web-app-builder (3 çªã®è¡ã«ç€ºãããŠããŸã) ããã®ãã®ã§ãã 䜿çšããããã¡ã€ã«ã¯ã€ã¡ãŒãžå ã«ããããã®å Žæ㯠4 ãšããã©ãã«ã®ä»ããè¡ã§èšå®ãããŠããŸãããã®å Žå㯠/opt/app-root/output/ ã§ãã èŠããŠãããšæããŸãããããã«ã¯ã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯çµæã«åºã¥ããŠçæããããã¡ã€ã«ãä¿åãããŸãã
ã©ãã« 5 ã®çšèªã§æå®ãããŠããå®å ãã©ã«ããŒã¯ãåã«çŸåšã®ãã£ã¬ã¯ããªã§ã (ããã¯ãã¹ãŠãããŒã«ã« ã³ã³ãã¥ãŒã¿ãŒäžã§ã¯ãªããOpenShift ãšåŒã°ããéæ³ã®å éšã§å®è¡ãããŠãããšããããšãèŠããŠãããŠãã ãã)ã
æŠç¥ã»ã¯ã·ã§ã³ (6 ãšããã©ãã«ãä»ããè¡) ããæåã®ãã«ãæ§æãšäŒŒãŠããŸãã ä»åã®ã¿ãImageStream ã»ã¯ã·ã§ã³ã§ãã§ã«èŠã nginx-image-runtime ã䜿çšããŸãã
æåŸã«ã7 ãšããã©ãã«ã®ä»ããè¡ã¯ãreact-web-app-builder ã€ã¡ãŒãžãå€æŽããããã³ã«ãã®ãã«ããã¢ã¯ãã£ãåããããªã¬ãŒã®ã»ã¯ã·ã§ã³ã§ãã
ãã以å€ã®å Žåããã®ãã³ãã¬ãŒãã«ã¯éåžžã«æšæºçãªãããã€ã¡ã³ãæ§æãšããµãŒãã¹ãšã«ãŒãã«é¢é£ãããã®ãå«ãŸããŠããŸãããããã«ã€ããŠã¯ããŸã詳ãã説æããŸããã ãããã€ãããã€ã¡ãŒãžã¯ãreact-web-app-runtime ã€ã¡ãŒãžã§ããããšã«æ³šæããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³ã®å°å ¥
ãã³ãã¬ãŒãã確èªããã®ã§ãããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ããããã€ããæ¹æ³ãèŠãŠã¿ãŸãããã
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
äžã®ã¹ã¯ãªãŒã³ã·ã§ããã®æåã®ã³ãã³ãã¯ãtemplate./openshiftio/application.yaml ãèŠã€ããããã®æå³çãªãšã³ãžãã¢ãªã³ã°æ¹æ³ã§ãã
XNUMX çªç®ã®ã³ãã³ãã¯ããã®ãã³ãã¬ãŒãã«åºã¥ããŠæ°ããã¢ããªã±ãŒã·ã§ã³ãäœæããã ãã§ãã
ãããã®ã³ãã³ããæ©èœãããšãXNUMX ã€ã®ã¢ã»ã³ããªãããããšãããããŸãã
ãããŠãæŠèŠç»é¢ã«æ»ããšãèµ·åããããããã衚瀺ãããŸãã
ãªã³ã¯ãã¯ãªãã¯ãããšãããã©ã«ãã® React App ããŒãžã§ããã¢ããªã«ç§»åããŸãã
ãµããªã¡ã³ã1
Angular æ奜家ã®ããã«ã次ã®ãã®ãçšæããŠããŸãã
ããã®ãã¿ãŒã³ã¯ãOUTPUT_DIR å€æ°ãé€ããŠåãã§ãã
ãµããªã¡ã³ã2
ãã®èšäºã§ã¯ Web ãµãŒããŒãšã㊠NGINX ã䜿çšããŸããããApache ã«çœ®ãæããã®ã¯éåžžã«ç°¡åã§ããã¡ã€ã«å
ã®ãã³ãã¬ãŒããå€æŽããã ãã§ãã
ãŸãšã
ãã®ã·ãªãŒãºã®æåã®éšåã§ã¯ãææ°ã® Web ã¢ããªã±ãŒã·ã§ã³ã OpenShift ãã©ãããã©ãŒã ã«è¿ éã«ãããã€ããæ¹æ³ã説æããŸããã ä»æ¥ã¯ãWeb ã¢ã㪠ã€ã¡ãŒãžã®åœ¹å²ãšããã§ãŒã³ ãã«ãã䜿çšããŠãWeb ã¢ã㪠ã€ã¡ãŒãžã NGINX ã®ãããªçŽç²ãª Web ãµãŒããŒãšçµã¿åãããŠãããæ¬çªç°å¢ã«å¯Ÿå¿ããã¢ããªã±ãŒã·ã§ã³ ãã«ããäœæããæ¹æ³ã«ã€ããŠèª¬æããŸããã ãã®ã·ãªãŒãºã®æ¬¡ã®æçµèšäºã§ã¯ãOpenShift äžã§ã¢ããªã±ãŒã·ã§ã³ã®éçºãµãŒããŒãå®è¡ããããŒã«ã« ãã¡ã€ã«ãšãªã¢ãŒã ãã¡ã€ã«ã®åæã確ä¿ããæ¹æ³ã説æããŸãã
ãã®ã·ãªãŒãºã®èšäºã®å 容
- ããŒã1ïŒ
ãããæ°ã¹ãããã§ææ°ã® Web ã¢ããªã±ãŒã·ã§ã³ããããã€ããæ¹æ³ ; - ããŒã 2: æ¬çªãããã€ã¡ã³ãã«é¢é£ãã OpenShift ã¢ã»ã³ããªã䜿çšããŠãNGINX ãªã©ã®æ¢åã® HTTP ãµãŒã㌠ã€ã¡ãŒãžã§æ°ãã S2I ã€ã¡ãŒãžã䜿çšããæ¹æ³ã
- ããŒã 3: OpenShift ãã©ãããã©ãŒã äžã§ã¢ããªã±ãŒã·ã§ã³ã®éçºãµãŒããŒãå®è¡ããããŒã«ã« ãã¡ã€ã« ã·ã¹ãã ãšåæããæ¹æ³ã
è¿œå ãªãœãŒã¹
- ç¡æã®é»åæžç±
OpenShift ãžã®ããã〠. - æ
å ±
OpenShift ãš Kubernetes .
åºæïŒ habr.com