البرنامج التعليمي: نشر تطبيق ASP.NET Core وAzure SQL Database على Azure App Service

في هذا البرنامج التعليمي، ستتعلم كيفية نشر تطبيق ASP.NET Core يستند إلى البيانات إلى Azure App Service والاتصال بقاعدة بيانات Azure SQL. ستقوم أيضا بنشر ذاكرة التخزين المؤقت Azure ل Redis لتمكين التعليمات البرمجية للتخزين المؤقت في التطبيق الخاص بك. Azure App Service هي خدمة استضافة ويب قابلة للتطوير بدرجة كبيرة وتصحيح ذاتي يمكنها نشر التطبيقات بسهولة على Windows أو Linux. على الرغم من أن هذا البرنامج التعليمي يستخدم تطبيق ASP.NET Core 7.0، فإن العملية هي نفسها للإصدارات الأخرى من ASP.NET Core و ASP.NET Framework.

يتطلب هذا البرنامج التعليمي:

عينات التطبيقات

لاستكشاف نموذج التطبيق المستخدم في هذا البرنامج التعليمي، قم بتنزيله من المستودع https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore أو استنساخه باستخدام أمر Git التالي:

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

1. إنشاء خدمة التطبيقات وقاعدة البيانات وذاكرة التخزين المؤقت

في هذه الخطوة، يمكنك إنشاء موارد Azure. تنشئ الخطوات المستخدمة في هذا البرنامج التعليمي مجموعة من الموارد الآمنة بشكل افتراضي التي تتضمن App Service وAzure SQL Database وAzure Cache. بالنسبة لعملية الإنشاء، ستحدد:

  • اسم تطبيق الويب. هو الاسم المستخدم كجزء من اسم DNS لتطبيق الويب الخاص بك في شكل https://<app-name>.azurewebsites.net.
  • المنطقة لتشغيل التطبيق فعلياً في العالم.
  • مكدس الذاكرة المؤقتة لوقت التشغيل للتطبيق. إنه المكان الذي تحدد فيه إصدار .NET لاستخدامه لتطبيقك.
  • خطة الاستضافة للتطبيق. إنها طبقة الأسعار التي تتضمن مجموعة الميزات وسعة التحجيم لتطبيقك.
  • مجموعة الموارد للتطبيق. تتيح لك مجموعة الموارد تجميع (في حاوية منطقية) جميع موارد Azure المطلوبة للتطبيق.

سجّل الدخول إلى مدخل Azure واتبع هذه الخطوات لإنشاء مورد Azure App Service.

الخطوة 1: في مدخل Microsoft Azure:

  1. أدخل "قاعدة بيانات تطبيق ويب" في شـريط البحث في أعلى مدخل Microsoft Azure.
  2. حدد العنصر المسمى تطبيق ويب + قاعدة بيانات ضمن عنوان Marketplace. يمكنك أيضا الانتقال إلى معالج الإنشاء مباشرة.

لقطة شاشة تعرض كيفية استخدام مربع البحث في شريط الأدوات العلوي للعثور على تطبيق الويب + معالج إنشاء قاعدة البيانات.

الخطوة 2: في صفحة إنشاء تطبيق ويب + قاعدة بيانات ، املأ النموذج كما يلي.

  1. مجموعة الموارد → حدد إنشاء جديد واستخدم اسم msdocs-core-sql-tutorial.
  2. المنطقة → أي منطقة Azure قريبة منك.
  3. الاسمmsdocs-core-sql-XYZ حيث XYZ هو أي ثلاثة أحرف عشوائية. يجب أن يكون هذا الاسم فريدا عبر Azure.
  4. مكدس وقت التشغيل → .NET 7 (STS).
  5. إضافة ذاكرة التخزين المؤقت Azure ل Redis؟ → نعم.
  6. خطة الاستضافةالأساسية. عندما تكون مستعداً، يمكنك التوسع إلى مستوى أسعار الإنتاج لاحقاً.
  7. حدد SQLAzure كمحرك قاعدة البيانات. قاعدة بيانات Azure SQL هي نظام أساسي مدار بالكامل كمحرك قاعدة بيانات خدمة (PaaS) يعمل دائما على أحدث إصدار مستقر من SQL Server.
  8. حدد "Review + create".
  9. وبعد اكتمال عملية التحقق، حدد Create.

لقطة شاشة توضح كيفية تكوين تطبيق جديد وقاعدة بيانات جديدة في تطبيق الويب + معالج قاعدة البيانات.

الخطوة 3: يستغرق النشر بضع دقائق لإكماله. بعد اكتمال التوزيع، حدد الزر انتقال إلى المورد. يتم نقلك مباشرة إلى تطبيق App Service، ولكن يتم إنشاء الموارد التالية:

  • مجموعة الموارد → الحاوية لكافة الموارد التي تم إنشاؤها.
  • خطة خدمة التطبيق → تحدد موارد الحساب لخدمة التطبيق. يتم إنشاء خطة Linux في الطبقة الأساسية.
  • تمثل خدمة التطبيقات → تطبيقك وتعمل في خطة خدمة التطبيق.
  • الشبكة الظاهرية متكاملة مع تطبيق خدمة التطبيق وتعزل نسبة استخدام الشبكة الخلفية.
  • نقاط النهاية الخاصة → نقاط نهاية Access لخادم قاعدة البيانات وذاكرة التخزين المؤقت Redis في الشبكة الظاهرية.
  • تمثل واجهات الشبكة → عناوين IP الخاصة، واحدة لكل نقطة من نقاط النهاية الخاصة.
  • خادم قاعدة بيانات Azure SQL → يمكن الوصول إليه فقط من خلف نقطة النهاية الخاصة به.
  • قاعدة بيانات Azure SQL → يتم إنشاء قاعدة بيانات ومستخدم لك على الخادم.
  • → الوصول إلى ذاكرة التخزين المؤقت Azure ل Redis فقط من خلف نقطة النهاية الخاصة به.
  • مناطق DNS الخاصة → تمكين دقة DNS لخادم قاعدة البيانات وذاكرة التخزين المؤقت Redis في الشبكة الظاهرية.

لقطة شاشة تعرض الانتهاء من عملية التوزيع.

2. التحقق من سلسلة الاتصال

قام معالج الإنشاء بإنشاء سلسلة الاتصال لقاعدة بيانات SQL وذاكرة التخزين المؤقت Redis بالفعل. في هذه الخطوة، ابحث عن سلسلة الاتصال التي تم إنشاؤها لاحقا.

الخطوة 1: في صفحة App Service، في القائمة اليسرى، حدد Configuration.

لقطة شاشة توضح كيفية فتح صفحة التكوين في خدمة التطبيقات.

الخطوة 2:

  1. قم بالتمرير إلى أسفل الصفحة وابحث عن AZURE_SQL_CONNECTIONSTRING في قسم سلاسل الاتصال. تم إنشاء هذه السلسلة من قاعدة بيانات SQL الجديدة بواسطة معالج الإنشاء. لإعداد التطبيق الخاص بك، هذا الاسم هو كل ما تحتاجه.
  2. ابحث أيضا عن AZURE_REDIS_CONNECTIONSTRING في قسم إعدادات التطبيق. تم إنشاء هذه السلسلة من ذاكرة التخزين المؤقت Redis الجديدة بواسطة معالج الإنشاء. لإعداد التطبيق الخاص بك، هذا الاسم هو كل ما تحتاجه.
  3. إذا أردت ذلك، يمكنك تحديد الزر تحرير إلى يسار كل إعداد ورؤية قيمته أو نسخها. لاحقا، ستقوم بتغيير التطبيق الخاص بك لاستخدام AZURE_SQL_CONNECTIONSTRING و AZURE_REDIS_CONNECTIONSTRING.

لقطة شاشة توضح كيفية إنشاء إعداد التطبيق.

3 - توزيع عينة التعليمات البرمجية

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

الخطوة 1: في نافذة مستعرض جديدة:

  1. قم بتسجيل الدخول إلى حساب GitHub الخاص بك.
  2. الانتقال إلى https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.
  3. حدد تفريع:
  4. حدد Create fork.

لقطة شاشة توضح كيفية إنشاء نسخة مستودع من نموذج مستودع GitHub.

الخطوة 2: في صفحة App Service، في القائمة اليسرى، حدد Deployment Center.

لقطة شاشة توضح كيفية فتح مركز التوزيع في خدمة التطبيقات.

الخطوة 3: في صفحة Deployment Center:

  1. في المصدر، حدد GitHub. بشكل افتراضي، يتم تحديد إجراءات GitHub كموفر بناء.
  2. سجل الدخول إلى حساب GitHub واتبع المطالبة لتخويل Azure.
  3. في المؤسسة، حدد حسابك.
  4. في Repository، حدد msdocs-app-service-sqldb-dotnetcore.
  5. في الفرع، حدد رئيسي.
  6. في القائمة العلوية، حدد حفظ. تلتزم App Service بملف سير عمل في مستودع GitHub المختار، في الدليل .github/workflows.

لقطة شاشة توضح كيفية تكوين CI / CD باستخدام إجراءات GitHub.

الخطوة 4: ارجع إلى صفحة GitHub للعينة المتشعبة، وافتح Visual Studio Code في المتصفح بالضغط على . المفتاح.

لقطة شاشة توضح كيفية فتح تجربة متصفح تعليمة برمجية Visual Studio في GitHub.

الخطوة 5: في Visual Studio Code في المتصفح:

  1. افتح DotNetCoreSqlDb/appsettings.json في المستكشف.
  2. غير اسم MyDbConnection سلسلة الاتصال إلى AZURE_SQL_CONNECTIONSTRING، الذي يطابق سلسلة الاتصال التي تم إنشاؤها في App Service سابقا.

لقطة شاشة تعرض اسم سلسلة الاتصال تم تغييره في appsettings.json.

الخطوة 6:

  1. افتح DotNetCoreSqlDb/Program.cs في المستكشف.
  2. في options.UseSqlServer الأسلوب ، قم بتغيير اسم MyDbConnection سلسلة الاتصال إلى AZURE_SQL_CONNECTIONSTRING. هذا هو المكان الذي يتم فيه استخدام سلسلة الاتصال من قبل نموذج التطبيق.
  3. قم بإزالة builder.Services.AddDistributedMemoryCache(); الأسلوب واستبداله بالتعليمات البرمجية التالية. يغير التعليمات البرمجية الخاصة بك من استخدام ذاكرة التخزين المؤقت في الذاكرة إلى ذاكرة التخزين المؤقت Redis في Azure، ويفعل ذلك باستخدام AZURE_REDIS_CONNECTIONSTRING من وقت سابق.
builder.Services.AddStackExchangeRedisCache(options =>
{
options.Configuration = builder.Configuration["AZURE_REDIS_CONNECTIONSTRING"];
options.InstanceName = "SampleInstance";
});

لقطة شاشة تعرض اسم سلسلة الاتصال تم تغييره في Program.cs.

الخطوة 7:

  1. افتح .github/workflows/main_msdocs-core-sql-XYZ في المستكشف. تم إنشاء هذا الملف بواسطة معالج إنشاء App Service.
  2. dotnet publish ضمن الخطوة ، أضف خطوة لتثبيت أداة Entity Framework Core باستخدام الأمر dotnet tool install -g dotnet-ef --version 7.0.14.
  3. ضمن الخطوة الجديدة، أضف خطوة أخرى لإنشاء حزمة ترحيل قاعدة بيانات في حزمة النشر: dotnet ef migrations bundle --runtime linux-x64 -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate. حزمة الترحيل هي قابلة للتنفيذ قائمة بذاتها يمكنك تشغيلها في بيئة الإنتاج دون الحاجة إلى .NET SDK. تحتوي حاوية App Service linux فقط على وقت تشغيل .NET وليس .NET SDK.

لقطة شاشة تعرض الخطوات المضافة إلى ملف سير عمل GitHub لمجموعة ترحيل قاعدة البيانات.

الخطوة 8:

  1. حدد ملحق البرنامج للتحكم بالمصادر.
  2. في مربع النص، اكتب رسالة تثبيت مثل Configure DB & Redis & add migration bundle.
  3. حدد Commit and Push.

لقطة شاشة تعرض التغييرات التي يتم تنفيذها ودفعها إلى GitHub.

الخطوة 9: العودة إلى صفحة مركز النشر في مدخل Microsoft Azure:

  1. حدد "Logs". تم بالفعل بدء تشغيل نشر جديد من التغييرات الملتزم بها.
  2. في عنصر السجل لتشغيل النشر، حدد إدخال Build/Deploy Logs مع أحدث طابع زمني.

لقطة شاشة توضح كيفية فتح سجلات التوزيع في مركز التوزيع.

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

لقطة شاشة تعرض تشغيل GitHub قيد التقدم.

4. إنشاء مخطط قاعدة البيانات

باستخدام قاعدة بيانات SQL المحمية بالشبكة الظاهرية، فإن أسهل طريقة لتشغيل عمليات ترحيل قاعدة بيانات dotnet هي في جلسة SSH مع حاوية App Service.

الخطوة 1: مرة أخرى في صفحة App Service، في القائمة اليسرى، حدد SSH.

لقطة شاشة توضح كيفية فتح SSH shell لتطبيقك من مدخل Microsoft Azure.

الخطوة 2: في محطة SSH الطرفية:

  1. شغّل cd /home/site/wwwroot. فيما يلي جميع الملفات المنشورة.
  2. قم بتشغيل حزمة الترحيل التي تم إنشاؤها بواسطة سير عمل GitHub باستخدام ./migrate. إذا نجحت، فإن خدمة التطبيقات تتصل بنجاح بقاعدة بيانات SQL. يمكن أن تستمر التغييرات التي يتم إجراؤها على الملفات في /home فقط بعد عمليات إعادة تشغيل التطبيق. التغييرات خارج /home غير مستمرة.

لقطة شاشة توضح الأوامر التي يجب تشغيلها في SSH shell ومخرجاتها.

5. استعرض للوصول إلى التطبيق

الخطوة 1: في صفحة App Service:

  1. من القائمة اليسرى، حدد نظرة عامة.
  2. حدد عنوان URL لتطبيقك. يمكنك أيضًا الانتقال مباشرة إلىhttps://<app-name>.azurewebsites.net.

لقطة شاشة توضح كيفية إطلاق خدمة التطبيق في مدخل Microsoft Azure

الخطوة 2: إضافة بعض المهام إلى القائمة. تهانينا، أنت تقوم بتشغيل تطبيق آمن يستند إلى البيانات ASP.NET Core في Azure App Service.

لقطة شاشة لتطبيق .NET Core الذي يعمل في App Service.

تلميح

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

6. دفق سجلات التشخيص

تلتقط Azure App Service جميع الرسائل التي تم تسجيلها في وحدة التحكم لمساعدتك في تشخيص المشكلات المتعلقة بالتطبيق الخاص بك. يقوم نموذج التطبيق بإخراج رسائل سجل وحدة التحكم في كل نقطة من نقاط النهاية الخاصة به لتوضيح هذه الإمكانية.

الخطوة 1: في صفحة App Service:

  1. من القائمة اليسرى، حدد تسجيلات خدمة التطبيق.
  2. ضمن سجل التطبيقات، حدد نظام الملفات.

لقطة شاشة توضح كيفية تمكين السجلات الأصلية في خدمة التطبيقات في مدخل Microsoft Azure.

الخطوة 2: من القائمة اليسرى، حدد Log stream. ترى سجلات تطبيقك، بما في ذلك سجلات النظام الأساسي والسجلات من داخل الحاوية.

لقطة شاشة توضح كيفية عرض تدفق السجل في مدخل Microsoft Azure.

7. تنظيف الموارد

عند الانتهاء، يمكنك حذف جميع الموارد من اشتراك Azure الخاص بك عن طريق حذف مجموعة الموارد.

الخطوة 1: في شريط البحث أعلى مدخل Microsoft Azure:

  1. أدخل اسم مجموعة الموارد.
  2. حدد مجموعة الموارد.

لقطة شاشة توضح كيفية البحث عن مجموعة موارد والتنقل إليها في مدخل Microsoft Azure.

الخطوة 2: في صفحة مجموعة الموارد، حدد حذف مجموعة الموارد.

لقطة شاشة تعرض موقع زر حذف مجموعة الموارد في مدخل Microsoft Azure.

الخطوة 3:

  1. أدخل اسم مجموعة الموارد لتأكيد حذفك.
  2. حدد حذف.

لقطة شاشة لمربع حوار التأكيد لحذف مجموعة موارد في مدخل Microsoft Azure. :

الأسئلة الشائعة

كم يكلف هذا الإعداد؟

أسعار موارد الإنشاء كما يلي:

  • يتم إنشاء خطة App Service في الطبقة الأساسية، ويمكن تغيير حجمها زيادة أو نقصانًا. راجع تسعير App Service.
  • يتم إنشاء قاعدة بيانات Azure SQL في مستوى الأغراض العامة بلا خادم على أجهزة السلسلة القياسية مع الحد الأدنى من الذاكرات الأساسية. هناك تكلفة صغيرة ويمكن توزيعها على مناطق أخرى. يمكنك تقليل التكلفة بشكل أكبر عن طريق تقليل الحد الأقصى لحجمها، أو يمكنك توسيع نطاقها عن طريق ضبط مستوى الخدمة وطبقة الحوسبة وتكوين الأجهزة وعدد الذاكرات الأساسية وحجم قاعدة البيانات والتكرار في المنطقة. راجع تسعير قاعدة بيانات Azure SQL.
  • يتم إنشاء ذاكرة التخزين المؤقت Azure ل Redis في المستوى الأساسي مع الحد الأدنى لحجم ذاكرة التخزين المؤقت. هناك تكلفة صغيرة مرتبطة بهذا المستوى. يمكنك توسيع نطاقه إلى مستويات أداء أعلى للحصول على قابلية وصول عالية، وتكوين أنظمة المجموعات، وميزات أخرى. راجع تسعير Azure Cache for Redis.
  • لا تتحمل الشبكة الظاهرية رسوما ما لم تقم بتكوين وظائف إضافية، مثل التناظر. راجع أسعار شبكة Azure الظاهرية.
  • تتحمل منطقة DNS الخاصة رسوما صغيرة. راجع أسعار Azure DNS.

كيف أعمل الاتصال بخادم قاعدة بيانات Azure SQL المؤمن خلف الشبكة الظاهرية باستخدام أدوات أخرى؟

  • للوصول الأساسي من أداة سطر الأوامر، يمكنك التشغيل sqlcmd من وحدة SSH الطرفية للتطبيق. لا تأتي حاوية التطبيق مع sqlcmd، لذا يجب عليك تثبيتها يدوياً. تذكر أن العميل المثبت لا يستمر عبر عمليات إعادة تشغيل التطبيق.
  • للاتصال من عميل SQL Server Management Studio أو من Visual Studio، يجب أن يكون جهازك داخل الشبكة الظاهرية. على سبيل المثال، قد يكون جهاز Azure ظاهري متصل بإحدى الشبكات الفرعية، أو جهازا في شبكة محلية لديه اتصال VPN من موقع إلى موقع مع شبكة Azure الظاهرية.

كيف يعمل تطوير التطبيقات المحلية مع إجراءات GitHub؟

خذ ملف سير العمل الذي تم إنشاؤه تلقائيا من خدمة التطبيق كمثال، git push كل يبدأ تشغيل بنية وتوزيع جديد. من نسخة محلية من مستودع GitHub، يمكنك إجراء التحديثات المطلوبة دفعه إلى GitHub. على سبيل المثال:

git add .
git commit -m "<some-message>"
git push origin main

كيف أعمل أخطاء تصحيح الأخطاء أثناء نشر إجراءات GitHub؟

إذا فشلت خطوة في ملف سير عمل GitHub الذي تم إنشاؤه تلقائيا، فحاول تعديل الأمر الفاشل لإنشاء المزيد من الإخراج المطول. على سبيل المثال، يمكنك الحصول على المزيد من الإخراج من أي من dotnet الأوامر عن طريق إضافة -v الخيار . قم بتثبيت التغييرات ودفعها لتشغيل توزيع آخر إلى App Service.

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

تقدم إلى البرنامج التعليمي التالي لمعرفة كيفية تأمين تطبيقك باستخدام مجال وشهادة مخصصين.

أو، يمكنك التحقق من الموارد الأخرى: