OpenShiftలో ఆధునిక అప్లికేషన్లు, పార్ట్ 2: చైన్డ్ బిల్డ్లు
అందరికి వందనాలు! Red Hat OpenShiftలో ఆధునిక వెబ్ అప్లికేషన్లను ఎలా అమర్చాలో మేము చూపించే మా సిరీస్లో ఇది రెండవ పోస్ట్.
మునుపటి పోస్ట్లో, ఓపెన్షిఫ్ట్ ప్లాట్ఫారమ్లో ఆధునిక వెబ్ అప్లికేషన్లను రూపొందించడానికి మరియు అమలు చేయడానికి రూపొందించబడిన కొత్త S2I (సోర్స్-టు-ఇమేజ్) బిల్డర్ ఇమేజ్ యొక్క సామర్థ్యాలను మేము కొద్దిగా స్పృశించాము. అప్పుడు మేము అప్లికేషన్ను త్వరగా అమలు చేసే అంశంపై ఆసక్తి కలిగి ఉన్నాము మరియు ఈ రోజు మనం S2I చిత్రాన్ని “స్వచ్ఛమైన” బిల్డర్ ఇమేజ్గా ఎలా ఉపయోగించాలో మరియు సంబంధిత OpenShift సమావేశాలతో ఎలా కలపాలో పరిశీలిస్తాము.
క్లీన్ బిల్డర్ చిత్రం
మేము పార్ట్ XNUMXలో పేర్కొన్నట్లుగా, చాలా ఆధునిక వెబ్ అప్లికేషన్లు బిల్డ్ స్టేజ్ అని పిలవబడేవి కలిగి ఉంటాయి, ఇవి సాధారణంగా కోడ్ ట్రాన్స్పిలేషన్, మల్టిపుల్ ఫైల్ కన్కాటెనేషన్ మరియు మినిఫికేషన్ వంటి కార్యకలాపాలను నిర్వహిస్తాయి. ఈ ఆపరేషన్ల ఫలితంగా పొందిన ఫైల్లు - మరియు ఇది స్టాటిక్ HTML, జావాస్క్రిప్ట్ మరియు CSS - అవుట్పుట్ ఫోల్డర్లో నిల్వ చేయబడతాయి. ఈ ఫోల్డర్ యొక్క స్థానం సాధారణంగా ఏ బిల్డ్ టూల్స్ ఉపయోగించబడుతుందనే దానిపై ఆధారపడి ఉంటుంది మరియు రియాక్ట్ కోసం ఇది ./build ఫోల్డర్ అవుతుంది (మేము దీనికి దిగువ మరింత వివరంగా తిరిగి వస్తాము).
సోర్స్-టు-ఇమేజ్ (S2I)
ఈ పోస్ట్లో మేము “S2I అంటే ఏమిటి మరియు దానిని ఎలా ఉపయోగించాలి” అనే అంశంపై తాకము (మీరు దీని గురించి మరింత చదవగలరు. ఇక్కడ), అయితే వెబ్ యాప్ బిల్డర్ చిత్రం ఏమి చేస్తుందో అర్థం చేసుకోవడానికి ఈ ప్రక్రియలో రెండు దశల గురించి స్పష్టంగా తెలుసుకోవడం ముఖ్యం.
అసెంబ్లీ దశ
అసెంబ్లీ దశ మీరు డాకర్ బిల్డ్ని అమలు చేసినప్పుడు మరియు కొత్త డాకర్ ఇమేజ్తో ముగించినప్పుడు ఏమి జరుగుతుందో దానికి చాలా పోలి ఉంటుంది. దీని ప్రకారం, OpenShift ప్లాట్ఫారమ్లో నిర్మాణాన్ని ప్రారంభించేటప్పుడు ఈ దశ జరుగుతుంది.
వెబ్ యాప్ బిల్డర్ ఇమేజ్ విషయంలో, మీ అప్లికేషన్ డిపెండెన్సీలను ఇన్స్టాల్ చేయడం మరియు బిల్డ్ను రన్ చేయడం కోసం ఇది బాధ్యత వహిస్తుంది. స్క్రిప్ట్ని సమీకరించండి. డిఫాల్ట్గా, బిల్డర్ ఇమేజ్ npm రన్ బిల్డ్ కన్స్ట్రక్ట్ని ఉపయోగిస్తుంది, అయితే ఇది NPM_BUILD ఎన్విరాన్మెంట్ వేరియబుల్ ద్వారా ఓవర్రైడ్ చేయబడుతుంది.
మేము ఇంతకు ముందే చెప్పినట్లుగా, పూర్తయిన, ఇప్పటికే నిర్మించిన అప్లికేషన్ యొక్క స్థానం మీరు ఉపయోగించే సాధనాలపై ఆధారపడి ఉంటుంది. ఉదాహరణకు, రియాక్ట్ విషయంలో ఇది ./build ఫోల్డర్ అవుతుంది మరియు కోణీయ అప్లికేషన్ల కోసం ఇది project_name/dist ఫోల్డర్ అవుతుంది. మరియు, మునుపటి పోస్ట్లో ఇప్పటికే చూపినట్లుగా, డిఫాల్ట్గా నిర్మించడానికి సెట్ చేయబడిన అవుట్పుట్ డైరెక్టరీ స్థానాన్ని OUTPUT_DIR ఎన్విరాన్మెంట్ వేరియబుల్ ద్వారా భర్తీ చేయవచ్చు. సరే, అవుట్పుట్ ఫోల్డర్ యొక్క స్థానం ఫ్రేమ్వర్క్ నుండి ఫ్రేమ్వర్క్కు భిన్నంగా ఉంటుంది కాబట్టి, మీరు రూపొందించిన అవుట్పుట్ను ఇమేజ్లోని ప్రామాణిక ఫోల్డర్కు కాపీ చేయండి, అవి /opt/apt-root/output. ఈ కథనంలోని మిగిలిన భాగాలను అర్థం చేసుకోవడానికి ఇది చాలా ముఖ్యం, అయితే ప్రస్తుతానికి తదుపరి దశ - రన్ దశను త్వరగా చూద్దాం.
రన్ దశ
అసెంబ్లీ దశలో సృష్టించబడిన కొత్త ఇమేజ్పై డాకర్ రన్కు కాల్ చేసినప్పుడు ఈ దశ జరుగుతుంది. OpenShift ప్లాట్ఫారమ్లో అమలు చేస్తున్నప్పుడు అదే జరుగుతుంది. డిఫాల్ట్ స్క్రిప్ట్ని అమలు చేయండి ఉపయోగాలు సర్వ్ మాడ్యూల్ ఎగువ ప్రామాణిక అవుట్పుట్ డైరెక్టరీలో ఉన్న స్టాటిక్ కంటెంట్ను అందించడానికి.
అప్లికేషన్లను త్వరగా అమలు చేయడానికి ఈ పద్ధతి మంచిది, కానీ సాధారణంగా స్టాటిక్ కంటెంట్ను ఈ విధంగా అందించడం సిఫార్సు చేయబడదు. వాస్తవానికి మేము స్టాటిక్ కంటెంట్ను మాత్రమే అందిస్తాము కాబట్టి, మా చిత్రం లోపల Node.js ఇన్స్టాల్ చేయబడాల్సిన అవసరం లేదు - వెబ్ సర్వర్ సరిపోతుంది.
మరో మాటలో చెప్పాలంటే, అసెంబ్లింగ్ చేసేటప్పుడు మనకు ఒక విషయం అవసరం, అమలు చేసేటప్పుడు మరొకటి అవసరం. ఈ పరిస్థితిలో, చైన్డ్ బిల్డ్స్ ఉపయోగపడతాయి.
"రెండు అసెంబ్లీలను ఒకదానితో ఒకటి అనుసంధానించవచ్చు, ఒకటి కంపైల్డ్ ఎంటిటీని ఉత్పత్తి చేస్తుంది మరియు మరొకటి ఆ ఎంటిటీని అమలు చేయడానికి ఉపయోగించే ప్రత్యేక చిత్రంలో ఆ ఎంటిటీని హోస్ట్ చేస్తుంది."
మరో మాటలో చెప్పాలంటే, మేము మా బిల్డ్ను అమలు చేయడానికి వెబ్ యాప్ బిల్డర్ చిత్రాన్ని ఉపయోగించవచ్చు, ఆపై మా కంటెంట్ను అందించడానికి వెబ్ సర్వర్ ఇమేజ్, అదే NGINXని ఉపయోగించవచ్చు.
అందువల్ల, మేము వెబ్ యాప్ బిల్డర్ చిత్రాన్ని "స్వచ్ఛమైన" బిల్డర్గా ఉపయోగించవచ్చు మరియు అదే సమయంలో చిన్న రన్టైమ్ ఇమేజ్ని కలిగి ఉండవచ్చు.
ఇప్పుడు దీన్ని ఒక నిర్దిష్ట ఉదాహరణతో చూద్దాం.
శిక్షణ కోసం మేము ఉపయోగిస్తాము సాధారణ రియాక్ట్ అప్లికేషన్, create-react-app కమాండ్ లైన్ సాధనాన్ని ఉపయోగించి సృష్టించబడింది.
ఈ ఫైల్ను మరింత వివరంగా చూద్దాం మరియు పారామితుల విభాగంతో ప్రారంభించండి.
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 పరామితిపై దృష్టి పెట్టడం విలువ. మా ఉదాహరణలోని రియాక్ట్ అప్లికేషన్ కోసం, చింతించాల్సిన పని లేదు, ఎందుకంటే రియాక్ట్ డిఫాల్ట్ విలువను అవుట్పుట్ ఫోల్డర్గా ఉపయోగిస్తుంది, అయితే కోణీయ లేదా మరేదైనా విషయంలో, ఈ పరామితిని అవసరమైన విధంగా మార్చవలసి ఉంటుంది.
మూడవ మరియు నాల్గవ చిత్రాలను పరిశీలించండి. అవి రెండూ డాకర్ చిత్రాలుగా నిర్వచించబడ్డాయి మరియు అవి ఎక్కడ నుండి వచ్చాయో మీరు స్పష్టంగా చూడవచ్చు.
మూడవ చిత్రం వెబ్-యాప్-బిల్డర్ మరియు ఇది 8.x ట్యాగ్ చేయబడిన nodeshift/ubi2-s10i-web-app నుండి వచ్చింది డాకర్ హబ్.
నాల్గవది తాజా ట్యాగ్తో NGINX చిత్రం (వెర్షన్ 1.12). డాకర్ హబ్.
ఇప్పుడు మొదటి రెండు చిత్రాలను చూద్దాం. అవి రెండూ ప్రారంభంలో ఖాళీగా ఉన్నాయి మరియు నిర్మాణ దశలో మాత్రమే సృష్టించబడతాయి. మొదటి చిత్రం, రియాక్ట్-వెబ్-యాప్-బిల్డర్, వెబ్-యాప్-బిల్డర్-రన్టైమ్ ఇమేజ్ మరియు మా సోర్స్ కోడ్ను మిళితం చేసే అసెంబ్లీ దశ ఫలితంగా ఉంటుంది. అందుకే మేము ఈ చిత్రం పేరుకు “-బిల్డర్”ని జోడించాము.
రెండవ చిత్రం - react-web-app-runtime - nginx-image-runtime మరియు react-web-app-builder చిత్రం నుండి కొన్ని ఫైల్లను కలపడం ఫలితంగా ఉంటుంది. ఈ చిత్రం విస్తరణ సమయంలో కూడా ఉపయోగించబడుతుంది మరియు మా అప్లికేషన్ యొక్క వెబ్ సర్వర్ మరియు స్టాటిక్ HTML, JavaScript, CSS మాత్రమే ఉంటుంది.
గందరగోళం? ఇప్పుడు బిల్డ్ కాన్ఫిగరేషన్లను పరిశీలిద్దాం మరియు అది కొంచెం స్పష్టంగా మారుతుంది.
మా టెంప్లేట్లో రెండు బిల్డ్ కాన్ఫిగరేషన్లు ఉన్నాయి. ఇక్కడ మొదటిది మరియు ఇది చాలా ప్రామాణికమైనది:
మీరు చూడగలిగినట్లుగా, లేబుల్ 1తో ఉన్న లైన్ ఈ బిల్డ్ యొక్క ఫలితం ఇమేజ్స్ట్రీమ్ల విభాగంలో మనం కొంచెం ముందుగా చూసిన అదే రియాక్ట్-వెబ్-యాప్-బిల్డర్ ఇమేజ్లో ఉంచబడుతుంది.
2 అని లేబుల్ చేయబడిన లైన్ కోడ్ను ఎక్కడ నుండి పొందాలో మీకు తెలియజేస్తుంది. మా విషయంలో, ఇది ఒక git రిపోజిటరీ, మరియు లొకేషన్, ref మరియు కాంటెక్స్ట్ ఫోల్డర్ మనం ఇప్పటికే పైన చూసిన పారామితుల ద్వారా నిర్ణయించబడతాయి.
3 అని లేబుల్ చేయబడిన లైన్ మనం ఇప్పటికే పారామితుల విభాగంలో చూసాము. ఇది OUTPUT_DIR ఎన్విరాన్మెంట్ వేరియబుల్ని జోడిస్తుంది, ఇది మా ఉదాహరణలో బిల్డ్.
4 అని లేబుల్ చేయబడిన లైన్ వెబ్-యాప్-బిల్డర్-రన్టైమ్ ఇమేజ్ని ఉపయోగించమని చెబుతుంది, ఇది మనం ఇప్పటికే ఇమేజ్స్ట్రీమ్ విభాగంలో చూసింది.
S5I ఇమేజ్ మద్దతిస్తుంటే మరియు వెబ్ యాప్ బిల్డర్ ఇమేజ్ సపోర్ట్ చేస్తే మేము ఇంక్రిమెంటల్ బిల్డ్ని ఉపయోగించాలనుకుంటున్నామని 2 లేబుల్ చేసిన లైన్ చెబుతోంది. మొదటి లాంచ్లో, అసెంబ్లీ దశ పూర్తయిన తర్వాత, చిత్రం node_modules ఫోల్డర్ను ఆర్కైవ్ ఫైల్లో సేవ్ చేస్తుంది. ఆపై, తదుపరి పరుగులలో, బిల్డ్ సమయాన్ని తగ్గించడానికి చిత్రం ఈ ఫోల్డర్ను అన్జిప్ చేస్తుంది.
చివరగా, 6 అని లేబుల్ చేయబడిన లైన్ ఏదైనా మారినప్పుడు, మాన్యువల్ జోక్యం లేకుండా స్వయంచాలకంగా బిల్డ్ను అమలు చేయడానికి కొన్ని ట్రిగ్గర్లు మాత్రమే.
మొత్తంమీద ఇది చాలా ప్రామాణిక బిల్డ్ కాన్ఫిగరేషన్.
ఇప్పుడు రెండవ బిల్డ్ కాన్ఫిగరేషన్ను పరిశీలిద్దాం. ఇది మొదటిదానికి చాలా పోలి ఉంటుంది, కానీ ఒక ముఖ్యమైన తేడా ఉంది.
కాబట్టి రెండవ బిల్డ్ కాన్ఫిగరేషన్ రియాక్ట్-వెబ్-యాప్-రన్టైమ్, మరియు ఇది చాలా ప్రామాణికంగా ప్రారంభమవుతుంది.
1 అని లేబుల్ చేయబడిన పంక్తి కొత్తదేమీ కాదు - బిల్డ్ ఫలితం రియాక్ట్-వెబ్-యాప్-రన్టైమ్ ఇమేజ్లో ఉంచబడిందని ఇది చెబుతుంది.
మునుపటి కాన్ఫిగరేషన్లో వలె 2 అని లేబుల్ చేయబడిన పంక్తి సోర్స్ కోడ్ను ఎక్కడ నుండి పొందాలో సూచిస్తుంది. కానీ ఇక్కడ మనం చిత్రం నుండి తీసుకున్నామని చెబుతున్నామని గమనించండి. అంతేకాకుండా, మేము ఇప్పుడే సృష్టించిన చిత్రం నుండి - రియాక్ట్-వెబ్-యాప్-బిల్డర్ నుండి (3 అని లేబుల్ చేయబడిన లైన్లో సూచించబడింది). మేము ఉపయోగించాలనుకుంటున్న ఫైల్లు చిత్రం లోపల ఉన్నాయి మరియు వాటి స్థానం 4 అని లేబుల్ చేయబడిన లైన్లో సెట్ చేయబడింది, మా విషయంలో ఇది /opt/app-root/output/. మీరు గుర్తుంచుకుంటే, మా అప్లికేషన్ను రూపొందించే ఫలితాల ఆధారంగా రూపొందించబడిన ఫైల్లు ఇక్కడే నిల్వ చేయబడతాయి.
లేబుల్ 5తో ఉన్న పదంలో పేర్కొన్న డెస్టినేషన్ ఫోల్డర్ కేవలం ప్రస్తుత డైరెక్టరీ మాత్రమే (ఇదంతా గుర్తుంచుకోండి, ఓపెన్షిఫ్ట్ అని పిలువబడే కొన్ని మాయాజాలంలో నడుస్తుంది మరియు మీ స్థానిక కంప్యూటర్లో కాదు).
స్ట్రాటజీ విభాగం - లైన్ 6 అని లేబుల్ చేయబడింది - కూడా మొదటి బిల్డ్ కాన్ఫిగరేషన్ని పోలి ఉంటుంది. ఈసారి మాత్రమే మేము ఇమేజ్స్ట్రీమ్ విభాగంలో ఇప్పటికే చూసిన nginx-image-runtimeని ఉపయోగించబోతున్నాము.
చివరగా, 7 అని లేబుల్ చేయబడిన లైన్ ట్రిగ్గర్ల విభాగం, ఇది రియాక్ట్-వెబ్-యాప్-బిల్డర్ ఇమేజ్ మారిన ప్రతిసారీ ఈ బిల్డ్ను సక్రియం చేస్తుంది.
లేకపోతే, ఈ టెంప్లేట్ అందంగా ప్రామాణిక విస్తరణ కాన్ఫిగరేషన్తో పాటు సేవలు మరియు మార్గాలకు సంబంధించిన విషయాలను కలిగి ఉంది, కానీ మేము చాలా వివరంగా చెప్పము. దయచేసి అమలు చేయబడే చిత్రం రియాక్ట్-వెబ్-యాప్-రన్టైమ్ చిత్రం అని గమనించండి.
అప్లికేషన్ విస్తరణ
కాబట్టి ఇప్పుడు మనం టెంప్లేట్ని చూసాము, అప్లికేషన్ని అమలు చేయడానికి దాన్ని ఎలా ఉపయోగించాలో చూద్దాం.
మేము మా టెంప్లేట్ని అమలు చేయడానికి oc అని పిలువబడే OpenShift క్లయింట్ సాధనాన్ని ఉపయోగించవచ్చు:
OUTPUT_DIR వేరియబుల్ మినహా ఇక్కడ నమూనా ఒకే విధంగా ఉంటుంది.
అనుబంధం 2
ఈ కథనంలో మేము NGINXని వెబ్ సర్వర్గా ఉపయోగించాము, కానీ దానిని Apacheతో భర్తీ చేయడం చాలా సులభం, ఫైల్లోని టెంప్లేట్ను మార్చండి NGINX చిత్రం న అపాచీ చిత్రం.
తీర్మానం
ఈ సిరీస్లోని మొదటి భాగంలో, OpenShift ప్లాట్ఫారమ్లో ఆధునిక వెబ్ అప్లికేషన్లను త్వరగా ఎలా అమర్చాలో మేము చూపించాము. ఈ రోజు మనం వెబ్ యాప్ చిత్రం ఏమి చేస్తుందో మరియు మరింత ఉత్పత్తికి సిద్ధంగా ఉన్న అప్లికేషన్ బిల్డ్ను రూపొందించడానికి చైన్డ్ బిల్డ్లను ఉపయోగించి NGINX వంటి స్వచ్ఛమైన వెబ్ సర్వర్తో ఎలా కలపవచ్చు అనేదానిని మేము పరిశీలించాము. ఈ సిరీస్లోని తదుపరి మరియు చివరి కథనంలో, OpenShiftలో మీ అప్లికేషన్ కోసం డెవలప్మెంట్ సర్వర్ని ఎలా అమలు చేయాలో మరియు స్థానిక మరియు రిమోట్ ఫైల్ల సమకాలీకరణను ఎలా అమలు చేయాలో మేము చూపుతాము.
పార్ట్ 2: ఉత్పత్తి విస్తరణ కోసం అనుబంధిత OpenShift అసెంబ్లీలను ఉపయోగించి NGINX వంటి ఇప్పటికే ఉన్న HTTP సర్వర్ ఇమేజ్తో కొత్త S2I చిత్రాన్ని ఎలా ఉపయోగించాలి;
పార్ట్ 3: OpenShift ప్లాట్ఫారమ్లో మీ అప్లికేషన్ కోసం డెవలప్మెంట్ సర్వర్ని ఎలా రన్ చేయాలి మరియు దానిని స్థానిక ఫైల్ సిస్టమ్తో సింక్రొనైజ్ చేయాలి.