توسعه InnerLoop با استفاده از ایستگاه های کاری ابری با NodeJS

1. بررسی اجمالی

این آزمایشگاه ویژگی‌ها و قابلیت‌هایی را نشان می‌دهد که برای ساده‌سازی گردش کار توسعه برای مهندسان نرم‌افزاری که وظیفه توسعه برنامه‌های NodeJS در یک محیط کانتینری را دارند، طراحی شده‌اند. توسعه کانتینر معمولی به کاربر نیاز دارد که جزئیات کانتینرها و فرآیند ساخت کانتینر را درک کند. علاوه بر این، توسعه دهندگان معمولاً باید جریان خود را قطع کنند و از IDE خود خارج شوند تا برنامه های خود را در محیط های راه دور آزمایش و اشکال زدایی کنند. با ابزارها و فناوری های ذکر شده در این آموزش، توسعه دهندگان می توانند بدون خروج از IDE خود، با برنامه های کانتینری به طور موثر کار کنند.

آنچه خواهید آموخت

در این آزمایشگاه روش هایی برای توسعه با کانتینرها در Google Cloud از جمله:

  • ایجاد یک برنامه استارتر Nodejs
  • پیکربندی برنامه Nodejs برای توسعه کانتینر
  • کدگذاری یک سرویس استراحت ساده CRUD
  • در حال استقرار در GKE
  • اشکال زدایی یک حالت خطا
  • استفاده از نقطه شکست / سیاهههای مربوط
  • استقرار داغ تغییرات به GKE باز می گردد
  • اختیاری: یکپارچه سازی CloudSQL برای پایداری باطن

58a4cdd3ed7a123a.png

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

ویرایشگر Cloudshell را شروع کنید

این آزمایشگاه برای استفاده با Google Cloud Shell Editor طراحی و آزمایش شده است. برای دسترسی به ویرایشگر،

  1. به پروژه Google خود در https://console.cloud.google.com دسترسی پیدا کنید.
  2. در گوشه بالا سمت راست روی نماد ویرایشگر پوسته ابری کلیک کنید

8560cc8d45e8c112.png

  1. یک صفحه جدید در پایین پنجره شما باز می شود
  2. بر روی دکمه Open Editor کلیک کنید

9e504cb98a6a8005.png

  1. ویرایشگر با یک کاوشگر در سمت راست و ویرایشگر در ناحیه مرکزی باز می شود
  2. یک صفحه ترمینال نیز باید در پایین صفحه موجود باشد
  3. اگر ترمینال باز نیست، از کلید ترکیبی «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 دسترسی خواهید داشت. اسکریپت راه اندازی زیر این زیرساخت را برای شما آماده می کند.

  1. اسکریپت راه اندازی را دانلود کنید و آن را قابل اجرا کنید.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup_with_cw.sh
chmod +x setup_with_cw.sh
  1. فایل setup_with_cw.sh را باز کنید و مقادیر گذرواژه هایی را که در حال حاضر روی CHANGEME تنظیم شده اند ویرایش کنید.
  2. اسکریپت راه اندازی را اجرا کنید تا یک کلاستر GKE و یک پایگاه داده CloudSQL را که در این آزمایشگاه استفاده خواهید کرد.
./setup_with_cw.sh &

Cloud Workstation Cluster

  1. ایستگاه های کاری Cloud را در Cloud Console باز کنید. منتظر بمانید تا خوشه در وضعیت READY باشد.

305e1a3d63ac7ff6.png

ایجاد پیکربندی ایستگاه های کاری

  1. اگر جلسه Cloud Shell شما قطع شد، روی "Reconnect" کلیک کنید و سپس دستور gcloud cli را برای تنظیم ID پروژه اجرا کنید. قبل از اجرای دستور، شناسه پروژه نمونه زیر را با ID پروژه qwiklabs خود جایگزین کنید.
gcloud config set project qwiklabs-gcp-project-id
  1. برای ایجاد تنظیمات 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
  1. نتایج را در بخش تنظیمات تأیید کنید. انتقال به وضعیت آماده 2 دقیقه طول می کشد.

c8f0b8662fdb827e.png

  1. ایستگاه های کاری Cloud را در کنسول باز کنید و نمونه جدیدی ایجاد کنید.

a53adeeac81a78c8.png

  1. نام را به my-workstation تغییر دهید و پیکربندی موجود را انتخاب کنید: codeoss-js .

675d83f30c1319df.png

  1. نتایج را در بخش ایستگاه های کاری بررسی کنید.

bf67586e6695852.png

ایستگاه کاری را راه اندازی کنید

  1. ایستگاه کاری را راه اندازی و راه اندازی کنید. راه اندازی ایستگاه کاری چند دقیقه طول می کشد.

a9ad54f4b4b668e9.png

  1. با کلیک بر روی نماد در نوار آدرس، کوکی‌های شخص ثالث را مجاز کنید. 1b8923e2943f9bc4.png

fcf9405b6957b7d7.png

  1. روی "سایت کار نمی کند؟" کلیک کنید.

36a84c0e2e3b85b.png

  1. روی "Allow cookies" کلیک کنید.

2259694328628fba.png

  1. پس از راه اندازی ایستگاه کاری، کد OSS IDE را مشاهده خواهید کرد. روی "علامت گذاری انجام شده" در صفحه شروع به کار در یکی از IDE ایستگاه کاری کلیک کنید

94874fba9b74cc22.png

3. ایجاد یک برنامه استارت جدید Nodejs

در این بخش یک برنامه جدید Nodejs ایجاد خواهید کرد.

  1. یک ترمینال جدید باز کنید.

c31d48f2e4938c38.png

  1. در Cloud Shell، یک دایرکتوری جدید با نام mynodejsapp ایجاد کنید
mkdir mynodejsapp

در صورت مشاهده این پیغام روی دکمه Allow کلیک کنید تا بتوانید در ایستگاه کاری کپی کنید.

58149777e5cc350a.png

  1. به این دایرکتوری تغییر دهید و آن را به عنوان یک فضای کاری باز کنید. این کار با ایجاد یک پیکربندی فضای کاری در پوشه جدید ایجاد شده، ویرایشگر را بارگیری مجدد می کند.
cd mynodejsapp && code-oss-cloud-workstations -r --folder-uri="$PWD"
  1. دوباره یک ترمینال جدید باز کنید. Node و NPM را با استفاده از NVM نصب کنید.
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. یک برنامه شروع جدید ایجاد کنید

  1. برنامه را راه اندازی کنید

با اجرای دستور زیر یک فایل 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"
}
  1. یک نقطه ورودی اضافه کنید

فایل package.json را در IDE باز کرده و ویرایش کنید تا دستور start را در اسکریپت "start": "node src/index.js", . پس از تغییر، اسکریپت ها باید مانند قطعه کد زیر باشند:

"scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. وابستگی Express را اضافه کنید

کدی که می خواهیم اضافه کنیم از 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"
 }
}
  1. فایل index.js را ایجاد کنید

با انتخاب پوشه جدید در نمای کاوشگر، یک دایرکتوری منبع به نام src ایجاد کنید.

eb507d48f283ce46.png

فایل src/index.js ایجاد کنید

3e3e6e6062e501fc.png

با کد زیر

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 را مقداردهی اولیه می کنید که به طور خودکار فایل های YAML پایه kubernetes را ایجاد می کند. دستور زیر را برای شروع فرآیند اجرا کنید.

دستور زیر را در ترمینال اجرا کنید

skaffold init --generate-manifests

وقتی از شما خواسته شد:

  • 8080 را برای پورت وارد کنید
  • برای ذخیره تنظیمات y را وارد کنید

دو فایل skaffold.yaml و deployment.yaml به فضای کاری اضافه می شوند

نام برنامه را به روز کنید

مقادیر پیش‌فرض موجود در پیکربندی در حال حاضر با نام برنامه شما مطابقت ندارد. فایل ها را برای ارجاع به نام برنامه خود به جای مقادیر پیش فرض به روز کنید.

  1. تغییر ورودی ها در پیکربندی Skaffold
  • skaffold.yaml باز کنید
  • نام تصویری که در حال حاضر به عنوان package-json-image تنظیم شده است را انتخاب کنید
  • کلیک راست کرده و Change All Occurrences را انتخاب کنید
  • نام جدید را به عنوان mynodejsapp وارد کنید
  1. ورودی‌های پیکربندی Kubernetes را تغییر دهید
  • فایل deployment.yaml را باز کنید
  • نام تصویری که در حال حاضر به عنوان package-json-image تنظیم شده است را انتخاب کنید
  • کلیک راست کرده و Change All Occurrences را انتخاب کنید
  • نام جدید را به عنوان mynodejsapp وارد کنید

توجه داشته باشید که در فایل skaffold.yaml ، بخش build از buildpacks برای کانتینری کردن برنامه استفاده می کند. این کد Dockerfile ندارد و توسعه دهنده برای کانتینری کردن این برنامه نیازی به دانش داکر ندارد.

همچنین، همگام سازی داغ به طور خودکار بین ویرایشگر و محفظه در حال اجرا توسط این پیکربندی skaffold فعال می شود. هیچ پیکربندی اضافی برای فعال کردن همگام سازی داغ مورد نیاز نیست.

5. قدم زدن در فرآیند توسعه

در این بخش با استفاده از افزونه Cloud Code چند مرحله را طی می‌کنید تا فرآیندهای اساسی را بیاموزید و پیکربندی و راه‌اندازی برنامه شروع خود را تأیید کنید.

Cloud Code با skaffold ادغام می شود تا فرآیند توسعه شما را ساده کند. هنگامی که در مراحل زیر در GKE مستقر می شوید، Cloud Code و Skaffold به طور خودکار تصویر کانتینر شما را می سازند، آن را به یک رجیستری کانتینر فشار می دهند و سپس برنامه شما را در GKE مستقر می کنند. این در پشت صحنه اتفاق می افتد و جزئیات را به دور از جریان توسعه دهنده انتزاع می کند. Cloud Code همچنین با ارائه قابلیت‌های سنتی Debug و Hotsync برای توسعه مبتنی بر کانتینر، فرآیند توسعه شما را افزایش می‌دهد.

به Google Cloud وارد شوید

  1. روی نماد Cloud Code کلیک کنید و "Sign in to Google Cloud" را انتخاب کنید:

1769afd39be372ff.png

  1. روی "ادامه برای ورود به سیستم" کلیک کنید.

923bb1c8f63160f9.png

  1. خروجی را در ترمینال بررسی کنید و پیوند را باز کنید:

517fdd579c34aa21.png

  1. با اعتبارنامه دانشجویان Qwiklabs خود وارد شوید.

db99b345f7a8e72c.png

  1. "مجاز" را انتخاب کنید:

a5376553c430ac84.png

  1. کد تأیید را کپی کنید و به تب Workstation برگردید.

6719421277b92eac.png

  1. کد تایید را بچسبانید و Enter را بزنید.

e9847cfe3fa8a2ce.png

خوشه Kubernetes را اضافه کنید

  1. یک خوشه اضافه کنید

62a3b97bdbb427e5.png

  1. موتور Google Kubernetes را انتخاب کنید:

9577de423568bbaa.png

  1. پروژه را انتخاب کنید

c5202fcbeebcd41c.png

  1. "mycluster" را که در تنظیمات اولیه ایجاد شده است انتخاب کنید.

33863e94d1c5045f.png

  1. این خوشه اکنون در لیست خوشه های Kubernetes در زیر کد ابری نمایش داده می شود. از اینجا خوشه را پیمایش و کاوش کنید.

7e5f50662d4eea3c.png

با استفاده از gcloud cli شناسه پروژه فعلی را تنظیم کنید

  1. شناسه پروژه را برای این آزمایشگاه از صفحه qwiklabs کپی کنید.

fcff2d10007ec5bc.png

  1. از ترمینال، دستور gcloud cli را برای تنظیم ID پروژه اجرا کنید. قبل از اجرای دستور، شناسه پروژه نمونه را جایگزین کنید. قبل از اجرای دستور زیر، شناسه پروژه را جایگزین کنید.
gcloud config set project qwiklabs-gcp-project-id

به Kubernetes مستقر شوید

  1. در قسمت پایین Cloud Shell Editor، Cloud Code  را انتخاب کنید

c5dd5a749136407b.png

  1. در پانلی که در بالا در زیر DEVELOPMENT SESSIONS ظاهر می‌شود، Run on Kubernetes را انتخاب کنید. اگر از شما خواسته شد، بله را برای استفاده از زمینه فعلی Kubernetes انتخاب کنید.

7da53b9480e8eb0d.png

  1. اولین باری که دستور را اجرا می‌کنید، یک فرمان در بالای صفحه ظاهر می‌شود که از شما می‌پرسد آیا می‌خواهید زمینه فعلی kubernetes را داشته باشید، برای پذیرش و استفاده از زمینه فعلی، «بله» را انتخاب کنید.

a6e58a7f0d117391.png

  1. سپس یک درخواست نمایش داده می شود که از کدام رجیستری کانتینری استفاده کنید. اینتر را فشار دهید تا مقدار پیش فرض ارائه شده را بپذیرید

13236a26c8dbe84f.png

  1. برای مشاهده پیشرفت و اعلان‌ها، تب Output را در قسمت پایین و Kubernetes: Run/Debug را در قسمت کشویی انتخاب کنید.

606ff9cdebc03dff.png

  1. "Kubernetes: Run/Debug - Detailed" را در منوی کشویی کانال به سمت راست انتخاب کنید تا جزئیات بیشتر و گزارش‌ها را به صورت زنده از کانتینرها مشاهده کنید.

ab45d2574f4f2478.png

  1. با انتخاب "Kubernetes: Run/Debug" از منوی کشویی به نمای ساده شده بازگردید.
  2. وقتی ساخت و آزمایش انجام شد، برگه خروجی می‌گوید: Resource deployment/mynodejsapp status completed successfully ، و یک نشانی اینترنتی فهرست می‌شود: «URL فوروارد شده از برنامه آزمایشی سرویس: http://localhost:8080»
  3. در ترمینال Cloud Code، نشانی اینترنتی موجود در خروجی (http://localhost:8080) را نگه دارید و سپس در نکته ابزاری که ظاهر می‌شود، Follow Link را انتخاب کنید.

پاسخ این خواهد بود:

{"message":"Greetings from Node"}

بارگذاری مجدد داغ

  1. به 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
  1. اگر به 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/
  1. برای مشاهده نتایج به روز شده، مرورگر خود را تازه کنید.

اشکال زدایی

  1. به نمای Debug بروید و رشته فعلی را متوقف کنید 647213126d7a4c7b.png .
  2. روی Cloud Code در منوی پایین کلیک کنید و Debug on Kubernetes را انتخاب کنید تا برنامه در حالت debug اجرا شود.

dbd0c6cfd9e9d0e9.png

  • در Kubernetes Run/Debug - Detailed پنجره Output ، توجه کنید که skaffold این برنامه را در حالت اشکال زدایی مستقر می کند.
  • چند دقیقه طول می کشد تا برنامه ساخته و اجرا شود. این بار متوجه یک دیباگر ضمیمه شده اید.
Port forwarding pod/mynodejsapp-6bbcf847cd-vqr6v in namespace default, remote port 9229 -> http://127.0.0.1:9229
[mynodejsapp]Debugger attached.
  1. نوار وضعیت پایین رنگ خود را از آبی به نارنجی تغییر می دهد که نشان می دهد در حالت Debug قرار دارد.

d1224f12cd659995.png

  1. در نمای 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
***********************************

از نقاط شکست استفاده کنید

  1. src/index.js را باز کنید
  2. عبارت var message="Hello from Node";
  3. با کلیک بر روی فضای خالی سمت چپ شماره خط، یک نقطه شکست به آن خط اضافه کنید. یک نشانگر قرمز نشان می دهد تا توجه داشته باشید که نقطه شکست تنظیم شده است
  4. مرورگر خود را دوباره بارگیری کنید و توجه داشته باشید که دیباگر فرآیند را در نقطه شکست متوقف می کند و به شما امکان می دهد متغیرها و وضعیت برنامه ای را که از راه دور در GKE اجرا می شود بررسی کنید.
  5. در قسمت متغیرها کلیک کنید تا متغیر "message" را پیدا کنید.
  6. خط را با فشار دادن روی Step over اجرا کنید 7cfdee4fd6ef5c3a.png
  7. مشاهده مقدار فعلی متغیر "message" به "Hello from Node"
  8. روی نام متغیر "target" دوبار کلیک کنید و در پنجره بازشو مقدار را به چیزی متفاوت مانند "Hi from Node" تغییر دهید.
  9. روی دکمه Continue در کنترل پنل اشکال زدایی کلیک کنید
  10. پاسخ را در مرورگر خود مرور کنید که اکنون مقدار به روز شده ای را که وارد کرده اید نشان می دهد.
  11. با فشار دادن دکمه توقف، حالت "Debug" را متوقف کنید 647213126d7a4c7b.png و با کلیک مجدد بر روی نقطه شکست، نقطه شکست را حذف کنید.

6. ایجاد یک سرویس استراحت ساده CRUD

در این مرحله برنامه شما به طور کامل برای توسعه کانتینری پیکربندی شده است و شما در جریان کار توسعه اولیه با Cloud Code قدم زده اید. در بخش‌های بعدی، آنچه را که آموخته‌اید با افزودن نقاط پایانی سرویس REST که به پایگاه داده مدیریت‌شده در Google Cloud متصل می‌شوند، تمرین می‌کنید.

پیکربندی وابستگی ها

کد برنامه از یک پایگاه داده برای حفظ بقیه داده های سرویس استفاده می کند. با افزودن موارد زیر در فایل package.json ، اطمینان حاصل کنید که وابستگی ها در دسترس هستند

  1. دو وابستگی دیگر pg اضافه کنید و به فایل package.json sequelize تا یک برنامه CRUD Postgres بسازید. تغییرات پست بخش وابستگی ها به این شکل است.
    "dependencies": {
    "express": "^4.17.3",
    "pg": "^8.8.0",
    "sequelize": "^6.25.7"
  }

سرویس REST را کد کنید

  1. کد برنامه CRUD را به این برنامه اضافه کنید
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip

unzip app.zip

این کد دارد

  • پوشه models با مدل نهاد برای item
  • پوشه controllers با کدی که عملیات CRUD را انجام می دهد
  • پوشه routes که الگوهای URL خاص را به تماس های مختلف هدایت می کند
  • پوشه پیکربندی با جزئیات اتصال به پایگاه داده
  1. توجه داشته باشید که پیکربندی پایگاه داده در فایل db.config.js به متغیرهای محیطی اشاره دارد که برای اتصال به پایگاه داده باید ارائه شوند. همچنین باید درخواست ورودی را برای رمزگذاری url تجزیه و تحلیل کنید.
  2. قطعه کد زیر را در src/index.js اضافه کنید تا بتوانید درست قبل از آخرین قسمتی که با app.listen(PORT, () => {
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);
  1. استقرار را در فایل 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
  1. مقدار 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

استقرار و اعتبارسنجی برنامه

  1. در قسمت پایین Cloud Shell Editor، Cloud Code را انتخاب کنید و سپس Debug on Kubernetes در بالای صفحه انتخاب کنید.
  2. هنگامی که ساخت و آزمایش انجام شد، برگه خروجی می گوید: Resource deployment/mynodejsapp status completed successfully و یک آدرس اینترنتی فهرست می شود: "URL بازارسال شده از سرویس mynodejsapp: http://localhost:8080"
  3. چند مورد اضافه کنید

از ترمینال cloudshell، دستورات زیر را اجرا کنید

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"
  1. GET را با اجرای $URL/items در مرورگر آزمایش کنید. همچنین می توانید curl را از خط فرمان اجرا کنید
curl -X GET $URL/items
  1. Test Delete: اکنون با اجرای دستور زیر سعی کنید یک مورد را حذف کنید. در صورت نیاز مقدار item-id را تغییر دهید.
curl -X DELETE $URL/items/1
    This throws an error message
{"message":"Could not delete Item with id=[object Object]"}

مشکل را شناسایی و برطرف کنید

  1. برنامه در حالت Debug اجرا می شود. بنابراین از نقاط شکست برای پیدا کردن مشکل استفاده کنید. در اینجا چند نکته وجود دارد:
  • ما می دانیم که مشکلی در DELETE وجود دارد زیرا نتیجه دلخواه را بر نمی گرداند. بنابراین شما باید نقطه شکست را در روش itemcontroller.js -> exports.delete تنظیم کنید.
  • اجرای مرحله به مرحله را اجرا کنید و متغیرها را در هر مرحله مشاهده کنید تا مقادیر متغیرهای محلی را در پنجره سمت چپ مشاهده کنید.
  • برای مشاهده مقادیر خاصی مانند request.params این متغیر را به پنجره Watch اضافه کنید.
  1. توجه داشته باشید که مقدار اختصاص داده شده به id undefined است. کد را تغییر دهید تا مشکل برطرف شود.

قطعه کد ثابت به این شکل خواهد بود.

// Delete a Item with the specified id in the request
exports.delete = (req, res) => {
    const id = req.params.id;
  1. پس از راه اندازی مجدد برنامه، با تلاش برای حذف دوباره تست کنید.
  2. با کلیک بر روی مربع قرمز در نوار ابزار اشکال زدایی، جلسه اشکال زدایی را متوقف کنید 647213126d7a4c7b.png

7. پاکسازی

تبریک می گویم! در این آزمایشگاه شما یک برنامه جدید Nodejs را از ابتدا ایجاد کرده اید و آن را پیکربندی کرده اید تا در حالت استقرار داغ با کانتینرها کار کند. سپس برنامه خود را به دنبال همان جریان توسعه‌دهنده موجود در پشته‌های برنامه‌های سنتی، در یک خوشه راه‌دور GKE مستقر کرده و اشکال زدایی کردید.

برای تمیز کردن پس از تکمیل آزمایشگاه:

  1. فایل های مورد استفاده در آزمایشگاه را حذف کنید
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
  1. برای حذف تمام زیرساخت ها و منابع مرتبط، پروژه را حذف کنید