์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ! ์ด๋ Red Hat OpenShift์์ ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์๋ฆฌ์ฆ์ ๋ ๋ฒ์งธ ๊ฒ์๋ฌผ์ ๋๋ค.
์ด์ ๊ฒ์๋ฌผ์์๋ OpenShift ํ๋ซํผ์์ ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๊ณ ๋ฐฐํฌํ๋๋ก ์ค๊ณ๋ ์๋ก์ด S2I(์์ค-์ด๋ฏธ์ง) ๋น๋ ์ด๋ฏธ์ง์ ๊ธฐ๋ฅ์ ๋ํด ์ฝ๊ฐ ๋ค๋ฃจ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ๋ ์ฃผ์ ์ ๊ด์ฌ์ด ์์๊ณ ์ค๋์ 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์ ๋ณต์ฌํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ์ด ๊ธฐ์ฌ์ ๋๋จธ์ง ๋ถ๋ถ์ ์ดํดํ๋ ๋ฐ ์ค์ํ์ง๋ง ์ง๊ธ์ ๋ค์ ๋จ๊ณ์ธ ์คํ ๋จ๊ณ๋ฅผ ๋น ๋ฅด๊ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์คํ ๋จ๊ณ
์ด ๋จ๊ณ๋ ์ด์
๋ธ๋ฆฌ ๋จ๊ณ์์ ์์ฑ๋ ์ ์ด๋ฏธ์ง์ ๋ํด docker run์ด ํธ์ถ๋ ๋ ๋ฐ์ํฉ๋๋ค. 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์ด๋ฉฐ 8.x ํ๊ทธ๊ฐ ์ง์ ๋ nodeshift/ubi2-s10i-web-app์์ ๊ฐ์ ธ์จ ๊ฒ์
๋๋ค.
๋ค ๋ฒ์งธ๋ ์ต์ ํ๊ทธ๊ฐ ์๋ 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 ์น์ ์์ ๋ณธ ๊ฒ๊ณผ ๋์ผํ React-web-app-builder ์ด๋ฏธ์ง์ ๋ฐฐ์น๋ ๊ฒ์์ ๋ํ๋ ๋๋ค.
2๋ก ํ์๋ ์ค์ ์ฝ๋๋ฅผ ์ด๋์ ์ป์ ์ ์๋์ง ์๋ ค์ค๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ด๋ git ์ ์ฅ์์ด๋ฉฐ ์์น, ์ฐธ์กฐ ๋ฐ ์ปจํ ์คํธ ํด๋๋ ์์์ ์ด๋ฏธ ๋ณธ ๋งค๊ฐ๋ณ์์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
3์ผ๋ก ํ์๋ ์ค์ ๋งค๊ฐ๋ณ์ ์น์
์์ ์ด๋ฏธ ๋ณธ ๊ฒ์
๋๋ค. ์ด ์์ ์์๋ build๋ผ๋ OUTPUT_DIR ํ๊ฒฝ ๋ณ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
4๋ผ๊ณ ํ์๋ ์ค์ ImageStream ์น์
์์ ์ด๋ฏธ ๋ณธ web-app-builder-runtime ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ผ๋ ์๋ฏธ์
๋๋ค.
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๋ก ํ์๋ ์ค์ ์๋ก์ด ๊ฒ์ด ์๋๋๋ค. ๋จ์ํ ๋น๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ ์น ์ฑ ๋ฐํ์ ์ด๋ฏธ์ง์ ์ ์ฅ๋๋ค๋ ์๋ฏธ์ ๋๋ค.
์ด์ ๊ตฌ์ฑ์์์ ๊ฐ์ด 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์ ์ฐพ๊ธฐ ์ํ ์๋์ ์ธ ์์ง๋์ด๋ง ๋ฐฉ๋ฒ์ ๋๋ค.
๋ ๋ฒ์งธ ๋ช ๋ น์ ์ด ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํฉ๋๋ค.
์ด๋ฌํ ๋ช ๋ น์ด ์๋ํ๋ฉด ๋ ๊ฐ์ ์ด์ ๋ธ๋ฆฌ๊ฐ ์์์ ์ ์ ์์ต๋๋ค.
๊ฐ์ ํ๋ฉด์ผ๋ก ๋์๊ฐ๋ฉด ์คํ๋ ํฌ๋๊ฐ ํ์๋ฉ๋๋ค.
๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ๊ธฐ๋ณธ React ์ฑ ํ์ด์ง์ธ ์ฑ์ผ๋ก ์ด๋ํฉ๋๋ค.
๋ณด์ถฉ 1
Angular ์ ํธ๊ฐ๋ค์ ์ํด ์ฐ๋ฆฌ๋ ๋ํ
OUTPUT_DIR ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ฌ๊ธฐ์ ํจํด์ ๋์ผํฉ๋๋ค.
๋ณด์ถฉ 2
์ด ๊ธฐ์ฌ์์๋ NGINX๋ฅผ ์น ์๋ฒ๋ก ์ฌ์ฉํ์ง๋ง ์ด๋ฅผ Apache๋ก ๊ต์ฒดํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค. ํ์ผ์์ ํ
ํ๋ฆฟ์ ๋ณ๊ฒฝํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๊ฒฐ๋ก
์ด ์๋ฆฌ์ฆ์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์์๋ OpenShift ํ๋ซํผ์ ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๊ฒ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ์ค๋ ์ฐ๋ฆฌ๋ ์น ์ฑ ์ด๋ฏธ์ง์ ๊ธฐ๋ฅ๊ณผ ์ฒด์ธ ๋น๋๋ฅผ ์ฌ์ฉํ์ฌ ์น ์ฑ ์ด๋ฏธ์ง๋ฅผ NGINX์ ๊ฐ์ ์์ ์น ์๋ฒ์ ๊ฒฐํฉํ์ฌ ๋ณด๋ค ์์ฐ ์ค๋น๊ฐ ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ต๋๋ค. ์ด ์๋ฆฌ์ฆ์ ๋ค์ ๊ธฐ์ฌ์ด์ ๋ง์ง๋ง ๊ธฐ์ฌ์์๋ OpenShift์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฉ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์คํํ๊ณ ๋ก์ปฌ ๋ฐ ์๊ฒฉ ํ์ผ์ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ด ๊ธฐ์ฌ ์๋ฆฌ์ฆ์ ๋ด์ฉ
- ํํธ 1 :
๋จ ๋ช ๋จ๊ณ๋ง์ผ๋ก ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ ; - 2๋ถ: ํ๋ก๋์ ๋ฐฐํฌ๋ฅผ ์ํด ์ฐ๊ฒฐ๋ OpenShift ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ NGINX์ ๊ฐ์ ๊ธฐ์กด HTTP ์๋ฒ ์ด๋ฏธ์ง์ ํจ๊ป ์ S2I ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- 3๋ถ: OpenShift ํ๋ซํผ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ฉ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์คํํ๊ณ ์ด๋ฅผ ๋ก์ปฌ ํ์ผ ์์คํ ๊ณผ ๋๊ธฐํํ๋ ๋ฐฉ๋ฒ.
์ถ๊ฐ ๋ฆฌ์์ค
- ๋ฌด๋ฃ ์ ์์ฑ
OpenShift์ ๋ฐฐํฌ . - ์ ๊ดํ ์ ๋ณด
์คํ์ํํธ์ ์ฟ ๋ฒ๋คํฐ์ค .
์ถ์ฒ : habr.com