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؟
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



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

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

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

يتم تحميل هذا الجهاز الافتراضي بجميع أدوات التطوير التي تحتاج إليها. توفّر هذه الخدمة دليلًا رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إنجاز معظم العمل في هذا الدرس التطبيقي حول الترميز، إن لم يكن كله، باستخدام متصفّح أو جهاز Chromebook فقط.
بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّه تم ضبط المشروع على رقم تعريف مشروعك.
- نفِّذ الأمر التالي في 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`
- نفِّذ الأمر التالي في 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".

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

بعد التأكّد من أنّ التطبيق يعمل، اضغط على 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 في علامة تبويب جديدة.

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

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

انتقِل إلى 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 للاطّلاع على الإصدار الجديد من تطبيقك الذي يعرض كل الزيارات مع الرسالة الجديدة.

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

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

10. تهانينا!
Cleanup
حان الوقت لإيقاف التطبيق لتوفير التكاليف والتحلّي بصفات المواطن الرقمي الصالح.
انتقِل إلى قسم "الإصدارات" في App Engine.

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

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

المواضيع التي تناولناها
ها هي! لقد أنشأت تطبيق ASP.NET Core، وحزمته كحاوية Docker، ونشرته على Google App Engine المرنة من Google.
- كيفية تجميع تطبيق ASP.NET Core بسيط كحاوية Docker
- كيفية نشر تطبيق ASP.NET Core بسيط على App Engine
الخطوات التالية
- مزيد من المعلومات حول Windows على Google Cloud Platform
- مزيد من المعلومات حول .NET على Google Cloud Platform
- مزيد من المعلومات حول خادم SQL على Google Cloud Platform
- مزيد من المعلومات حول Cloud Tools for Visual Studio
- مزيد من المعلومات حول Cloud Tools for PowerShell
الترخيص
يخضع هذا العمل لترخيص المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0 Generic License.