αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αŸ†αž“αžΎαž”αž“αŸ…αž›αžΎ OpenShift αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 2αŸ– αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‡αžΆαž…αŸ’αžšαžœαŸ‰αžΆαž€αŸ‹

αžŸαž½αžŸαŸ’αžαžΈβ€‹αž’αŸ’αž“αž€β€‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆ! αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž‘αžΈαž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸŠαŸαžšαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ‚αž›αž™αžΎαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžŠαžΆαž‰αž‘αŸ†αž“αžΎαž”αž“αŸ…αž›αžΎ Red Hat OpenShift αŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αŸ†αž“αžΎαž”αž“αŸ…αž›αžΎ OpenShift αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 2αŸ– αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‡αžΆαž…αŸ’αžšαžœαŸ‰αžΆαž€αŸ‹

αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž˜αž»αž“ αž™αžΎαž„αž”αžΆαž“αž”αŸ‰αŸ‡αž”αž“αŸ’αžαž·αž…αž›αžΎαžŸαž˜αžαŸ’αžαž—αžΆαž–αž“αŸƒαžšαžΌαž”αž—αžΆαž–αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαž S2I (αž”αŸ’αžšαž—αž–αž‘αŸ…αžšαžΌαž”αž—αžΆαž–) αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αžŸαžΆαž„ αž“αž·αž„αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžŠαžΆαž‰αž‘αŸ†αž“αžΎαž”αž“αŸ…αž›αžΎαžœαŸαž‘αž·αž€αžΆ OpenShift αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸƒαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž™αŸ‰αžΆαž„αžšαž αŸαžŸ αž αžΎαž™αžαŸ’αž„αŸƒαž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžšαž”αŸ€αž”αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž– S2I αž‡αžΆαžšαžΌαž”αž—αžΆαž–αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαž "αžŸαž»αž‘αŸ’αž’" αž αžΎαž™αž”αž‰αŸ’αž…αžΌαž›αžœαžΆαž‡αžΆαž˜αž½αž™αž€αžΆαžšαž•αŸ’αž‚αž»αŸ† OpenShift αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αŸ”

αžšαžΌαž”αž—αžΆαž–αž’αŸ’αž“αž€αžŸαžΆαž„αžŸαž„αŸ‹αžŸαŸ’αž’αžΆαž

αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž‘αžΈ XNUMX αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžŠαžΆαž‰αž‘αŸ†αž“αžΎαž”αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž˜αžΆαž“αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ‚αž›αž αŸ…αžαžΆ build αžŠαŸ‚αž›αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž€αžΌαžŠ αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž―αž€αžŸαžΆαžšαž…αŸ’αžšαžΎαž“ αž“αž·αž„αž€αžΆαžšαž”αž„αŸ’αžšαž½αž˜αžαžΌαž…αŸ” αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆ HTML αž‹αž·αžαž·αžœαž“αŸ’αž JavaScript αž“αž·αž„ CSS αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αžαžαž›αž‘αŸ’αž’αž•αž›αŸ” αž‘αžΈαžαžΆαŸ†αž„αžšαž”αžŸαŸ‹ Folder αž“αŸαŸ‡αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž› build tool αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ React αž“αŸαŸ‡αž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆ folder ./build (αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαž›αž”αŸ‹αž˜αž€αžœαžΆαžœαž·αž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαžαžΆαž„αž€αŸ’αžšαŸ„αž˜)αŸ”

αž”αŸ’αžšαž—αž–-αž‘αŸ…αžšαžΌαž”αž—αžΆαž– (S2I)

αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž“αŸαŸ‡ αž™αžΎαž„αž˜αž·αž“αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž”αŸ’αžšαž’αžΆαž“αž”αž‘ "αž’αŸ’αžœαžΈαž‡αžΆ S2I αž“αž·αž„αžšαž”αŸ€αž”αž”αŸ’αžšαžΎαžœαžΆ" (αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžšαžΏαž„αž“αŸαŸ‡αŸ” αž“αŸ…αž‘αžΈαž“αŸαŸ‡) αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž‡αžΆαžšαžΏαž„αžŸαŸ†αžαžΆαž“αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ†αž–αžΈαž‡αŸ†αž αžΆαž“αž–αžΈαžšαž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡ αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž– Web App Builder αž’αŸ’αžœαžΎαŸ”

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαŸ”

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αž‘αžΎαž„αž‚αžΊαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš docker build αž“αž·αž„αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αžšαžΌαž”αž—αžΆαž– Docker αžαŸ’αž˜αžΈαŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸαŸ‡αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž›αžΎαžœαŸαž‘αž·αž€αžΆ OpenShift αŸ”

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαžΌαž”αž—αžΆαž– Web App Builder αžœαžΆαž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš buildαŸ” αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžŸαŸ’αž‚αŸ’αžšαžΈαž”. αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžšαžΌαž”αž—αžΆαž–αž’αŸ’αž“αž€αžŸαžΆαž„αžŸαž„αŸ‹αž”αŸ’αžšαžΎ npm αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžŠαž·αžŸαŸαž’αžαžΆαž˜αžšαž™αŸˆαž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“ NPM_BUILD αŸ”

αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž“αž·αž™αžΆαž™αž˜αž»αž“αž“αŸαŸ‡ αž‘αžΈαžαžΆαŸ†αž„αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ αž“αž·αž„αž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹αžšαž½αž…αž αžΎαž™ αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž§αž”αž€αžšαžŽαŸαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈ React αžœαžΆαž“αžΉαž„αž‡αžΆ ./build folder αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Angular αžœαžΆαž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαžαž project_name/dist αŸ” αž αžΎαž™αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžšαž½αž…αž˜αž€αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž˜αž»αž“ αž‘αžΈαžαžΆαŸ†αž„αž“αŸƒαžαžαž›αž‘αŸ’αž’αž•αž› αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžŠαž·αžŸαŸαž’αžαžΆαž˜αžšαž™αŸˆαž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“ OUTPUT_DIR αŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž‘αžΈαžαžΆαŸ†αž„αž“αŸƒαžαžαž›αž‘αŸ’αž’αž•αž›αžαž»αžŸαž‚αŸ’αž“αžΆαž–αžΈαž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒαž˜αž½αž™αž‘αŸ…αž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒ αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αž˜αŸ’αž›αž„αž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αŸ…αžαžαž―αž€αžŸαžΆαžšαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– αž–αŸ„αž›αž‚αžΊ /opt/apt-root/output αŸ” αž“αŸαŸ‡αž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž–αžΈαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡ αž…αžΌαžšαž™αžΎαž„αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž™αŸ‰αžΆαž„αžšαž αŸαžŸ - αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžšαžαŸ‹αŸ”

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸαŸ‡αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž αŸ…αž‘αŸ…αž€αžΆαž“αŸ‹ docker run αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αž“αŸ…αž›αžΎαžšαžΌαž”αž—αžΆαž–αžαŸ’αž˜αžΈαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž€αŸ†αž‘αž»αž„αž–αŸαž›αž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαŸ” αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŠαŸ‚αžšαž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž“αŸ…αž›αžΎαžœαŸαž‘αž·αž€αžΆ OpenShift αŸ” αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž” αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž”αž˜αŸ’αžšαžΎαž˜αŸ‰αžΌαžŒαž»αž› αžŠαžΎαž˜αŸ’αž”αžΈαž”αž˜αŸ’αžšαžΎαž˜αžΆαžαž·αž€αžΆαž‹αž·αžαž·αžœαž“αŸ’αžαžŠαŸ‚αž›αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž›αž‘αŸ’αž’αž•αž›αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžαžΆαž„αž›αžΎαŸ”

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž‚αžΊαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž‘αžΌαž‘αŸ…αžœαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž”αž˜αŸ’αžšαžΎαž˜αžΆαžαž·αž€αžΆαž‹αž·αžαž·αžœαž“αŸ’αžαžαžΆαž˜αžœαž·αž’αžΈαž“αŸαŸ‡αž‘αŸαŸ” αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹ αžŠαŸ„αž™αžŸαžΆαžšαž€αžΆαžšαž–αž·αžαž™αžΎαž„αž”αž˜αŸ’αžšαžΎαžαŸ‚αž˜αžΆαžαž·αž€αžΆαž‹αž·αžαž·αžœαž“αŸ’αž αž™αžΎαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžš Node.js αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ - αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‚αŸαž αž‘αŸ†αž–αŸαžšαž“αžΉαž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αŸ”

αž˜αŸ’αž™αŸ‰αžΆαž„β€‹αž‘αŸ€αž αž–αŸαž›β€‹αžŠαŸ†αž‘αžΎαž„β€‹αž™αžΎαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž€αžΆαžšβ€‹αžšαž”αžŸαŸ‹β€‹αž˜αž½αž™ αž–αŸαž›β€‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· αž™αžΎαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž€αžΆαžšβ€‹αžšαž”αžŸαŸ‹β€‹αž˜αž½αž™β€‹αž‘αŸ€αžαŸ” αž€αŸ’αž“αž»αž„β€‹αžŸαŸ’αžαžΆαž“αž—αžΆαž–β€‹αž“αŸαŸ‡ αž€αžΆαžšβ€‹αžŸαžΆαž„β€‹αžŸαž„αŸ‹β€‹αžŠαŸ‚αž›β€‹αž‡αžΆαž”αŸ‹β€‹αž‡αžΆβ€‹αž…αŸ’αžšαžœαžΆαž€αŸ‹β€‹αž˜αž€β€‹αž‡αžΆβ€‹αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαŸ”

αžŸαŸ†αžŽαž„αŸ‹αž‡αžΆαž”αŸ‹αž…αŸ’αžšαžœαŸ‰αžΆαž€αŸ‹

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžŸαžšαžŸαŸαžšαž’αŸ†αž–αžΈ αžŸαŸ†αžŽαž„αŸ‹αž‡αžΆαž”αŸ‹αž…αŸ’αžšαžœαŸ‰αžΆαž€αŸ‹ αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš OpenShiftαŸ–

"αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαž–αžΈαžšαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž˜αž½αž™αž”αž„αŸ’αž€αžΎαžαž’αž„αŸ’αž‚αž—αžΆαž–αž…αž„αž€αŸ’αžšαž„ αž“αž·αž„αž˜αž½αž™αž‘αŸ€αžαž”αž„αŸ’αž αŸ„αŸ‡αž’αž„αŸ’αž‚αž—αžΆαž–αž“αŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž„αŸ’αž‚αž—αžΆαž–αž“αŸ„αŸ‡αŸ”"

αž˜αŸ’αž™αŸ‰αžΆαž„αžœαž·αž‰αž‘αŸ€αž αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž– Web App Builder αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαž”αžŸαŸ‹αž™αžΎαž„ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž–αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‚αŸαž αž‘αŸ†αž–αŸαžš NGINX αžŠαžΌαž…αž‚αŸ’αž“αžΆ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž˜αŸ’αžšαžΎαž˜αžΆαžαž·αž€αžΆαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž– Web App Builder αž‡αžΆαž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαž "αžŸαž»αž‘αŸ’αž’" αž αžΎαž™αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αž˜αžΆαž“αžšαžΌαž”αž—αžΆαž–αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΌαž…αž˜αž½αž™αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžšαžΏαž„αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αžŽαŸ’αžαž»αŸ‡αž”αžŽαŸ’αžαžΆαž›αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ’αžšαžαž·αž€αž˜αŸ’αž˜αžŸαžΆαž˜αž‰αŸ’αž‰αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αž„αŸ’αž€αžΎαž-react-app command lineαŸ”

αžœαžΆαž“αžΉαž„αž‡αž½αž™αž™αžΎαž„αžŠαžΆαž€αŸ‹αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžšαž½αž˜αž‚αŸ’αž“αžΆ αž―αž€αžŸαžΆαžšαž‚αŸ†αžšαžΌ 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 αž“αŸ…αž›αžΎ αž˜αž‡αŸ’αžˆαž˜αžŽαŸ’αžŒαž› Docker.

αž‘αžΈαž”αž½αž“αž‚αžΊαž‡αžΆαžšαžΌαž”αž—αžΆαž– NGINX (αž€αŸ†αžŽαŸ‚ 1.12) αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαž“αŸ…αž›αžΎ αž˜αž‡αŸ’αžˆαž˜αžŽαŸ’αžŒαž› Docker.

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžšαžΌαž”αž—αžΆαž–αž–αžΈαžšαžŠαŸ†αž”αžΌαž„αŸ” αž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αž–αžΈαžšαž‘αž‘αŸαž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžαŸ‚αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŸαžΆαž„αžŸαž„αŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžšαžΌαž”αž—αžΆαž–αž‘αžΈαž˜αž½αž™ 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 αž“αž·αž™αžΆαž™αžαžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– react-web-app-builder αžŠαžΌαž…αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αžƒαžΎαž‰αž˜αž»αž“αž“αŸαŸ‡αž”αž“αŸ’αžαž·αž…αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ ImageStreams αŸ”

αž”αž“αŸ’αž‘αžΆαžαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αž›αŸαž 2 αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž–αžΈαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž™αž€αž›αŸαžαž€αžΌαžŠαž–αžΈαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžƒαŸ’αž›αžΆαŸ†αž„ git αž αžΎαž™αž‘αžΈαžαžΆαŸ†αž„ ref αž“αž·αž„αžαžαž”αžšαž·αž”αž‘αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αžƒαžΎαž‰αžαžΆαž„αž›αžΎαžšαž½αž…αž αžΎαž™αŸ”

αž”αž“αŸ’αž‘αžΆαžαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αž›αŸαž 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 αž€αŸ’αž“αž»αž„β€‹αž€αžšαžŽαžΈβ€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αž‚αžΊ /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 αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ–

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αŸ†αž“αžΎαž”αž“αŸ…αž›αžΎ OpenShift αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 2αŸ– αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‡αžΆαž…αŸ’αžšαžœαŸ‰αžΆαž€αŸ‹

αž”αž“αŸ’αžαŸ‚αž˜αž†αŸ’αž“αžΆαŸ† ្០្០

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŸαŸ’αžšαž›αžΆαž‰αŸ‹ Angular αž™αžΎαž„αž€αŸαž˜αžΆαž“αž•αž„αžŠαŸ‚αžšαŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž§αž‘αžΆαž αžšαžŽαŸ.

αž›αŸ†αž“αžΆαŸ†αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‚αžΊαžŠαžΌαž…αž‚αŸ’αž“αžΆ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αž’αžαŸαžš OUTPUT_DIR αŸ”

αž”αž“αŸ’αžαŸ‚αž˜αž†αŸ’αž“αžΆαŸ† ្០្០

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎ NGINX αž‡αžΆ web server αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‡αŸ†αž“αž½αžŸαžœαžΆαžŠαŸ„αž™ Apache αžŠαŸ„αž™αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αŸ’αžαžΌαžš template αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš αžšαžΌαž”αžαžαžšαž”αžŸαŸ‹ NGINX αž“αŸ…αž›αžΎ αžšαžΌαž”αž—αžΆαž– Apache.

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžŠαŸ†αž”αžΌαž„αž“αŸƒαžŸαŸŠαŸαžšαžΈαž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžαžΆαž‰αž‘αŸ†αž“αžΎαž”αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαž“αŸ…αž›αžΎαžœαŸαž‘αž·αž€αžΆ OpenShift αŸ” αžαŸ’αž„αŸƒαž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž–αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžšαž’αŸ’αžœαžΎ αž“αž·αž„αžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžŸαŸ†αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‚αŸαž αž‘αŸ†αž–αŸαžšαžŸαž»αž‘αŸ’αž’αžŠαžΌαž…αž‡αžΆ NGINX αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαž‡αžΆαž…αŸ’αžšαžœαŸ‰αžΆαž€αŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αž›αž·αžαž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž“αž·αž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸŠαŸαžšαžΈαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αŸ…αž›αžΎ OpenShift αž“αž·αž„αž’αžΆαž“αžΆαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž“αŸƒαž―αž€αžŸαžΆαžšαž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€ αž“αž·αž„αž–αžΈαž…αž˜αŸ’αž„αžΆαž™αŸ”

αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαžŸαŸŠαŸαžšαžΈαž“αŸƒαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ”

  • αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1αŸ– αžšαž”αŸ€αž”αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžŠαžΆαž‰αž‘αŸ†αž“αžΎαž”αžŠαŸ„αž™αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž–αžΈαžšαž”αžΈαž‡αŸ†αž αžΆαž“αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”;
  • αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 2αŸ– αžšαž”αŸ€αž”αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž– S2I αžαŸ’αž˜αžΈαž‡αžΆαž˜αž½αž™αžšαžΌαž”αž—αžΆαž–αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ HTTP αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ αžŠαžΌαž…αž‡αžΆ NGINX αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹ OpenShift αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž•αž›αž·αžαž€αž˜αŸ’αž˜αŸ”
  • αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 3αŸ– αžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αŸ…αž›αžΎαžœαŸαž‘αž·αž€αžΆ OpenShift αž αžΎαž™αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αžœαžΆαž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ”

αž’αž“αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹