1. खास जानकारी
यह लैब ऐसी सुविधाएं और क्षमताएं दिखाता है जो कंटेनर वाले एनवायरमेंट में NodeJS ऐप्लिकेशन डेवलप करने वाले सॉफ़्टवेयर इंजीनियर के लिए डेवलपमेंट वर्कफ़्लो को आसान बनाने के लिए डिज़ाइन की गई हैं. सामान्य कंटेनर डेवलपमेंट के लिए, उपयोगकर्ता को कंटेनर के ब्यौरे और कंटेनर बनाने की प्रोसेस को समझना ज़रूरी है. इसके अलावा, डेवलपर को आम तौर पर अपने काम करने का फ़्लो तोड़ना पड़ता है, ताकि वे रिमोट एनवायरमेंट में अपने ऐप्लिकेशन की जांच करने और उन्हें डीबग करने के लिए, अपने IDE को छोड़ दें. इस ट्यूटोरियल में बताए गए टूल और टेक्नोलॉजी की मदद से, डेवलपर अपने IDE को छोड़े बिना, कंटेनर वाले ऐप्लिकेशन के साथ असरदार तरीके से काम कर सकते हैं.
आपको क्या सीखने को मिलेगा
इस लैब में, आपको Google Cloud में कंटेनर के साथ डेवलप करने के तरीकों के बारे में जानकारी मिलेगी, जिनमें शामिल हैं:
- स्टार्टर Nodejs ऐप्लिकेशन बनाना
- कंटेनर डेवलपमेंट के लिए Nodejs ऐप्लिकेशन को कॉन्फ़िगर करना
- CRUD के अंदर की जाने वाली रेस्टिंग की सेवा के लिए कोडिंग करना
- GKE (जीकेई) में डिप्लॉय किया जा रहा है
- किसी गड़बड़ी की स्थिति को डीबग करना
- ब्रेकपॉइंट / लॉग का इस्तेमाल करना
- GKE (जीकेई) में बदलावों को फिर से लागू करना
- ज़रूरी नहीं: बैकएंड परसिस्टेंस के लिए, CloudSQL को इंटिग्रेट करना
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करें
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा. - आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
Cloudshell एडिटर शुरू करें
इस लैब को Google Cloud Shell Editor के साथ इस्तेमाल करने के लिए डिज़ाइन और टेस्ट किया गया था. एडिटर को ऐक्सेस करने के लिए,
- https://console.cloud.google.com पर जाकर, अपना Google प्रोजेक्ट ऐक्सेस करें.
- सबसे ऊपर दाएं कोने में मौजूद, Cloud Shell एडिटर आइकॉन पर क्लिक करें
- आपकी विंडो के सबसे नीचे एक नया पैनल खुलेगा
- 'एडिटर' बटन पर क्लिक करें
- इसके बाद, दाईं ओर एक एक्सप्लोरर और बीच वाले हिस्से में एडिटर खुलेगा
- स्क्रीन के सबसे नीचे टर्मिनल पैनल भी उपलब्ध होना चाहिए
- अगर टर्मिनल खुला नहीं है, तो नई टर्मिनल विंडो खोलने के लिए `ctrl+`` के कुंजी कॉम्बिनेशन का इस्तेमाल करें
gcloud सेट अप करें
Cloud Shell में, अपना प्रोजेक्ट आईडी और वह इलाका सेट करें जहां आपको अपना ऐप्लिकेशन डिप्लॉय करना है. उन्हें PROJECT_ID
और REGION
वैरिएबल के तौर पर सेव करें.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
इस लैब में इस्तेमाल किए जा रहे इन्फ़्रास्ट्रक्चर का प्रावधान करें
इस लैब में, आपको GKE (जीकेई) पर कोड डिप्लॉय करना होगा. साथ ही, CloudSQL डेटाबेस में सेव किए गए डेटा को ऐक्सेस करना होगा. नीचे दी गई सेटअप स्क्रिप्ट आपके लिए यह इन्फ़्रास्ट्रक्चर तैयार करती है.
- सेटअप स्क्रिप्ट डाउनलोड करें और इसे एक्ज़ीक्यूटेबल बनाएं.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup_with_cw.sh
chmod +x setup_with_cw.sh
setup_with_cw.sh
फ़ाइल खोलें और वर्तमान में CHANGEME पर सेट पासवर्ड के मानों में बदलाव करें- इस लैब में इस्तेमाल किए जाने वाले GKE (जीकेई) क्लस्टर और CloudSQL डेटाबेस को सेट अप करने के लिए, सेटअप स्क्रिप्ट चलाएं
./setup_with_cw.sh &
क्लाउड वर्कस्टेशन क्लस्टर
- Cloud Console में Cloud Workstations खोलें. क्लस्टर के
READY
स्टेटस में होने का इंतज़ार करें.
Workstations कॉन्फ़िगरेशन बनाएं
- अगर आपका Cloud Shell सेशन डिसकनेक्ट हो गया है, तो "फिर से कनेक्ट करें" पर क्लिक करें और फिर प्रोजेक्ट आईडी सेट करने के लिए gcloud cli कमांड चलाएं. कमांड चलाने से पहले, नीचे दिए गए सैंपल प्रोजेक्ट आईडी को अपने qwiklabs प्रोजेक्ट आईडी से बदलें.
gcloud config set project qwiklabs-gcp-project-id
- Cloud Workstations कॉन्फ़िगरेशन बनाने के लिए, नीचे दी गई स्क्रिप्ट को टर्मिनल में डाउनलोड करें और चलाएं.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
- कॉन्फ़िगरेशन सेक्शन में जाकर, नतीजों की पुष्टि करें. READY स्थिति में बदलने में दो मिनट लगेंगे.
- कंसोल में Cloud Workstations खोलें और नया इंस्टेंस बनाएं.
- नाम को
my-workstation
में बदलें और मौजूदा कॉन्फ़िगरेशन को चुनें:codeoss-js
.
- Workstations सेक्शन में जाकर, नतीजों की पुष्टि करें.
वर्कस्टेशन लॉन्च करें
- वर्कस्टेशन शुरू और लॉन्च करें. वर्कस्टेशन शुरू होने में कुछ मिनट लगेंगे.
- पता बार में मौजूद आइकॉन पर क्लिक करके, तीसरे पक्ष की कुकी को अनुमति दें.
- "साइट काम नहीं कर रही है?" पर क्लिक करें.
- "कुकी की अनुमति दें" पर क्लिक करें.
- वर्कस्टेशन लॉन्च होने के बाद, आपको कोड OSS IDE दिखेगा. "हो गया के रूप में चिह्नित करें" पर क्लिक करें 'शुरू करें' पेज पर, वर्कस्टेशन IDE पर
3. नया Nodejs स्टार्टर ऐप्लिकेशन बनाना
इस सेक्शन में, आपको नया Nodejs ऐप्लिकेशन बनाना होगा.
- नया टर्मिनल खोलें.
- Cloud Shell में,
mynodejsapp
नाम वाली नई डायरेक्ट्री बनाएं
mkdir mynodejsapp
अगर आपको यह मैसेज दिखता है, तो 'अनुमति दें' बटन पर क्लिक करें, ताकि आप उसे कॉपी करके वर्कस्टेशन में चिपका सकें.
- इस डायरेक्ट्री में बदलाव करें और इसे फ़ाइल फ़ोल्डर के तौर पर खोलें. इससे नए फ़ोल्डर में फ़ाइल फ़ोल्डर का कॉन्फ़िगरेशन बन जाएगा और एडिटर फिर से लोड हो जाएगा.
cd mynodejsapp && code-oss-cloud-workstations -r --folder-uri="$PWD"
- एक नया टर्मिनल फिर से खोलें. NVM का इस्तेमाल करके, Node और NPM इंस्टॉल करें.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
# This loads nvm bash_completion
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
nvm install stable
nvm alias default stable
4. नया स्टार्टर ऐप्लिकेशन बनाएं
- ऐप्लिकेशन शुरू करना
नीचे दिए गए निर्देश को चलाकर, package.json
फ़ाइल बनाई जा रही है
npm init
Choose the `entry point: (index.js) src/index.js` and leave default values for the rest of the parameters. This will create the `package.json` file with following contents
{ "name": "mynodejsapp", "version": "1.0.0", "description": "", "main": "src/index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
- एंट्री पॉइंट जोड़ें
"start": "node src/index.js",
स्क्रिप्ट में शुरुआती निर्देश शामिल करने के लिए, IDE में package.json
फ़ाइल खोलकर उसमें बदलाव करें. बदलाव के बाद, स्क्रिप्ट नीचे दिए गए कोड स्निपेट की तरह दिखनी चाहिए:
"scripts": {
"start": "node src/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
- एक्सप्रेस डिपेंडेंसी जोड़ना
हम जो कोड जोड़ने जा रहे हैं वह express
का भी इस्तेमाल करता है. इसलिए, हमें इस package.json
फ़ाइल पर उस डिपेंडेंसी को जोड़ने दें. इसलिए, सभी बदलावों के बाद, package.json
फ़ाइल को नीचे बताए गए तरीके से देखना चाहिए.
{
"name": "mynodejsapp",
"version": "1.0.0",
"description": "",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.3"
}
}
- index.js फ़ाइल बनाना
एक्सप्लोरर व्यू में 'नया फ़ोल्डर' चुनकर, src नाम की सोर्स डायरेक्ट्री बनाएं.
src/index.js फ़ाइल बनाएं
कोड का इस्तेमाल करें
const express = require('express');
const app = express();
const PORT = 8080;
app.get('/', (req, res) => {
var message="Greetings from Node";
res.send({ message: message });
});
app.listen(PORT, () => {
console.log(`Server running at: http://localhost:${PORT}/`);
});
ध्यान दें कि PORT को 8080
वैल्यू पर सेट किया गया है
मेनिफ़ेस्ट जनरेट करें
Skaffold टूल, कंटेनर डेवलपमेंट को आसान बनाने के लिए इंटिग्रेट किए गए टूल उपलब्ध कराते हैं. इस चरण में, Skaffold की प्रोसेस शुरू की जाती है, जिससे अपने-आप बुनियादी kubernetes YAML फ़ाइलें बन जाती हैं. प्रोसेस शुरू करने के लिए, नीचे दिया गया निर्देश चलाएं.
टर्मिनल में नीचे दिया गया निर्देश चलाएं
skaffold init --generate-manifests
जब कहा जाए, तब:
- पोर्ट के लिए 8080 डालें
- कॉन्फ़िगरेशन सेव करने के लिए, y डालें
फ़ाइल फ़ोल्डर विज़, skaffold.yaml
और deployment.yaml
में दो फ़ाइलें जोड़ी गई हैं
ऐप्लिकेशन का नाम अपडेट करें
कॉन्फ़िगरेशन में शामिल डिफ़ॉल्ट मान वर्तमान में आपके ऐप्लिकेशन के नाम से मेल नहीं खाते. फ़ाइलों को डिफ़ॉल्ट मानों की बजाय अपने ऐप्लिकेशन के नाम का संदर्भ देने के लिए अपडेट करें.
- Skaffold कॉन्फ़िगरेशन में एंट्री बदलें
skaffold.yaml
खोलें- इमेज के उस नाम को चुनें जो फ़िलहाल
package-json-image
के तौर पर सेट है - राइट क्लिक करें और 'सभी घटनाएं बदलें' को चुनें
- नया नाम,
mynodejsapp
के तौर पर लिखें
- Kubernetes कॉन्फ़िगरेशन में एंट्री बदलें
deployment.yaml
फ़ाइल खोलें- इमेज के उस नाम को चुनें जो फ़िलहाल
package-json-image
के तौर पर सेट है - राइट क्लिक करें और 'सभी घटनाएं बदलें' को चुनें
- नया नाम,
mynodejsapp
के तौर पर लिखें
ध्यान दें कि skaffold.yaml
फ़ाइल के build
सेक्शन में, ऐप्लिकेशन को कंटेनर बनाने के लिए buildpacks
का इस्तेमाल किया गया है. इस कोड में Dockerfile मौजूद नहीं है. साथ ही, इस ऐप्लिकेशन को कंटेनर बनाने के लिए, डेवलपर को Docker की जानकारी की ज़रूरत नहीं है.
इसके अलावा, इस स्केलोल्ड कॉन्फ़िगरेशन से एडिटर और चल रहे कंटेनर के बीच हॉट सिंक अपने-आप चालू हो जाता है. हॉट सिंक को चालू करने के लिए, किसी और कॉन्फ़िगरेशन की ज़रूरत नहीं होती.
5. डेवलपमेंट प्रोसेस की जानकारी
इस सेक्शन में, आपको बुनियादी प्रोसेस जानने और स्टार्टर ऐप्लिकेशन के कॉन्फ़िगरेशन और सेटअप की पुष्टि करने के लिए, Cloud Code प्लगिन का इस्तेमाल करने के कुछ चरणों के बारे में बताया जाएगा.
Cloud Code, आपके डेवलपमेंट प्रोसेस को आसान बनाने के लिए skaffold के साथ इंटिग्रेट होता है. जब इन चरणों को GKE (जीकेई) पर डिप्लॉय किया जाता है, तो Cloud Code और Skaffold, आपके कंटेनर की इमेज अपने-आप बनाएंगे, उसे कंटेनर रजिस्ट्री में पुश करेंगे, और आपके ऐप्लिकेशन को GKE (जीकेई) पर डिप्लॉय कर देंगे. ऐसा, पर्दे के पीछे की गतिविधियों और डेवलपर फ़्लो से जुड़ी जानकारी को समझकर किया जा सकता है. Cloud Code, कंटेनर पर आधारित डेवलपमेंट के लिए पारंपरिक डीबग और हॉटसिंक क्षमताएं देकर आपकी डेवलपमेंट प्रोसेस को बेहतर बनाता है.
Google Cloud में साइन इन करें
- Cloud Code आइकॉन पर क्लिक करें और "Google Cloud में साइन इन करें" को चुनें:
- "साइन इन करने के लिए आगे बढ़ें" पर क्लिक करें.
- Terminal में आउटपुट देखें और लिंक खोलें:
- अपने Qwiklabs छात्र-छात्राओं के क्रेडेंशियल के साथ लॉगिन करें.
- "अनुमति दें" चुनें:
- पुष्टि करने वाला कोड कॉपी करें और Workstation टैब पर वापस जाएं.
- पुष्टि करने के लिए भेजा गया कोड चिपकाएं और Enter दबाएं.
Kubernetes क्लस्टर जोड़ें
- कोई क्लस्टर जोड़ें
- Google Kubernetes Engine चुनें:
- प्रोजेक्ट चुनें.
- "mycluster" चुनें जो शुरुआती सेटअप में बनाया गया था.
- क्लस्टर अब Cloud Code के तहत, Kubernetes क्लस्टर की सूची में दिखता है. क्लस्टर को यहां से नेविगेट करें और उसके बारे में ज़्यादा जानें.
gcloud cli का इस्तेमाल करके मौजूदा प्रोजेक्ट आईडी सेट करें
- qwiklabs पेज से इस लैब का प्रोजेक्ट आईडी कॉपी करें.
- प्रोजेक्ट आईडी सेट करने के लिए, टर्मिनल से gcloud cli कमांड चलाएं. कमांड चलाने से पहले, सैंपल प्रोजेक्ट आईडी बदलें. नीचे दिया गया निर्देश चलाने से पहले, प्रोजेक्ट आईडी डालें.
gcloud config set project qwiklabs-gcp-project-id
Kubernetes में डिप्लॉय करें
- Cloud Shell Editor में सबसे नीचे मौजूद पैनल में, Cloud Code फ़ाॅर्म चुनें
- सबसे ऊपर मौजूद 'डेवलपर के लिए सेशन' सेक्शन में मौजूद पैनल में, Kubernetes पर चलाएं को चुनें. अगर पूछा जाए, तो मौजूदा Kubernetes संदर्भ इस्तेमाल करने के लिए 'हां' चुनें.
- पहली बार निर्देश चलाने पर स्क्रीन के सबसे ऊपर एक प्रॉम्प्ट दिखेगा, जिसमें पूछा जाएगा कि क्या आपको मौजूदा kubernetes कॉन्टेक्स्ट चाहिए या नहीं. इसके लिए, "हां" चुनें और उसका इस्तेमाल मौजूदा संदर्भ के तौर पर करें.
- इसके बाद एक प्रॉम्प्ट दिखेगा, जिसमें पूछा जाएगा कि किस कंटेनर रजिस्ट्री का इस्तेमाल करना है. दी गई डिफ़ॉल्ट वैल्यू को स्वीकार करने के लिए, Enter दबाएं
- प्रोग्रेस और सूचनाएं देखने के लिए, निचले पैनल में आउटपुट टैब और ड्रॉपडाउन में Kubernetes: Run/Debug चुनें
- "Kubernetes: रन/डीबग - ज़्यादा जानकारी" चुनें अतिरिक्त विवरण और कंटेनर से लाइव स्ट्रीमिंग लॉग देखने के लिए दाईं ओर दिए गए चैनल ड्रॉप-डाउन में
- "Kubernetes: रन/डीबग" चुनकर, आसान बनाए गए व्यू पर वापस जाएं ड्रॉपडाउन से
- बिल्ड और टेस्ट पूरे होने के बाद, आउटपुट टैब में यह मैसेज दिखता है:
Resource deployment/mynodejsapp status completed successfully
और एक यूआरएल दिखता है: "सर्विस डेमो-ऐप्लिकेशन से फ़ॉरवर्ड किया गया यूआरएल: http://localhost:8080" - Cloud Code टर्मिनल में, आउटपुट (http://localhost:8080) में मौजूद यूआरएल पर कर्सर घुमाएं. इसके बाद, दिखने वाले टूल टिप में 'लिंक फ़ॉलो करें' चुनें.
जवाब यह होगा:
{"message":"Greetings from Node"}
फिर से लोड करें
src/index.js
पर नेविगेट करें. वेलकम मैसेज में मौजूद कोड में बदलाव करके,'Hello from Node'
करें
ध्यान दें कि Output
विंडो Kubernetes: Run/Debug
व्यू में, वॉचर अपडेट की गई फ़ाइलों को Kubernetes के कंटेनर के साथ सिंक करता है
Update initiated File sync started for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a File sync succeeded for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a Update succeeded
Kubernetes: Run/Debug - Detailed
व्यू पर स्विच करने पर, आपको दिखेगा कि यह फ़ाइल में हुए बदलावों को पहचानकर नोड को रीस्टार्ट कर रहा है
files modified: [src/index.js] Copying files:map[src/index.js:[/workspace/src/index.js]]togcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a Syncing 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a Watching for changes... [mynodejsapp] [mynodejsapp]> mynodejsapp@1.0.0 start /workspace [mynodejsapp]> node src/index.js [mynodejsapp] [mynodejsapp]Server running at: http://localhost:8080/
- अपडेट किए गए नतीजे देखने के लिए, अपना ब्राउज़र रीफ़्रेश करें.
डीबग करना
- डीबग व्यू पर जाएं और मौजूदा थ्रेड को रोकें.
- ऐप्लिकेशन को
debug
मोड में चलाने के लिए, सबसे नीचे मौजूद मेन्यू मेंCloud Code
पर क्लिक करें औरDebug on Kubernetes
को चुनें.
Output
विंडो केKubernetes Run/Debug - Detailed
व्यू में, ध्यान दें कि skaffold, इस ऐप्लिकेशन को डीबग मोड में डिप्लॉय करेगा.- ऐप्लिकेशन को बनाने और डिप्लॉय करने में कुछ मिनट लगेंगे. इस बार आपको एक डीबगर अटैच दिखेगा.
Port forwarding pod/mynodejsapp-6bbcf847cd-vqr6v in namespace default, remote port 9229 -> http://127.0.0.1:9229 [mynodejsapp]Debugger attached.
- सबसे नीचे मौजूद स्टेटस बार का रंग नीले से नारंगी रंग में बदल जाता है. इससे पता चलता है कि यह डीबग मोड में है.
Kubernetes Run/Debug
व्यू में, देखें कि डीबग किया जा सकने वाला कंटेनर शुरू हो गया है
**************URLs***************** Forwarded URL from service mynodejsapp-service: http://localhost:8080 Debuggable container started pod/mynodejsapp-deployment-6bc7598798-xl9kj:mynodejsapp (default) Update succeeded ***********************************
ब्रेकपॉइंट इस्तेमाल करें
src/index.js
खोलेंvar message="Hello from Node";
वाला स्टेटमेंट ढूंढें- लाइन नंबर की बाईं ओर मौजूद खाली जगह पर क्लिक करके, उस लाइन में एक ब्रेकपॉइंट जोड़ें. ब्रेकपॉइंट सेट होने का पता लगाने के लिए, लाल रंग का इंंडिकेटर दिखेगा
- अपने ब्राउज़र को फिर से लोड करें और ध्यान दें कि डीबगर, ब्रेकपॉइंट पर प्रोसेस को रोक देता है. साथ ही, इससे आपको GKE (जीकेई) में रिमोट तरीके से चल रहे ऐप्लिकेशन के वैरिएबल और स्थिति की जांच करने की अनुमति मिलती है
- जब तक आपको
"message"
वैरिएबल नहीं मिल जाता, तब तक वैरिएबल सेक्शन में नीचे की ओर क्लिक करते रहें. - पर चरण को दबाकर, लाइन चलाएं
"message"
वैरिएबल की मौजूदा वैल्यू बदलकर"Hello from Node"
करें- वैरिएबल के नाम "टारगेट" पर दो बार क्लिक करें और पॉप-अप में, वैल्यू को बदलकर
"Hi from Node"
जैसा कुछ करें - डीबग कंट्रोल पैनल में 'जारी रखें' बटन पर क्लिक करें
- अपने ब्राउज़र में उस जवाब की समीक्षा करें जो अब आपकी डाली गई अपडेट की गई वैल्यू दिखाता है.
- "डीबग" बंद करना मोड चालू करने के लिए, 'रोकें' बटन को दबाएं. इसके बाद, ब्रेकपॉइंट पर फिर से क्लिक करके ब्रेकपॉइंट हटाएं.
6. सीआरयूडी रेस्ट सर्विस की सुविधा आसानी से बनाई जा रही है
इस समय आपका ऐप्लिकेशन कंटेनर वाले डेवलपमेंट के लिए पूरी तरह से कॉन्फ़िगर हो गया है और आपने Cloud Code के साथ बेसिक डेवलपमेंट वर्कफ़्लो को समझ लिया है. नीचे दिए गए सेक्शन में, Google Cloud में मैनेज किए जा रहे डेटाबेस से कनेक्ट करके REST सर्विस एंडपॉइंट को जोड़कर, उन बातों की प्रैक्टिस की जाती है जो आपने सीखी हैं.
डिपेंडेंसी कॉन्फ़िगर करें
ऐप्लिकेशन कोड, बाकी सेवा से जुड़े डेटा को बनाए रखने के लिए, डेटाबेस का इस्तेमाल करता है. यह पक्का करें कि package.json
फ़ाइल में ये डिपेंडेंसी उपलब्ध हों
- CRUD ऐप्लिकेशन के Postgres बनाने के लिए, दो और डिपेंडेंसी
pg
औरsequelize
कोpackage.json
फ़ाइल में जोड़ें. बदलाव अपलोड करें, लेकिन डिपेंडेंसी सेक्शन ऐसा दिखेगा.
"dependencies": {
"express": "^4.17.3",
"pg": "^8.8.0",
"sequelize": "^6.25.7"
}
REST सेवा को कोड करें
- इस ऐप्लिकेशन में CRUD ऐप्लिकेशन कोड जोड़ें
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip
unzip app.zip
इस कोड में ये शामिल हैं
item
के लिए, इकाई मॉडल के साथ मॉडल फ़ोल्डर- CRUD से जुड़ी कार्रवाइयां करने वाले कोड के साथ controllers फ़ोल्डर
- रूट फ़ोल्डर, जो खास यूआरएल पैटर्न को अलग-अलग कॉल पर रूट करता है
- डेटाबेस कनेक्टिविटी की जानकारी वाला config फ़ोल्डर
- ध्यान दें कि
db.config.js
फ़ाइल का डेटाबेस कॉन्फ़िगरेशन, ऐसे एनवायरमेंट वैरिएबल के बारे में बताता है जिन्हें डेटाबेस से कनेक्ट करने के लिए दिया जाना ज़रूरी है. इसके अलावा, आपको यूआरएल एन्कोडिंग के लिए आने वाले अनुरोध को भी पार्स करना होगा. src/index.js
में नीचे दिया गया कोड स्निपेट जोड़ें, ताकिapp.listen(PORT, () => {
से शुरू होने वाले आखिरी सेक्शन से ठीक पहले, अपनी मुख्य JavaScript फ़ाइल के सीआरयूडी कोड से कनेक्ट किया जा सके
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(
bodyParser.urlencoded({
extended: true,
})
)
const db = require("../app/models");
db.sequelize.sync();
require("../app/routes/item.routes")(app);
- डेटाबेस कनेक्टिविटी की जानकारी देने के लिए, एनवायरमेंट वैरिएबल जोड़ें. इसके लिए,
deployment.yaml
फ़ाइल में डिप्लॉयमेंट में बदलाव करें.
नीचे दी गई परिभाषा से मेल खाने के लिए फ़ाइल के आखिर में खास जानकारी एंट्री अपडेट करें
spec:
containers:
- name: mynodejsapp
image: mynodejsapp
env:
- name: DB_HOST
value: ${DB_INSTANCE_IP}
- name: DB_PORT
value: "5432"
- name: DB_USER
valueFrom:
secretKeyRef:
name: gke-cloud-sql-secrets
key: username
- name: DB_PASS
valueFrom:
secretKeyRef:
name: gke-cloud-sql-secrets
key: password
- name: DB_NAME
valueFrom:
secretKeyRef:
name: gke-cloud-sql-secrets
key: database
- DB_Host वैल्यू को अपने डेटाबेस के पते से बदलें
export DB_INSTANCE_IP=$(gcloud sql instances describe mytest-instance \
--format=json | jq \
--raw-output ".ipAddresses[].ipAddress")
envsubst < deployment.yaml > deployment.new && mv deployment.new deployment.yaml
ऐप्लिकेशन डिप्लॉय करें और उसकी पुष्टि करें
- क्लाउड शेल एडिटर में सबसे नीचे मौजूद पैनल में,
Cloud Code
को चुनें. इसके बाद, स्क्रीन पर सबसे ऊपर मौजूदDebug on Kubernetes
को चुनें. - बिल्ड और टेस्ट पूरे हो जाने के बाद, आउटपुट टैब में
Resource deployment/mynodejsapp status completed successfully
दिखेगा और एक यूआरएल दिखेगा: "mynodejsapp से फ़ॉरवर्ड किया गया यूआरएल: http://localhost:8080" - कुछ आइटम जोड़ें.
Cloud Shell Terminal से, यहां दिए गए कमांड चलाएं
URL=localhost:8080
curl -X POST $URL/items -d '{"itemName":"Body Spray", "itemPrice":3.2}' -H "Content-Type: application/json"
curl -X POST $URL/items -d '{"itemName":"Nail Cutter", "itemPrice":2.5}' -H "Content-Type: application/json"
- ब्राउज़र में $URL/items चलाकर जीईटी की जांच करें. कमांड लाइन से भी कर्ल चलाया जा सकता है
curl -X GET $URL/items
- परीक्षण हटाएं: अब नीचे दिए गए आदेश को चलाकर किसी आइटम को हटाने का प्रयास करें. अगर ज़रूरी हो, तो item-id की वैल्यू बदलें.
curl -X DELETE $URL/items/1
This throws an error message
{"message":"Could not delete Item with id=[object Object]"}
समस्या की पहचान करना और उसे ठीक करना
- ऐप्लिकेशन डीबग मोड में चल रहा है. इसलिए, समस्या का पता लगाने के लिए ब्रेकपॉइंट का इस्तेमाल करें. इसके लिए, यहां कुछ सुझाव दिए गए हैं:
- हमें पता है कि DELETE में कुछ गड़बड़ी है, क्योंकि यह मनचाहा नतीजा नहीं दे रहा है. इसलिए, आपको
itemcontroller.js
->exports.delete
तरीके में ब्रेकपॉइंट सेट करना होगा. - सिलसिलेवार तरीके से एक्ज़ीक्यूशन करें और बाईं विंडो में लोकल वैरिएबल की वैल्यू देखने के लिए, हर चरण पर वैरिएबल देखें.
request.params
जैसी किसी खास वैल्यू को देखने के लिए, इस वैरिएबल को वॉच विंडो में जोड़ें.
- ध्यान दें कि
id
के लिए असाइन की गई वैल्यूundefined
है. समस्या ठीक करने के लिए कोड बदलें.
तय कोड स्निपेट ऐसा दिखेगा.
// Delete a Item with the specified id in the request exports.delete = (req, res) => { const id = req.params.id;
- एक बार ऐप्लिकेशन के रीस्टार्ट होने पर, उसे मिटाने की कोशिश करके दोबारा जांच करें.
- डीबग टूलबार में लाल रंग के स्क्वेयर पर क्लिक करके, डीबग करने वाले सेशन को रोकें
7. साफ़-सफ़ाई सेवा
बधाई हो! इस लैब में, आपने शुरुआत से एक नया Nodejs ऐप्लिकेशन बनाया है और उसे कंटेनर के साथ हॉट डिप्लॉयमेंट मोड में काम करने के लिए कॉन्फ़िगर किया है. इसके बाद, आपने पुराने ऐप्लिकेशन स्टैक में मिलने वाले डेवलपर फ़्लो का इस्तेमाल करके, अपने ऐप्लिकेशन को किसी रिमोट GKE क्लस्टर में डिप्लॉय और डीबग किया.
लैब पूरा होने के बाद, स्टोरेज खाली करने के लिए:
- लैब में इस्तेमाल की गई फ़ाइलें मिटाना
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
- प्रोजेक्ट को मिटाएं, ताकि उससे जुड़े सभी इन्फ़्रास्ट्रक्चर और संसाधनों को हटाया जा सके