نشر حاوية وتشغيلها باستخدام تشغيل السحابة الإلكترونية على Node.js

1. قبل البدء

6a5cf23c8e20491f.png

Cloud Run هو نظام أساسي مُدار للحوسبة يتيح لك تشغيل حاويات بدون حالة قابلة للإلغاء من خلال طلبات HTTP. لا يعتمد تشغيل السحابة الإلكترونية على خوادم. فلن تحتاج إلى إدارة البنية الأساسية، حتى تتمكن من التركيز على الأمور الأكثر أهمية، ألا وهي إنشاء تطبيقات رائعة. تم إنشاء هذا البرنامج من Knative، ما يتيح لك اختيار تشغيل الحاويات إما باستخدام Cloud Run (مُدارة بالكامل) أو Cloud Run for Anthos. يتمثّل الهدف من هذا الدرس التطبيقي في إنشاء صورة حاوية ونشرها في Cloud Run.

المتطلبات الأساسية

لا ينطبق

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. (إذا لم يكن لديك حساب على Gmail أو G Suite، عليك إنشاء حساب.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

يُرجى تذكُّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (سبق أن تم استخدام الاسم أعلاه ولن يكون مناسبًا لك). ستتم الإشارة إليها لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.

  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "الحذف سريعًا". الذي يقدم لك نصائح حول كيفية إيقاف تشغيل الموارد حتى لا تتكبّد أي فواتير خارج نطاق هذا البرنامج التعليمي. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج الفترة التجريبية المجانية التي تبلغ قيمتها 300 دولار أمريكي.

Cloud Shell

على الرغم من إمكانية إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، عليك استخدام Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud.

هذا الجهاز الافتراضي المستند إلى نظام دبيان محمل بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. وهذا يعني أنّ كل ما ستحتاجه في هذا الدرس التطبيقي حول الترميز هو متصفّح (نعم، يعمل على جهاز Chromebook).

  1. لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على تفعيل Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (من المفترَض أن تستغرق عملية الإعداد والاتصال بالبيئة بضع دقائق فقط).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

لقطة شاشة يوم 14-06-2017 في الساعة 10.13.43 مساءً.png

بعد الربط بتطبيق Cloud Shell، من المفترض أن يظهر لك أنّه قد تمت مصادقتك وأنّ المشروع سبق أن تم ضبطه على PROJECT_ID.

gcloud auth list

مخرجات الأمر

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

مخرجات الأمر

[core]
project = <PROJECT_ID>

إذا لم يتم ضبط المشروع لسبب ما، ما عليك سوى إصدار الأمر التالي:

gcloud config set project <PROJECT_ID>

هل تبحث عن PROJECT_ID؟ تحقَّق من المعرّف الذي استخدمته في خطوات الإعداد أو ابحث عنه في لوحة بيانات Cloud Console:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

تضبط Cloud Shell أيضًا بعض متغيرات البيئة تلقائيًا، وهو ما قد يكون مفيدًا عند تشغيل الأوامر المستقبلية.

echo $GOOGLE_CLOUD_PROJECT

مخرجات الأمر

<PROJECT_ID>
  1. أخيرًا، قم بتعيين تهيئة المنطقة الافتراضية والمشروع.
gcloud config set compute/zone us-central1-f

يمكنك اختيار مجموعة متنوعة من المناطق المختلفة. لمزيد من المعلومات، راجع المناطق المناطق:

تفعيل Cloud Run API

من Cloud Shell، فعِّل Cloud Run API.

gcloud services enable run.googleapis.com

يُفترض أن ينتج عن ذلك رسالة ناجحة مماثلة للرسالة التالية:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3- كتابة نموذج التطبيق

عليك إنشاء تطبيق Node.js بسيط وسريع للاستجابة لطلبات HTTP.

لإنشاء تطبيقك، استخدِم Cloud Shell لإنشاء دليل جديد باسم "helloworld-nodejs" وتغيير الدليل فيه.

mkdir helloworld-nodejs
cd helloworld-nodejs

أنشئ ملف package.json يتضمّن المحتوى التالي:

{
  "name": "cloudrun-helloworld",
  "version": "1.0.0",
  "description": "Simple hello world sample in Node",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.17.1"
  }
}

والأهم من ذلك، أن الملف أعلاه يحتوي على أمر بدء النص البرمجي وتبعية لإطار عمل تطبيق الويب Express.

بعد ذلك، في الدليل نفسه، أنشِئ ملف index.js وانسخ المحتوى التالي إليه:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Hello world received a request.');

  const target = process.env.TARGET || 'World';
  res.send(`Hello ${target}!`);
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});

يُنشئ هذا الرمز خادم ويب أساسيًا يستمع إلى المنفذ المحدّد من خلال متغيّر البيئة PORT. أصبح تطبيقك جاهزًا الآن لإنشائه واختباره وتحميله إلى Container Registry.

4. احتفِظ بتطبيقك في حاويات وحمِّله إلى Container Registry.

لتضمين نموذج التطبيق، أنشِئ ملفًا جديدًا باسم "Dockerfile" في الدليل نفسه الذي يتضمّن الملفات المصدر وانسخ المحتوى التالي إليه:

# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim

# Create and change to the app directory.
WORKDIR /usr/src/app

# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./

# Install production dependencies.
RUN npm install --only=production

# Copy local code to the container image.
COPY . ./

# Run the web service on container startup.
CMD [ "npm", "start" ]

والآن، أنشئ صورة الحاوية باستخدام Cloud Build عن طريق تشغيل الأمر التالي من الدليل الذي يحتوي على ملف Dockerfile:

gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

$GOOGLE_CLOUD_PROJECT هو متغيّر بيئة يتضمّن رقم تعريف مشروعك على Google Cloud عند تنفيذه في Cloud Shell. يمكنك أيضًا الحصول عليه من خلال تشغيل gcloud config get-value project.

بعد الدفع إلى قاعدة بيانات المسجّلين، ستظهر رسالة SUCCESS تحتوي على اسم الصورة (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld). تم تخزين الصورة في Container Registry ويمكن إعادة استخدامها إذا أردت.

يمكنك إدراج جميع صور الحاوية المرتبطة بمشروعك الحالي باستخدام الأمر التالي:

gcloud container images list

إذا أردت تشغيل التطبيق واختباره محليًا من Cloud Shell، يمكنك بدء تشغيله باستخدام أمر docker العادي هذا:

docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

في Cloud Shell، انقر على Web Preview (معاينة الويب) 170b7a95be8c6296.png ثم اختَر Preview on Port 8080 (معاينة على المنفذ 8080).

3618ca3a4a135570.png

سيؤدي ذلك إلى فتح نافذة متصفح تعرض الرسالة Hello World!

a0307f34cacf9e6a.png

ويمكنك أيضًا استخدام "curl localhost:8080".

5- النشر إلى التشغيل في السحابة الإلكترونية

يتم نشر تطبيقك المحوَّل إلى Cloud Run باستخدام الأمر التالي (تأكد من تعديله ليصبح متوافقًا مع اسم الصورة الصحيح للتطبيق الذي أنشأته أو استخدِم صورة gcr.io/cloudrun/hello المنشأة مسبقًا):

gcloud run deploy helloworld \
  --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

يتيح لك خيار التفعيل --allow-unauthenticated الوصول إلى التطبيق بدون مصادقة. يعني خيار النشر --platform managed \ أنّك تطلب البيئة المُدارة بالكامل (وليس بنية Kubernetes الأساسية من خلال Anthos).

انتظِر بضع لحظات حتى تكتمل عملية النشر. وعند الانتهاء من ذلك، يعرض سطر الأوامر عنوان URL للخدمة.

Service [helloworld] revision [helloworld-00001] has been deployed
and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app

يمكنك الآن الانتقال إلى حاويتك المنشورة من خلال فتح عنوان URL للخدمة في متصفّح ويب:

63260b4d3aee42b8.png

يعمل Cloud Run تلقائيًا وأفقيًا على تكبير صورة الحاوية لمعالجة الطلبات التي تم استلامها، ثم يتقلّص عند انخفاض الطلب. لن تدفع إلا مقابل استخدام وحدة المعالجة المركزية (CPU) والذاكرة والشبكات أثناء معالجة الطلبات.

6- تَنظيم

بينما لا يشحن Cloud Run عندما لا تكون الخدمة قيد الاستخدام، قد يستمر تحصيل رسوم منك مقابل تخزين صورة الحاوية التي تم إنشاؤها.

يمكنك حذف مشروعك على Google Cloud لتجنُّب تحمُّل الرسوم، ما سيؤدي إلى إيقاف الفوترة لجميع الموارد المستخدَمة لهذا المشروع، أو حذف صورة helloworld باستخدام هذا الأمر:

gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

لحذف خدمة Cloud Run، استخدِم الأمر التالي:

gcloud run services delete helloworld \
  --platform managed \
  --region us-central1

7. تهانينا

تهانينا! لقد نشرت تطبيقًا مجمّعًا في صورة حاوية على Cloud Run.

مزيد من المعلومات

ومن المفيد أيضًا الاطّلاع على الخطوة Quickstart: Deploy to Cloud Run for Anthos on Google Cloud.

للحصول على مزيد من المعلومات حول إنشاء حاوية HTTP بدون حالة ومناسبة للتشغيل في السحابة الإلكترونية من مصدر الرمز البرمجي وإرسالها إلى Container Registry، يُرجى الاطّلاع على الموارد التالية:

لمزيد من المعلومات حول Knative، وهو المشروع الأساسي المفتوح المصدر، يمكنك الاطّلاع على Knative.