تضمين تطبيق Spring Boot Kotlin في حاويات ونشره في Cloud Run

1. قبل البدء

توفّر Google أداة فعّالة لإنشاء الصور يمكنك من خلالها بسهولة إنشاء صورة لحاوية Docker محسَّنة لتطبيقات Java ونشرها في وقت قصير بدون الحاجة إلى Docker أو Dockerfile. توفّر Google Cloud أيضًا حاويات بدون خادم باستخدام Cloud Run، وهو نظام حوسبة أساسي مُدار يضبط الحاويات التي لا تتضمّن حالة. في هذا الدرس التطبيقي حول الترميز، ستتعرَّف على مدى سهولة تضمين تطبيق Spring Boot Kotlin في حاويات ونشره في Container Registry وتشغيل الصورة على Google Cloud بطريقة سلسة.

يرشدك هذا الدرس التطبيقي إلى خطوات إعداد تطبيق بسيط في لغة Kotlin، ويوضّح كيفية استخدام خدمات Google Cloud وأدواتها، بما في ذلك Jib وContainer Registry وCloud Run.

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

  • الإلمام بلغة وأدوات البرمجة Java
  • معرفة أدوات تحرير النصوص القياسية في Linux، مثل Vim وEmacs وnano

الإجراءات التي ستنفذّها

  • يمكنك إعداد تطبيق Spring Boot Kotlin.
  • إنشاء صورة Docker محسَّنة.
  • انشر الصورة في Container Registry.
  • شغِّل التطبيق المحوَّل على Cloud Run.

المتطلبات

  • مشروع على Google Cloud
  • متصفح، مثل Google Chrome

2. بدء الإعداد

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

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

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

Cloud Shell

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

تفعيل Cloud Shell

  1. من Cloud Console، انقر على تفعيل Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

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

70f315d7b402b476.png

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط.

fbe3a0674c982259.png

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

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

  1. شغِّل الأمر التالي في Cloud Shell لتأكيد مصادقتك:
gcloud auth list

مخرجات الأمر

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. شغّل الأمر التالي في Cloud Shell للتأكد من معرفة الأمر gcloud بمشروعك:
gcloud config list project

مخرجات الأمر

[core]
project = <PROJECT_ID>

إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:

gcloud config set project <PROJECT_ID>

مخرجات الأمر

Updated property [core/project].

3- إعداد تطبيق Spring Boot

  1. يمكنك إنشاء تطبيق Spring Boot جديد من خلال Spring Initializr.
$ curl https://start.spring.io/starter.tgz \
    -d language=kotlin \
    -d dependencies=web \
    -d baseDir=kotlin-jib-cloud-run | tar -xzvf -

تجدر الإشارة إلى أنّ أداة Initializr ستضيف تلقائيًا spring-boot-starter-web إلى العناصر الاعتمادية الخاصة بك في pom.xml من تطبيق النموذج.

  1. يمكنك التغيير إلى دليل تطبيق النموذج.
$ cd kotlin-jib-cloud-run
  1. أنشئ التطبيق وشغِّله باستخدام Maven.
$ ./mvnw -DskipTests spring-boot:run
  1. بعد بدء تشغيل التطبيق، سيبدأ الاستماع على المنفذ 8080. انقر على معاينة الويب 396bfd51f55afb5d.pngفي شريط أدوات Cloud Shell واختَر معاينة على المنفذ 8080 للوصول إلى التطبيق.

4172e1e141daf0c1.png

  1. من المفترض أن تحصل على استجابة 404 لأن التطبيق لا يفعل أي شيء مفيد حتى الآن. يمكنك إيقاف التطبيق باستخدام "Control+C".

4. إضافة وحدة تحكّم على الويب

  1. أنشِئ فئة Controller التالية في الحزمة التجريبية:
$ vi src/main/kotlin/com/example/demo/Controller.kt
    or
$ nano src/main/kotlin/com/example/demo/Controller.kt

src/main/kotlin/com/example/demo/Controller.kt

package com.example.demo

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class Controller {
  
  @GetMapping("/")
  fun saySomething(): String {
    return "Kotlin app on Cloud Run, containerized by Jib!"
  }
}
  1. أعِد إنشاء التطبيق وشغِّله.
$ ./mvnw spring-boot:run
  1. تحقَّق من التطبيق مرة أخرى باستخدام معاينة الويب a6cfcaa1d2119c52.png. هذه المرة، من المفترض أن ترى الرسالة، "Kotlin app on Cloud Run, containerized by Jib!". يمكنك إيقاف التطبيق باستخدام "Control+C".

5- تعبئة تطبيقك ونشره على Container Registry

باستخدام Jib، يمكنك احتواء تطبيقك بطريقة محسَّنة بدون Docker ونشره في أيّ قاعدة بيانات مسجّلين للحاويات.

  1. قبل المتابعة، عليك تفعيل Container Registry API. يجب تنفيذ ذلك مرة واحدة فقط لكل مشروع لإتاحة الوصول إلى واجهة برمجة التطبيقات.
$ gcloud services enable containerregistry.googleapis.com
  1. قم بتشغيل Jib لإنشاء صورة Docker ونشرها على Container Registry.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

في النهاية، ستظهر لك الرسالة التالية التي تفيد بأنّ التطبيق مُضمّن في حاوية ويُرسَل إلى Container Registry.

[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run
...
[INFO] BUILD SUCCESS

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

  1. قبل المتابعة، تأكَّد مما إذا تم نشر الصورة بنجاح. ارجع إلى Cloud Console، وانقر على قائمة التنقلc8b4ea3c68f4c1e3.png، ثم اختَر Container Registry.

6421550ba806beab.png

38ae0ca573c3dcd.png

ستلاحظ أنه تم نشر صورتك بنجاح.

c9086605411691c3.png

6- تشغيل التطبيق المنفصل على Cloud Run

توفّر ميزة تشغيل السحابة الإلكترونية للحاويات بدون خادم، مع زيادة حجم الحاويات التي لا تتضمّن حالة تلقائيًا.

  1. انقر على قائمة التنقّل c8b4ea3c68f4c1e3.png مرة أخرى واختَر تشغيل السحابة الإلكترونية.

812c7c87527ebe4a.png

إذا كانت هذه هي المرة الأولى التي تستخدم فيها Cloud Run، سيظهر لك مربّع الحوار التالي للإعداد لمرة واحدة. انقر على بدء استخدام التشغيل في السحابة الإلكترونية في حال ظهوره.

1b2bf05712f6150a.png

  1. في صفحة تشغيل السحابة الإلكترونية، انقر على إنشاء خدمة.

c0b4b980662f7807.png

  1. في الشاشة التالية، انقر على اختيار ضمن المصدر. المصدر هو الصورة التي تريد تشغيلها على Cloud Run.

2049621ae97d62ee.png

  1. سيعرض مربّع الحوار الصورة التي أنشأتها سابقًا. اختَر الصورة وانقر على متابعة.

564367bc65caefbf.png

  1. لم يتبقَّ سوى بضع نقرات لنشر التطبيق الآن. ضمن منصة النشر، اختَر تشغيل السحابة الإلكترونية (مُدارة بالكامل) لتتم إدارة الخدمة بالكامل على Google Cloud. اختَر منطقة مناسبة لموقعك الجغرافي، واختَر السماح بالاستدعاءات التي لم تتم مصادقتها، ثم انقر على إنشاء. هذا كل شيء!

3eb0f51d15326cac.png

عند نشر الصورة بالكامل، ستعرض صفحة تشغيل السحابة الإلكترونية عنوان URL للوصول إلى التطبيق. ننصحك بالاطّلاع عليه الآن.

8bf800dd6e2f44f2.png

في النهاية، ستظهر لك الرسالة التي تتوقعها من التطبيق.

Kotlin app on Cloud Run, containerized by Jib!

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

7. تَنظيم

  1. لتنظيف بيئتك، عليك حذف التطبيق المنشور على Cloud Run والصورة المنشورة على Container Registry. انتقِل إلى التشغيل في السحابة الإلكترونية، واختَر التطبيق، ثم انقر على حذف.

1dfc2f51c1b5f6e.png

  1. وبالمثل، انتقل إلى صفحة Container Registry واحذف الصورة.

1b724136c1655935.png

8. تهانينا

تهانينا! لقد نجحت في احتواء تطبيق Spring Boot Kotlin ونشره على Cloud Run.

باستخدام Jib، قمت بإنشاء صورة حاوية محسنة بدون تثبيت Docker أو كتابة ملف Docker ونشرته على Container Registry. يعمل Jib على تحسين عملية إنشاء الصور، بحيث يمكن لأي شخص ليس لديه معرفة عميقة بمنصة Docker إضافة تطبيقات Java بسرعة وكفاءة. وبعد ذلك، يمكنك ببضع نقرات نشر التطبيق على Cloud Run لبدء العرض على الفور.

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