OpenShift рд╡рд░реАрд▓ рдЖрдзреБрдирд┐рдХ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕, рднрд╛рдЧ 2: рдЪреЗрди рдмрд┐рд▓реНрдбреНрд╕

рд╕рд░реНрд╡рд╛рдВрдирд╛ рдирдорд╕реНрдХрд╛рд░! рдЖрдордЪреНрдпрд╛ рдорд╛рд▓рд┐рдХреЗрддреАрд▓ рд╣реА рджреБрд╕рд░реА рдкреЛрд╕реНрдЯ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА Red Hat OpenShift рд╡рд░ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдХрд╕реЗ рддреИрдирд╛рдд рдХрд░рд╛рдпрдЪреЗ рддреЗ рджрд╛рдЦрд╡рддреЛ.

OpenShift рд╡рд░реАрд▓ рдЖрдзреБрдирд┐рдХ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕, рднрд╛рдЧ 2: рдЪреЗрди рдмрд┐рд▓реНрдбреНрд╕

рдорд╛рдЧреАрд▓ рдкреЛрд╕реНрдЯрдордзреНрдпреЗ, рдЖрдореНрд╣реА рдирд╡реАрди S2I (рд╕реНрд░реЛрдд-рдЯреВ-рдЗрдореЗрдЬ) рдмрд┐рд▓реНрдбрд░ рдЗрдореЗрдЬрдЪреНрдпрд╛ рдХреНрд╖рдорддрд╛рдВрдирд╛ рдХрд┐рдВрдЪрд┐рдд рд╕реНрдкрд░реНрд╢ рдХреЗрд▓рд╛, рдЬреЗ OpenShift рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЖрд╣реЗ. рдордЧ рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдЦрд╛рджреЗ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рддреНрд╡рд░реАрдд рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рд╖рдпрд╛рдд рд░рд╕ рд╣реЛрддрд╛ рдЖрдгрд┐ рдЖрдЬ рдЖрдореНрд╣реА S2I рдкреНрд░рддрд┐рдорд╛ тАЬрд╢реБрджреНрдзтАЭ рдмрд┐рд▓реНрдбрд░ рдЗрдореЗрдЬ рдореНрд╣рдгреВрди рдХрд╢реА рд╡рд╛рдкрд░рд╛рдпрдЪреА рдЖрдгрд┐ рддреА рд╕рдВрдмрдВрдзрд┐рдд OpenShift рдЕрд╕реЗрдВрдмреНрд▓реАрд╕рд╣ рдХрд╢реА рдЬреЛрдбрд╛рдпрдЪреА рддреЗ рдкрд╛рд╣реВ.

рд╕реНрд╡рдЪреНрдЫ рдмрд┐рд▓реНрдбрд░рдЪреА рдкреНрд░рддрд┐рдорд╛

рдЖрдореНрд╣реА рднрд╛рдЧ XNUMX рдордзреНрдпреЗ рдирдореВрдж рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдмрд╣реБрддреЗрдХ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреНрдпреЗ рддрдерд╛рдХрдерд┐рдд рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдЬ рдЕрд╕рддреЗ, рдЬреЗ рд╕рд╛рдорд╛рдиреНрдпрдд: рдХреЛрдб рдЯреНрд░рд╛рдиреНрд╕рдкрд┐рд▓реЗрд╢рди, рдорд▓реНрдЯрд┐рдкрд▓ рдлрд╛рдИрд▓ рдПрдХрддреНрд░реАрдХрд░рдг рдЖрдгрд┐ рдорд┐рдирд┐рдлрд┐рдХреЗрд╢рди рдпрд╛рд╕рд╛рд░рдЦреЗ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ. рдпрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реА - рдЖрдгрд┐ рд╣реЗ рд╕реНрдерд┐рд░ HTML, JavaScript рдЖрдгрд┐ CSS - рдЖрдЙрдЯрдкреБрдЯ рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдпрд╛ рдлреЛрд▓реНрдбрд░рдЪреЗ рд╕реНрдерд╛рди рд╕рд╣рд╕рд╛ рдХреЛрдгрддреА рдмрд┐рд▓реНрдб рдЯреВрд▓реНрд╕ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдд рдЖрд╣реЗрдд рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ рдЖрдгрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╕рд╛рдареА рд╣реЗ ./build рдлреЛрд▓реНрдбрд░ рдЕрд╕реЗрд▓ (рдЖрдореНрд╣реА рдЦрд╛рд▓реА рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╛рдиреЗ рдпрд╛рд╡рд░ рдкрд░рдд рдпреЗрдК).

рд╕реЛрд░реНрд╕-рдЯреВ-рдЗрдореЗрдЬ (S2I)

рдпрд╛ рдкреЛрд╕реНрдЯрдордзреНрдпреЗ рдЖрдореНрд╣реА "S2I рдореНрд╣рдгрдЬреЗ рдХрд╛рдп рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рд╡реЗ" рдпрд╛ рд╡рд┐рд╖рдпрд╛рд▓рд╛ рд╕реНрдкрд░реНрд╢ рдХрд░рдд рдирд╛рд╣реА (рдЖрдкрдг рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рдпреЗрдереЗ), рдкрд░рдВрддреБ рд╡реЗрдм рдЕреЕрдк рдмрд┐рд▓реНрдбрд░ рдкреНрд░рддрд┐рдорд╛ рдХрд╛рдп рдХрд░рддреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрддреАрд▓ рджреЛрди рдЪрд░рдгрд╛рдВрдмрджреНрджрд▓ рд╕реНрдкрд╖реНрдЯ рдЕрд╕рдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ.

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЯрдкреНрдкрд╛

рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдбреЙрдХрд░ рдмрд┐рд▓реНрдб рдЪрд╛рд▓рд╡рддрд╛ рдЖрдгрд┐ рдирд╡реАрди рдбреЙрдХрд░ рдкреНрд░рддрд┐рдореЗрд╕рд╣ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛ рдЕрд╕реЗрдВрдмреНрд▓реАрдЪрд╛ рдЯрдкреНрдкрд╛ рдирд┐рд╕рд░реНрдЧрд╛рдд рдЕрдЧрджреА рд╕рд╛рд░рдЦрд╛рдЪ рдЕрд╕рддреЛ. рддреНрдпрд╛рдиреБрд╕рд╛рд░, OpenShift рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдмрд┐рд▓реНрдб рд╕реБрд░реВ рдХрд░рддрд╛рдирд╛ рд╣рд╛ рдЯрдкреНрдкрд╛ рдпреЗрддреЛ.

рд╡реЗрдм рдЕреЕрдк рдмрд┐рд▓реНрдбрд░ рдЗрдореЗрдЬрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рддреБрдордЪреНрдпрд╛ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреЗ рдЕрд╡рд▓рдВрдмрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдмрд┐рд▓реНрдб рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рддреЗ рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХрддреНрд░ рдХрд░рд╛. рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдмрд┐рд▓реНрдбрд░ рдЗрдореЗрдЬ рдПрдирдкреАрдПрдо рд░рди рдмрд┐рд▓реНрдб рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рд╡рд╛рдкрд░рддреЗ, рдкрд░рдВрддреБ рд╣реЗ NPM_BUILD рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рджреНрд╡рд╛рд░реЗ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

рдЖрдореНрд╣реА рдЖрдзреА рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛, рдЖрдзреАрдЪ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреЗ рд╕реНрдерд╛рди рдЖрдкрдг рдХреЛрдгрддреА рд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рддрд╛ рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, React рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рд╣реЗ ./build рдлреЛрд▓реНрдбрд░ рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдЕрдБрдЧреБрд▓рд░ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рд╕рд╛рдареА рддреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ_рдиреЗрдо/рдбрд┐рд╕реНрдЯ рдлреЛрд▓реНрдбрд░ рдЕрд╕реЗрд▓. рдЖрдгрд┐, рдЖрдзреАрдЪреНрдпрд╛ рдкреЛрд╕реНрдЯрдордзреНрдпреЗ рджрд╛рдЦрд╡рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд░реЗрдХреНрдЯреНрд░реАрдЪреЗ рд╕реНрдерд╛рди, рдЬреЗ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреЗ OUTPUT_DIR рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рджреНрд╡рд╛рд░реЗ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдмрд░рдВ, рдЖрдЙрдЯрдкреБрдЯ рдлреЛрд▓реНрдбрд░рдЪреЗ рд╕реНрдерд╛рди рдлреНрд░реЗрдорд╡рд░реНрдХрдкрд╛рд╕реВрди рдлреНрд░реЗрдорд╡рд░реНрдХрдордзреНрдпреЗ рднрд┐рдиреНрди рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рддреБрдореНрд╣реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдЗрдореЗрдЬрдордзреАрд▓ рдорд╛рдирдХ рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рдХреЙрдкреА рдХрд░рд╛, рдореНрд╣рдгрдЬреЗ /opt/apt-root/output. рдпрд╛ рд▓реЗрдЦрд╛рдЪрд╛ рдЙрд░реНрд╡рд░рд┐рдд рднрд╛рдЧ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрддрд╛ рдЖрдкрдг рдкреБрдвреАрд▓ рдЯрдкреНрдкрд╛ - рдзрд╛рд╡рдгреНрдпрд╛рдЪрд╛ рдЯрдкреНрдкрд╛ рдкрдЯрдХрди рдкрд╛рд╣реВ.

рдзрд╛рд╡рдгреНрдпрд╛рдЪрд╛ рдЯрдкреНрдкрд╛

рдЬреЗрд╡реНрд╣рд╛ рдЕрд╕реЗрдВрдмрд▓реА рд╕реНрдЯреЗрдЬ рджрд░рдореНрдпрд╛рди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдирд╡реАрди рдкреНрд░рддрд┐рдореЗрд╡рд░ рдбреЙрдХрд░ рд░рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрд▓ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рд╣рд╛ рдЯрдкреНрдкрд╛ рдпреЗрддреЛ. OpenShift рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рддреИрдирд╛рдд рдХрд░рддрд╛рдирд╛ рдЕрд╕реЗрдЪ рдШрдбрддреЗ. рдбреАрдлреЙрд▓реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рд╛ рд╡рд╛рдкрд░рддреЗ рдореЙрдбреНрдпреВрд▓ рд╕рд░реНрд╡реНрд╣ рдХрд░рд╛ рд╡рд░реАрд▓ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рд╕реНрдерд┐рдд рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА.

рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рддреНрд╡рд░реАрдд рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рдкрджреНрдзрдд рдЪрд╛рдВрдЧрд▓реА рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рдд рдирд╛рд╣реА. рдмрд░рдВ, рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЖрдореНрд╣реА рдХреЗрд╡рд│ рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рджреЗрдд тАЛтАЛрдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдкреНрд░рддрд┐рдореЗрдордзреНрдпреЗ Node.js рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА - рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рдкреБрд░реЗрд╕рд╛ рдЕрд╕реЗрд▓.

рджреБрд╕-рдпрд╛ рд╢рдмреНрджрд╛рдд рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рдЕрд╕реЗрдВрдмрд▓ рдХрд░рддрд╛рдирд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХрд╛ рдЧреЛрд╖реНрдЯреАрдЪреА рдЧрд░рдЬ рдЕрд╕рддреЗ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛рдирд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рджреБрд╕рд░реА рдЧрд░рдЬ рдЕрд╕рддреЗ. рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рд╕рд╛рдЦрд│реА рдмрд╛рдВрдзрдгреА рдЙрдкрдпреЛрдЧреА рдкрдбрддреЗ.

рд╕рд╛рдЦрд│рджрдВрдб рдмрд╛рдВрдзрддрд╛рдд

рдпрд╛рдмрджреНрджрд▓ рддреЗ рд▓рд┐рд╣рд┐рддрд╛рдд рд╕рд╛рдЦрд│реА рдмрд╛рдВрдзрдгреА OpenShift рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдд:

"рджреЛрди рдЕрд╕реЗрдВрдмреНрд▓реА рдПрдХрддреНрд░ рдЬреЛрдбрд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдПрдХ рд╕рдВрдХрд▓рд┐рдд рдЕрд╕реНрддрд┐рддреНрд╡ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рдЖрдгрд┐ рджреБрд╕рд░реА рддреА рд╕рдВрд╕реНрдерд╛ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рддрд┐рдореЗрдордзреНрдпреЗ рд╣реЛрд╕реНрдЯ рдХрд░рддреЗ."

рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рдЖрдореНрд╣реА рдЖрдордЪреА рдмрд┐рд▓реНрдб рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрдм рдЕреЕрдк рдмрд┐рд▓реНрдбрд░ рдЗрдореЗрдЬ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рдирдВрддрд░ рдЖрдордЪреА рд╕рд╛рдордЧреНрд░реА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рдЗрдореЗрдЬ, рддреАрдЪ NGINX рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ.

рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЖрдореНрд╣реА рд╡реЗрдм рдЕреЕрдк рдмрд┐рд▓реНрдбрд░ рдкреНрд░рддрд┐рдорд╛ тАЬрд╢реБрджреНрдзтАЭ рдмрд┐рд▓реНрдбрд░ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рдПрдХ рд▓рд╣рд╛рди рд░рдирдЯрд╛рдЗрдо рдкреНрд░рддрд┐рдорд╛ рдареЗрд╡реВ рд╢рдХрддреЛ.

рдЖрддрд╛ рд╣реЗ рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгрд╛рд╕рд╣ рдкрд╛рд╣реВ.

рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╡рд╛рдкрд░реВ рд╕рд╛рдзрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, create-react-app рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ.

рд╣реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡рдХрд╛рд╣реА рдПрдХрддреНрд░ рдареЗрд╡рдгреНрдпрд╛рд╕ рдорджрдд рдХрд░реЗрд▓ 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 рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХрд╢рд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рд╣реЗ рдкреЕрд░рд╛рдореАрдЯрд░ рдЖрд╡рд╢реНрдпрдХрддреЗрдиреБрд╕рд╛рд░ рдмрджрд▓рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдЖрддрд╛ рдЗрдореЗрдЬрд╕реНрдЯреНрд░реАрдореНрд╕ рд╡рд┐рднрд╛рдЧрд╛рдд рдПрдХ рдирдЬрд░ рдЯрд╛рдХреВрдпрд╛.

- 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 рдЪреА рдУрд│ рд╕рд╛рдВрдЧрддреЗ рдХреА рдпрд╛ рдмрд┐рд▓реНрдбрдЪрд╛ рдкрд░рд┐рдгрд╛рдо рддреНрдпрд╛рдЪ react-web-app-builder рдЗрдореЗрдЬрдордзреНрдпреЗ рдареЗрд╡рд▓рд╛ рдЬрд╛рдИрд▓ рдЬреА рдЖрдореНрд╣реА рдЗрдореЗрдЬрд╕реНрдЯреНрд░реАрдореНрд╕ рд╡рд┐рднрд╛рдЧрд╛рдд рдереЛрдбреНрдпрд╛ рдЖрдзреА рдкрд╛рд╣рд┐рд▓реА рд╣реЛрддреА.

2 рд▓реЗрдмрд▓ рдЕрд╕рд▓реЗрд▓реА рдУрд│ рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдб рдХреБрдареВрди рдорд┐рд│рд╡рд╛рдпрдЪрд╛ рддреЗ рд╕рд╛рдВрдЧрддреЗ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рд╣реЗ рдПрдХ рдЧрд┐рдЯ рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдЖрд╣реЗ рдЖрдгрд┐ рд╕реНрдерд╛рди, рд╕рдВрджрд░реНрдн рдЖрдгрд┐ рд╕рдВрджрд░реНрдн рдлреЛрд▓реНрдбрд░ рдЖрдореНрд╣реА рд╡рд░ рдкрд╛рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рджреНрд╡рд╛рд░реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд.

3 рд▓реЗрдмрд▓ рдЕрд╕рд▓реЗрд▓реА рдУрд│ рдЖрдкрдг рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╡рд┐рднрд╛рдЧрд╛рдд рдЖрдзреАрдЪ рдкрд╛рд╣рд┐рд▓реА рдЖрд╣реЗ. рд╣реЗ OUTPUT_DIR рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдЬреЛрдбрддреЗ, рдЬреЗ рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдмрд┐рд▓реНрдб рдЖрд╣реЗ.
4 рд▓реЗрдмрд▓ рдЕрд╕рд▓реЗрд▓реА рдУрд│ рд╡реЗрдм-рдЕреЕрдк-рдмрд┐рд▓реНрдбрд░-рд░рдирдЯрд╛рдЗрдо рдЗрдореЗрдЬ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдВрдЧрддреЗ, рдЬреА рдЖрдореНрд╣реА рдЗрдореЗрдЬрд╕реНрдЯреНрд░реАрдо рд╡рд┐рднрд╛рдЧрд╛рдд рдЖрдзреАрдЪ рдкрд╛рд╣рд┐рд▓реА рдЖрд╣реЗ.

5 рд▓реЗрдмрд▓ рдЕрд╕рд▓реЗрд▓реА рдУрд│ рдореНрд╣рдгрддреЗ рдХреА S2I рдЗрдореЗрдЬ рд╕рдкреЛрд░реНрдЯ рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдгрд┐ рд╡реЗрдм рдЕреЕрдк рдмрд┐рд▓реНрдбрд░ рдЗрдореЗрдЬ рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдореНрд╣реА рд╡рд╛рдвреАрд╡ рдмрд┐рд▓реНрдб рд╡рд╛рдкрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ. рдкрд╣рд┐рд▓реНрдпрд╛ рд▓реЙрдиреНрдЪрд╡рд░, рдЕрд╕реЗрдВрдмреНрд▓реА рд╕реНрдЯреЗрдЬ рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рдЗрдореЗрдЬ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдлреЛрд▓реНрдбрд░рд▓рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХрд░реЗрд▓. рддреНрдпрд╛рдирдВрддрд░, рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ рдзрд╛рд╡рд╛рдВрд╡рд░, рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЗрдореЗрдЬ рд╣реЗ рдлреЛрд▓реНрдбрд░ рдЕрдирдЭрд┐рдк рдХрд░реЗрд▓.

рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, 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 рд╕рд╣ рдЯрд░реНрдордордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реЗ рдЧрдВрддрд╡реНрдп рдлреЛрд▓реНрдбрд░ рдлрдХреНрдд рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрд╣реЗ (рд╣реЗ рд╕рд░реНрд╡ рдЖрд╣реЗ, рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛, рдУрдкрдирд╢рд┐рдлреНрдЯ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рдЬрд╛рджреБрдИ рдЧреЛрд╖реНрдЯреАрдордзреНрдпреЗ рдЪрд╛рд▓рдд рдЖрд╣реЗ, рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рд╕реНрдерд╛рдирд┐рдХ рд╕рдВрдЧрдгрдХрд╛рд╡рд░ рдирд╛рд╣реА).

рд╕реНрдЯреНрд░реЕрдЯреЗрдЬреА рд╡рд┐рднрд╛рдЧ тАУ 6 рд▓реЗрдмрд▓ рдЕрд╕рд▓реЗрд▓реА рд▓рд╛рдЗрди тАУ рджреЗрдЦреАрд▓ рдкрд╣рд┐рд▓реНрдпрд╛ рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреНрд░рдорд╛рдгреЗрдЪ рдЖрд╣реЗ. рдлрдХреНрдд рдпрд╛рд╡реЗрд│реА рдЖрдореНрд╣реА 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.

рджреБрд╕рд░реА рдХрдорд╛рдВрдб рдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдирд╡реАрди рдНрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рддреЗ.

рдпрд╛ рдЖрдЬреНрдЮрд╛ рдХрд╛рд░реНрдп рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рдкрд╛рд╣реВ рдХреА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрди рдЕрд╕реЗрдВрдмреНрд▓реА рдЖрд╣реЗрдд:

OpenShift рд╡рд░реАрд▓ рдЖрдзреБрдирд┐рдХ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕, рднрд╛рдЧ 2: рдЪреЗрди рдмрд┐рд▓реНрдбреНрд╕

рдЖрдгрд┐ рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди рд╕реНрдХреНрд░реАрдирд╡рд░ рдкрд░рдд рдЖрд▓реНрдпрд╛рд╡рд░, рдЖрдореНрд╣реА рд▓реЙрдиреНрдЪ рдХреЗрд▓реЗрд▓рд╛ рдкреЙрдб рдкрд╛рд╣реВ:

OpenShift рд╡рд░реАрд▓ рдЖрдзреБрдирд┐рдХ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕, рднрд╛рдЧ 2: рдЪреЗрди рдмрд┐рд▓реНрдбреНрд╕

рджреБрд╡реНрдпрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛ рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдЕреЕрдкрд╡рд░ рдиреЗрд▓реЗ рдЬрд╛рдИрд▓, рдЬреЗ рдбреАрдлреЙрд▓реНрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕреЕрдк рдкреГрд╖реНрда рдЖрд╣реЗ:

OpenShift рд╡рд░реАрд▓ рдЖрдзреБрдирд┐рдХ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕, рднрд╛рдЧ 2: рдЪреЗрди рдмрд┐рд▓реНрдбреНрд╕

рдкреБрд░рд╡рдгреА 1

рдХреЛрдиреАрдп рдкреНрд░реЗрдореАрдВрд╕рд╛рдареА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЗрдЦреАрд▓ рдЖрд╣реЗ рдЙрджрд╛рд╣рд░рдг рдЕрд░реНрдЬ.

OUTPUT_DIR рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡рдЧрд│рддрд╛ рдпреЗрдереЗ рдирдореБрдирд╛ рд╕рдорд╛рди рдЖрд╣реЗ.

рдкреБрд░рд╡рдгреА 2

рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдореНрд╣реА NGINX рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реЗ, рдкрд░рдВрддреБ рддреЗ Apache рд╕рд╣ рдмрджрд▓рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ, рдлрдХреНрдд рдлрд╛рдЗрд▓рдордзреАрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрджрд▓рд╛ NGINX рдкреНрд░рддрд┐рдорд╛ рд╡рд░ рдЕрдкрд╛рдЪреЗ рдкреНрд░рддрд┐рдорд╛.

рдирд┐рд╖реНрдХрд░реНрд╖

рдпрд╛ рдорд╛рд▓рд┐рдХреЗрдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рднрд╛рдЧрд╛рдд, рдЖрдореНрд╣реА рдУрдкрдирд╢рд┐рдлреНрдЯ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рддреНрд╡рд░реАрдд рдХрд╕реЗ рддреИрдирд╛рдд рдХрд░рд╛рдпрдЪреЗ рддреЗ рджрд╛рдЦрд╡рд▓реЗ. рдЖрдЬ рдЖрдореНрд╣реА рд╡реЗрдм рдЕреЕрдк рдкреНрд░рддрд┐рдорд╛ рдХрд╛рдп рдХрд░рддреЗ рдЖрдгрд┐ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрди-рддрдпрд╛рд░ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рд▓реНрдб рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдЦрд│реАрдмрджреНрдз рдмрд┐рд▓реНрдб рд╡рд╛рдкрд░реВрди NGINX рд╕рд╛рд░рдЦреНрдпрд╛ рд╢реБрджреНрдз рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рддреЗ рдХрд╕реЗ рдПрдХрддреНрд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рддреЗ рдкрд╛рд╣рд┐рд▓реЗ. рдпрд╛ рдорд╛рд▓рд┐рдХреЗрддреАрд▓ рдкреБрдвреАрд▓ рдЖрдгрд┐ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА OpenShift рд╡рд░ рддреБрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░ рдХрд╕рд╛ рдЪрд╛рд▓рд╡рд╛рдпрдЪрд╛ рдЖрдгрд┐ рд╕реНрдерд╛рдирд┐рдХ рдЖрдгрд┐ рд░рд┐рдореЛрдЯ рдлрд╛рдЗрд▓реНрд╕рдЪреЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рдХрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╛рдпрдЪреЗ рддреЗ рджрд╛рдЦрд╡реВ.

рд▓реЗрдЦрд╛рдВрдЪреНрдпрд╛ рдпрд╛ рдорд╛рд▓рд┐рдХреЗрддреАрд▓ рд╕рд╛рдордЧреНрд░реА

  • рднрд╛рдЧ 1: рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдлрдХреНрдд рдХрд╛рд╣реА рдЪрд░рдгрд╛рдВрдордзреНрдпреЗ рдХрд╕реЗ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рдпрдЪреЗ;
  • рднрд╛рдЧ реи: рд╡рд┐рджреНрдпрдорд╛рди HTTP рд╕рд░реНрд╡реНрд╣рд░ рдкреНрд░рддрд┐рдореЗрд╕рд╣ рдирд╡реАрди S2I рдкреНрд░рддрд┐рдорд╛ рдХрд╢реА рд╡рд╛рдкрд░рд╛рдпрдЪреА, рдЬрд╕реЗ рдХреА NGINX, рдЙрддреНрдкрд╛рджрди рдЙрдкрдпреЛрдЬрдирд╛рд╕рд╛рдареА рд╕рдВрдмрдВрдзрд┐рдд OpenShift рдЕрд╕реЗрдВрдмреНрд▓реА рд╡рд╛рдкрд░реВрди;
  • рднрд╛рдЧ 3: OpenShift рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рддреБрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░ рдХрд╕рд╛ рдЪрд╛рд▓рд╡рд╛рдпрдЪрд╛ рдЖрдгрд┐ рддреЛ рд╕реНрдерд╛рдирд┐рдХ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рдХрд╕рд╛ рдХрд░рд╛рдпрдЪрд╛.

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЗ

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛