نشر تطبيق 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.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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 بعض الرسائل التي تحتوي على مكتبة الربط الديناميكي التي تم نشرها بنجاح في نهاية العملية.

...
  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 > الصور، ثم في مجلد 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,انشر التطبيق للحصول على مكتبة الربط الديناميكي.

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. تهانينا!

تنظيف

حان الوقت لإيقاف التطبيق لتوفير التكاليف وللبقاء في المواطن الصالح العام على السحابة الإلكترونية.

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

7e9b3b4406e785b9.png

حدد الإصدار وأوقفه.

7f80d9ff2c959e0.png

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

29f3cb5c71225b2d.png

النقاط التي تناولناها

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

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

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

الترخيص

هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.