نشر تطبيق Spring Boot في بيئة App Engine العادية

تتميّز تطبيقات App Engine بسهولة إنشائها وصيانتها وتوسيع نطاقها عند تغيُّر احتياجاتك من حيث عدد الزيارات ومساحة تخزين البيانات. باستخدام App Engine، لن تحتاج إلى صيانة أي خوادم. ما عليك سوى تحميل تطبيقك وسيكون جاهزًا للاستخدام.

تتوسّع تطبيقات App Engine تلقائيًا استنادًا إلى عدد الزيارات الواردة. تتوفّر جميع الميزات التالية بشكلٍ أصلي وقابلة للتخصيص بدرجة كبيرة: موازنة التحميل، والخدمات المصغّرة، وإذن الوصول، وقواعد بيانات SQL وNoSQL، والتخزين المؤقت في الذاكرة، وتقسيم عدد الزيارات، والتسجيل، والبحث، والتحكّم في الإصدارات، وعمليات الطرح والتراجع، وفحص الأمان.

تتيح بيئة App Engine العادية وبيئة App Engine المرنة استخدام مجموعة من لغات البرمجة، بما في ذلك Java وPython وPHP وNodeJS وGo، وتمنح البيئتان المطوّرين أقصى قدر من المرونة في طريقة عمل تطبيقاتهم. تتضمّن كل بيئة نقاط قوة معيّنة. لمزيد من المعلومات، يُرجى الاطّلاع على اختيار بيئة App Engine.

ستتعلّم كيفية نشر تطبيق Spring Boot في بيئة App Engine العادية. يتم تقليل حجم البيئة العادية إلى صفر مثيل عندما لا يستخدمها أحد، ويتم زيادتها تلقائيًا.

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

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

المهام التي ستنفذها

  • كيفية إنشاء تطبيق Java Spring Boot على App Engine

المتطلبات

إعداد البيئة بالسرعة التي تناسبك

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

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

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

لن تكلفك هذه التجربة العملية أكثر من بضعة دولارات، ولكن قد تكون التكلفة أعلى إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل.

يمكن للمستخدمين الجدد في Google Cloud الاستفادة من فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

Cloud Shell

ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud.

تفعيل Cloud Shell

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

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

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا ثابتًا بسعة 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`
gcloud config list project

ناتج الأمر

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

ناتج الأمر

Updated property [core/project].

بعد تشغيل Cloud Shell، يمكنك استخدام سطر الأوامر لإنشاء تطبيق Spring Boot جديد باستخدام Spring Initializr.

$ curl https://start.spring.io/starter.tgz \
  -d bootVersion=2.1.8.RELEASE \
  -d dependencies=web \
  -d baseDir=gae-standard-example | tar -xzvf -
$ cd gae-standard-example

هناك طريقتان لنشر تطبيق خادم Java، إما باستخدام Maven App Engine Plugin أو Gradle App Engine Plugin، أو من خلال نشر حزمة دليل war. ستستخدم Maven App Engine Plugin لنشر التطبيق.

إضافة Maven App Engine Plugin

تعديل pom.xml لتضمين مكوّن إضافي على Google Cloud يسهّل عملية النشر يمكنك استخدام Vim أو nano أو Emacs لتعديل الملف.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.1.0</version>
        <configuration>
          <version>1</version>
          <projectId>GCLOUD_CONFIG</projectId>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
</project>
  1. لنشر التطبيق في بيئة App Engine العادية، يجب إنشاء ملف واصف src/main/appengine/app.yaml جديد.
$ mkdir -p src/main/appengine/
$ touch src/main/appengine/app.yaml
  1. عدِّل الملف src/main/appengine/app.yaml وأضِف المحتوى التالي:

src/main/appengine/app.yaml

runtime: java11
instance_class: F4

أضِف وحدة تحكّم جديدة تعرض "hello world!" في DemoApplication.java.

src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

...

// Add imports
import org.springframework.web.bind.annotation.*;

@SpringBootApplication
@RestController
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }

  @GetMapping("/")
  public String hello() {
    return "hello world!";
  }
}
  1. يمكنك بدء تطبيق Spring Boot باستخدام إضافة Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. بعد بدء تشغيل التطبيق، انقر على معاينة الويب في شريط أدوات Cloud Shell واختَر المعاينة على المنفذ 8080.

سيتم فتح علامة تبويب في المتصفّح والاتصال بالخادم الذي بدأته.

  1. أولاً، عليك تهيئة المشروع لتتمكّن من تشغيل تطبيقات App Engine. عليك أيضًا تهيئة المشروع للتشغيل في المنطقة الوسطى من الولايات المتحدة.
$ gcloud app create --region us-central
You are creating an app for project [...].
WARNING: Creating an App Engine application for a project is irreversible and the region
cannot be changed. More information about regions is at
https://cloud.google.com/appengine/docs/locations
  1. بعد ذلك، يمكنك نشر تطبيقك في بيئة App Engine العادية من خلال تنفيذ mvn appengine:deploy.
$ ./mvnw -DskipTests package appengine:deploy
... first time deploy may take a couple of minutes
  1. بعد نشر التطبيق، يمكنك الانتقال إليه من خلال فتح http://<project-id>.appspot.com في متصفّح الويب أو استخدام الأمر التالي في Cloud Shell:
$ gcloud app browse
... [It may print out the URL for your app]

لقد تعلّمت كيفية كتابة أول تطبيق ويب لك على App Engine.

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