نشر تطبيق ASP.NET Core في App Engine

1. نظرة عامة

ASP.NET Core هو إطار عمل جديد مفتوح المصدر ومتوافق مع عدة أنظمة أساسية لإنشاء تطبيقات حديثة مستندة إلى السحابة الإلكترونية ومتصلة بالإنترنت باستخدام لغة البرمجة C#.

في هذا التمرين العملي، ستنشر تطبيق ASP.NET Core بسيطًا في بيئة App Engine المرنة. يستند هذا الدرس التطبيقي حول الترميز إلى الدرس التطبيقي حول الترميز إنشاء تطبيق ASP.NET Core وتشغيله من Google Cloud Shell. ننصحك بإكمال هذا الدرس التطبيقي أولاً قبل محاولة إكمال هذا الدرس.

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

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

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

أهداف الدورة التعليمية

  • كيفية تجميع تطبيق ASP.NET Core بسيط كحاوية Docker
  • كيفية نشر تطبيق ASP.NET Core بسيط على App Engine

المتطلبات

  • مشروع Google Cloud Platform
  • متصفّح، مثل Chrome أو Firefox

كيف ستستخدم هذا البرنامج التعليمي؟

قراءة النص فقط قراءة النص وإكمال التمارين

كيف تقيّم تجربتك مع Google Cloud Platform؟

مبتدئ متوسط متقدّم

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

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

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

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة من الأحرف لا تستخدمها Google APIs، ويمكنك تعديلها في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud، كما أنّه غير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (ويتم تحديده عادةً على أنّه PROJECT_ID)، لذا إذا لم يعجبك، يمكنك إنشاء رقم آخر عشوائي، أو يمكنك تجربة رقمك الخاص ومعرفة ما إذا كان متاحًا. ثم يتم "تجميده" بعد إنشاء المشروع.
  • هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا الدرس التطبيقي حول الترميز، اتّبِع أي تعليمات "تنظيف" واردة في نهاية الدرس. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

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

تفعيل 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- إنشاء تطبيق ASP.NET Core في Cloud Shell

في موجه Cloud Shell، يمكنك التأكّد من أنّ أداة سطر الأوامر dotnet مثبّتة من خلال إدراج حِزم تطوير البرامج (SDK) المثبّتة الخاصة بلغة .NET:

dotnet --list-sdks

بعد ذلك، أنشئ تطبيق ويب جديدًا أساسيًا باستخدام ASP.NET Core مع إطار عمل مستهدف netcoreapp3.1:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

من المفترض أن يؤدي ذلك إلى إنشاء مشروع واستعادة التبعيات الخاصة به. من المفترض أن تظهر لك رسالة مشابهة لما يلي.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. تشغيل تطبيق ASP.NET Core

نحن على وشك الانتهاء من تشغيل تطبيقنا. انتقِل إلى مجلد التطبيق.

cd HelloWorldAspNetCore

أخيرًا، شغِّل التطبيق.

dotnet run --urls=http://localhost:8080

يبدأ التطبيق في الاستماع على المنفذ 8080.

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

للتأكّد من أنّ التطبيق يعمل، انقر على زر معاينة الويب في أعلى يسار الصفحة واختَر "المعاينة على المنفذ 8080".

Capture.PNG

ستظهر لك صفحة الويب التلقائية ASP.NET Core:

f579a9baedc108a9.png

بعد التأكّد من أنّ التطبيق يعمل، اضغط على Ctrl+C لإيقافه.

5- نشر تطبيق ASP.NET Core

الآن، انشر التطبيق للحصول على مكتبة روابط ديناميكية مستقلة باستخدام الأمر dotnet publish.

dotnet publish -c Release

يعرض تنفيذ publish بعض الرسائل التي تتضمّن ملف DLL تم نشره بنجاح في نهاية العملية.

...
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/

6. إنشاء ملف app.yaml لبيئة App Engine المرنة

يصف ملف app.yaml كيفية نشر التطبيق على App Engine، وفي هذه الحالة، بيئة App Engine المرنة.

أولاً، انتقِل إلى المجلد publish. يجب أن يكون هذا الملف ضمن المجلد bin/Release، ولكن يعتمد المسار الدقيق على إصدار ‎ .NET:

cd bin/Release/netcoreapp3.1/publish/

أنشئ ملف app.yaml داخل المجلد publish:

cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT

لاحظ كيف يحدّد الملف app.yaml البيئة على أنّها flex ووقت التشغيل على أنّه aspnetcore.

7. النشر في بيئة App Engine المرنة

أنت الآن جاهز لنشر تطبيقك في بيئة App Engine المرنة باستخدام gcloud. داخل دليل publish، نفِّذ ما يلي:

gcloud app deploy --version v0

أثناء عملية النشر، قد يُطلب منك اختيار منطقة لتطبيقك. اختَر منطقة تريد تشغيل تطبيقك فيها.

Please choose a region for your application. After choosing a region, 
you cannot change it. Which region would you like to choose?
 [1] europe-west   (supports standard and flexible)
 [2] us-central    (supports standard and flexible)
 [3] us-east1      (supports standard and flexible)
 [4] asia-northeast1 (supports standard and flexible)
 [5] cancel

سيؤدي ذلك إلى إنشاء صورة لتطبيقك على السحابة الإلكترونية وحفظها في Google Container Registry ونشرها على App Engine. أثناء عملية النشر، يمكنك الاطّلاع على صورة الحاوية التي يتم إنشاؤها:

Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild

في النهاية، من المفترض أن يظهر لك أنّه تم نشر التطبيق.

...
Deployed service [default] to [https://<project-id>.appspot.com]

بعد نشر التطبيق، انتقِل إليه من خلال فتح عنوان URL http://<project-id>.appspot.com في متصفّح الويب.

ستظهر صفحة الويب التلقائية ASP.NET Core في علامة تبويب جديدة.

f579a9baedc108a9.png

يمكنك أيضًا إلقاء نظرة على صورة الحاوية التي تم إنشاؤها لك على السحابة الإلكترونية. في Cloud Console، انتقِل إلى Container Registry > Images، ثم في مجلد appengine، من المفترض أن تظهر صورة تطبيقك.

de788f4949d0c5a.png

8. نشر إصدار جديد من خدمتك

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

لنبدأ أولاً بتعديل التطبيق. افتح أداة تعديل الرموز من Cloud Shell.

868c4f615e2331fe.png

انتقِل إلى Index.cshtml ضمن مجلد Views/Home في HelloWorldAspNetCore وعدِّل الرسالة التلقائية إلى ما يلي:

Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!

احفظ التغييرات، ثم ارجع إلى Cloud Shell. داخل HelloWorldAspNetCore,، انشر التطبيق للحصول على ملف DLL مستقل.

dotnet publish -c Release

انتقِل إلى دليل النشر.

cd bin/Release/netcoreapp3.1/publish/

يمكنك الآن نشر إصدار جديد من تطبيقك (v1 في هذه الحالة).

gcloud app deploy --version v1

بعد نشر التطبيق، يمكنك الانتقال إلى قسم "إصدارات App Engine" في Google Cloud Console للاطّلاع على الإصدار الجديد من تطبيقك الذي يعرض جميع الزيارات مع الرسالة الجديدة.

8cc0cc992b4e07ed.png

9. لوحات البيانات وتقسيم عدد الزيارات

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

5c879431935b080d.png

ضمن قسم "الإصدارات"، يمكنك الاطّلاع على إصدارات تطبيقك التي تم نشرها، ويمكنك تقسيم عدد الزيارات بين الإصدارات المختلفة في قسم "تقسيم عدد الزيارات". لنقسّم عدد الزيارات بين إصدارَين:

176a2e22e755b6d3.png

10. تهانينا!

Cleanup

حان الوقت لإيقاف التطبيق لتوفير التكاليف والتحلّي بصفات المواطن الرقمي الصالح.

انتقِل إلى قسم "الإصدارات" في App Engine.

7e9b3b4406e785b9.png

اختَر الإصدار وأوقِفه.

7f80d9ff2c959e0.png

بعد إيقاف الإصدار، سيتم حذف المثيلات الاحتياطية ويجب أن ينخفض عدد المثيلات إلى صفر.

29f3cb5c71225b2d.png

المواضيع التي تناولناها

ها هي! لقد أنشأت تطبيق ASP.NET Core، وحزمته كحاوية Docker، ونشرته على Google App Engine Flexible.

  • كيفية تجميع تطبيق ASP.NET Core بسيط كحاوية Docker
  • كيفية نشر تطبيق ASP.NET Core بسيط على App Engine

الخطوات التالية

الترخيص

يخضع هذا العمل لترخيص Creative Commons Attribution 2.0 Generic License.