البرنامج التعليمي: نشر تطبيق 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 8.0، فإن العملية هي نفسها للإصدارات الأخرى من ASP.NET Core.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إنشاء بنية ذاكرة التخزين المؤقت ل App Service وSQL Database وRedis بشكل افتراضي
  • نشر نموذج تطبيق ASP.NET Core يستند إلى البيانات
  • استخدام سلسلة الاتصال وإعدادات التطبيق
  • إنشاء مخطط قاعدة بيانات عن طريق تحميل مجموعة عمليات الترحيل
  • تدفق سجلات التشخيص من Azure
  • إدارة التطبيق في مدخل Azure
  • توفير ونشر باستخدام Azure Developer CLI
  • استخدام اتصال SQL بدون كلمة مرور باستخدام هوية مدارة

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

1. تشغيل العينة

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

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

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

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

الخطوة 2: في نسخة GitHub:

  1. حدد main>starter-no-infra لفرع البداية. يحتوي هذا الفرع فقط على نموذج المشروع ولا يوجد ملفات أو تكوينات متعلقة ب Azure.
  2. حدد Code>Create codespace on main. تستغرق مساحة التعليمات البرمجية بضع دقائق لإعدادها.

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

الخطوة 3: في الوحدة الطرفية لمساحة التعليمات البرمجية:

  1. تشغيل عمليات ترحيل قاعدة البيانات باستخدام dotnet ef database update.
  2. شغّل التطبيق باستخدام dotnet run.
  3. عندما ترى الإعلام Your application running on port 5093 is available.، حدد فتح في المستعرض. يجب أن تشاهد نموذج التطبيق في علامة تبويب مستعرض جديدة. لإيقاف التطبيق، اكتب Ctrl+C.

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

تلميح

يمكنك أن تسأل GitHub Copilot عن هذا المستودع. على سبيل المثال:

  • @workspace ماذا يفعل هذا المشروع؟
  • @workspace ماذا يفعل المجلد .devcontainer؟

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

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

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

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

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

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

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

تلميح

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

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

الخطوة 1: في صفحة App Service، من القائمة اليسرى، حدد Settings>Environment variables.

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

الخطوة 2:

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

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

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

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

الخطوة 1: في القائمة اليمنى، حدد Deployment>Deployment Center.

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

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

  1. في المصدر، حدد GitHub. بشكل افتراضي، يتم تحديد إجراءات GitHub كموفر بناء.
  2. سجل الدخول إلى حساب GitHub واتبع المطالبة لتخويل Azure.
  3. في المؤسسة، حدد حسابك.
  4. في Repository، حدد msdocs-app-service-sqldb-dotnetcore.
  5. في Branch، حدد starter-no-infra. هذا هو نفس الفرع الذي عملت فيه مع نموذج التطبيق الخاص بك، دون أي ملفات أو تكوينات متعلقة ب Azure.
  6. بالنسبة لنوع المصادقة، حدد الهوية المعينة من قبل المستخدم.
  7. في القائمة العلوية، حدد حفظ. تلتزم App Service بملف سير عمل في مستودع GitHub المختار، في الدليل .github/workflows. بشكل افتراضي، ينشئ مركز التوزيع هوية معينة من قبل المستخدم لسير العمل للمصادقة باستخدام Microsoft Entra (مصادقة OIDC). للحصول على خيارات المصادقة البديلة، راجع النشر إلى App Service باستخدام GitHub Actions.

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

الخطوة 3: مرة أخرى في مساحة التعليمات البرمجية GitHub لنسخة المستودع الخاصة بك، قم بتشغيل git pull origin starter-no-infra. يؤدي هذا إلى سحب ملف سير العمل الملتزم به حديثا إلى مساحة التعليمات البرمجية الخاصة بك.

لقطة شاشة تعرض سحب git داخل مساحة تعليمات GitHub البرمجية.

الخطوة 4 (الخيار 1: مع GitHub Copilot):

  1. ابدأ جلسة دردشة جديدة عن طريق تحديد طريقة عرض الدردشة، ثم تحديد +.
  2. اسأل، "@workspace كيف يتصل التطبيق بقاعدة البيانات وذاكرة التخزين المؤقت؟" قد يمنحك Copilot بعض الشرح حول MyDatabaseContext الفئة وكيفية تكوينها في Program.cs.
  3. اسأل، "في وضع الإنتاج، أريد أن يستخدم التطبيق سلسلة الاتصال يسمى AZURE_SQL_CONNECTIONSTRING لقاعدة البيانات وإعداد التطبيق المسمى AZURE_REDIS_CONNECTIONSTRING*"." قد يمنحك Copilot اقتراحا للتعليمات البرمجية مشابها لاقتراح في الخيار 2: بدون خطوات GitHub Copilot أدناه وحتى إخبارك بإجراء التغيير في ملف Program.cs.
  4. افتح Program.cs في المستكشف وأضف اقتراح التعليمات البرمجية. لا يمنحك GitHub Copilot نفس الاستجابة في كل مرة، وهو ليس صحيحا دائما. قد تحتاج إلى طرح المزيد من الأسئلة لضبط استجابتها. للحصول على تلميحات، راجع ما الذي يمكنني فعله باستخدام GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟

لقطة شاشة توضح كيفية طرح سؤال في جلسة دردشة GitHub Copilot جديدة.

الخطوة 4 (الخيار 2: بدون GitHub Copilot):

  1. افتح Program.cs في المستكشف.
  2. ابحث عن التعليمات البرمجية التي تم التعليق عليها (الأسطر 12-21) وقم بإلغاء التعليق عليها. تتصل هذه التعليمة البرمجية بقاعدة البيانات باستخدام AZURE_SQL_CONNECTIONSTRING ذاكرة التخزين المؤقت Redis وتتصل بها باستخدام إعداد AZURE_REDIS_CONNECTIONSTRINGالتطبيق .

لقطة شاشة تعرض مساحة تعليمات GitHub البرمجية وملف Program.cs المفتوح.

الخطوة 5 (الخيار 1: مع GitHub Copilot):

  1. افتح .github/workflows/starter-no-infra_msdocs-core-sql-XYZ في المستكشف. تم إنشاء هذا الملف بواسطة معالج إنشاء App Service.
  2. قم بتمييز dotnet publish الخطوة وحدد .
  3. اسأل Copilot، "تثبيت dotnet ef، ثم إنشاء مجموعة عمليات ترحيل في نفس مجلد الإخراج."
  4. إذا كان الاقتراح مقبولا، فحدد قبول. لا يمنحك GitHub Copilot نفس الاستجابة في كل مرة، وهو ليس صحيحا دائما. قد تحتاج إلى طرح المزيد من الأسئلة لضبط استجابتها. للحصول على تلميحات، راجع ما الذي يمكنني فعله باستخدام GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟

لقطة شاشة تعرض استخدام GitHub Copilot في ملف سير عمل GitHub.

الخطوة 5 (الخيار 2: بدون GitHub Copilot):

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

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

الخطوة 6:

  1. حدد ملحق البرنامج للتحكم بالمصادر.
  2. في مربع النص، اكتب رسالة تثبيت مثل Configure Azure database and cache connections. أو حدد واسمح ل GitHub Copilot بإنشاء رسالة تثبيت لك.
  3. حدد Commit، ثم قم بالتأكيد باستخدام Yes.
  4. حدد مزامنة التغييرات 1، ثم تأكد من موافق.

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

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

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

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

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

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

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

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

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

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

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

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

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

في جلسة SSH، يمكن أن تستمر التغييرات على الملفات في /home فقط بعد إعادة تشغيل التطبيق. التغييرات خارج /home غير مستمرة.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

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. من القائمة اليسرى، حدد Monitoring>App Service logs.
  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. :

2. إنشاء موارد Azure ونشر نموذج تطبيق

في هذه الخطوة، يمكنك إنشاء موارد Azure ونشر نموذج تطبيق إلى App Service على Linux. تنشئ الخطوات المستخدمة في هذا البرنامج التعليمي مجموعة من الموارد الآمنة بشكل افتراضي التي تتضمن خدمة التطبيقات وقاعدة بيانات Azure SQL وذاكرة التخزين المؤقت Azure ل Redis.

تحتوي حاوية التطوير بالفعل على Azure Developer CLI (AZD).

  1. من جذر المستودع، قم بتشغيل azd init.

    azd init --template dotnet-app-service-sqldb-infra
    
  2. عند المطالبة، قدم الإجابات التالية:

    السؤال الإجابة
    الدليل الحالي غير فارغ. هل ترغب في تهيئة مشروع هنا في "<دليلك>"؟ السنة
    ماذا تريد أن تفعل بهذه الملفات؟ الاحتفاظ بالملفات الموجودة دون تغيير
    أدخل اسم بيئة جديدة اكتب اسم فريد. يستخدم قالب AZD هذا الاسم كجزء من اسم DNS لتطبيق الويب الخاص بك في Azure (<app-name>.azurewebsites.net). يسمح بالأحرف الأبجدية الرقمية والواصلات.
  3. سجل الدخول إلى Azure عن طريق تشغيل azd auth login الأمر واتباع المطالبة:

    azd auth login
    
  4. إنشاء موارد Azure الضرورية ونشر التعليمات البرمجية للتطبيق باستخدام azd up الأمر . اتبع المطالبة لتحديد الاشتراك والموقع المطلوبين لموارد Azure.

    azd up
    

    azd up يستغرق الأمر حوالي 15 دقيقة لإكماله (تستغرق ذاكرة التخزين المؤقت Redis معظم الوقت). كما أنه يقوم بتجميع ونشر التعليمات البرمجية للتطبيق الخاص بك، ولكنك ستقوم بتعديل التعليمات البرمجية الخاصة بك لاحقا للعمل مع App Service. أثناء تشغيله، يوفر الأمر رسائل حول عملية التوفير والنشر، بما في ذلك ارتباط إلى النشر في Azure. عند الانتهاء، يعرض الأمر أيضا ارتباطا إلى تطبيق التوزيع.

    يحتوي قالب AZD هذا على ملفات (azure.yaml والدليل infra ) التي تنشئ بنية آمنة بشكل افتراضي مع موارد Azure التالية:

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

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

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

تلميح

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

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

  1. في إخراج AZD، ابحث عن الإعدادات AZURE_SQL_CONNECTIONSTRING و AZURE_REDIS_CONNECTIONSTRING. للحفاظ على البيانات السرية آمنة، يتم عرض أسماء الإعدادات فقط. تبدو كما يلي في إخراج AZD:

     App Service app has the following connection strings:
    
             - AZURE_SQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
     

    AZURE_SQL_CONNECTIONSTRINGيحتوي على سلسلة الاتصال إلى قاعدة بيانات SQL في Azure، AZURE_REDIS_CONNECTIONSTRING ويحتوي على سلسلة الاتصال إلى ذاكرة التخزين المؤقت Azure Redis. تحتاج إلى استخدامها في التعليمات البرمجية الخاصة بك لاحقا.

  2. لراحتك، يعرض لك قالب AZD الارتباط المباشر إلى صفحة إعدادات التطبيق. ابحث عن الارتباط وافتحه في علامة تبويب مستعرض جديدة.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

4. تعديل نموذج التعليمات البرمجية وإعادة النشر

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

  2. اسأل، "@workspace كيف يتصل التطبيق بقاعدة البيانات وذاكرة التخزين المؤقت؟" قد يمنحك Copilot بعض الشرح حول MyDatabaseContext الفئة وكيفية تكوينها في Program.cs.

  3. اسأل، "في وضع الإنتاج، أريد أن يستخدم التطبيق سلسلة الاتصال يسمى AZURE_SQL_CONNECTIONSTRING لقاعدة البيانات وإعداد التطبيق المسمى AZURE_REDIS_CONNECTIONSTRING*"." قد يمنحك Copilot اقتراحا للتعليمات البرمجية مشابها لاقتراح في الخيار 2: بدون خطوات GitHub Copilot أدناه وحتى إخبارك بإجراء التغيير في ملف Program.cs.

  4. افتح Program.cs في المستكشف وأضف اقتراح التعليمات البرمجية.

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

قبل نشر هذه التغييرات، لا تزال بحاجة إلى إنشاء مجموعة ترحيل.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

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

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

  1. إنشاء مجموعة عمليات ترحيل لمشروعك باستخدام الأمر التالي:

    dotnet ef migrations bundle --runtime linux-x64 -o migrationsbundle
    

    تلميح

    تم تكوين نموذج التطبيق (راجع DotNetCoreSqlDb.csproj) لتضمين ملف migrationsbundle هذا. azd package أثناء المرحلة، ستتم إضافة migrationsbundle إلى حزمة التوزيع.

  2. انشر جميع التغييرات باستخدام azd up.

    azd up
    
  3. في إخراج azd، ابحث عن عنوان URL لجلسة SSH وانتقل إليه في المتصفح. يبدو مثل هذا في الإخراج:

     Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
     
  4. في محطة SSH الطرفية، قم بتشغيل الأوامر التالية:

    cd /home/site/wwwroot
    ./migrationsbundle -- --environment Production
    

    إذا نجحت، فإن App Service تتصل بنجاح بقاعدة البيانات. تذكر أن --environment Production يتوافق مع تغييرات التعليمات البرمجية التي أجريتها في Program.cs.

في جلسة SSH، يمكن أن تستمر التغييرات على الملفات في /home فقط بعد إعادة تشغيل التطبيق. التغييرات خارج /home غير مستمرة.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

6. تصفح إلى التطبيق

  1. في إخراج AZD، ابحث عن عنوان URL لتطبيقك وانتقل إليه في المستعرض. يبدو عنوان URL كما يلي في إخراج AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>.azurewebsites.net/
     
  2. أضف القليل من المهام إلى القائمة.

    لقطة شاشة لتطبيق الويب ASP.NET Core مع قاعدة بيانات SQL قيد التشغيل في Azure تعرض المهام.

    تهانينا، أنت تقوم بتشغيل تطبيق ويب في Azure App Service، مع اتصال آمن بقاعدة بيانات Azure SQL.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

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

يمكن ل Azure App Service التقاط سجلات وحدة التحكم لمساعدتك في تشخيص المشكلات مع التطبيق الخاص بك. للراحة، قام قالب AZD بالفعل بتمكين التسجيل إلى نظام الملفات المحلي ويشحن السجلات إلى مساحة عمل Log Analytics.

يتضمن نموذج التطبيق عبارات تسجيل قياسية لإثبات هذه الإمكانية، كما هو موضح في القصاصة البرمجية التالية:

public async Task<IActionResult> Index()
{
    var todoItems = await _cache.GetAsync(_TodoItemsCacheKey);
    if (todoItems != null)
    {
        _logger.LogInformation("Data from cache.");
        var todoList = JsonConvert.DeserializeObject<List<Todo>>(Encoding.UTF8.GetString(todoItems));
        return View(todoList);
    }
    else
    {
        _logger.LogInformation("Data from database.");
        var todoList = await _context.Todo.ToListAsync();
        var serializedTodoList = JsonConvert.SerializeObject(todoList);
        await _cache.SetAsync(_TodoItemsCacheKey, Encoding.UTF8.GetBytes(serializedTodoList));
        return View(todoList);
    }
}

في إخراج AZD، ابحث عن الارتباط لدفق سجلات App Service وانتقل إليه في المتصفح. يبدو الارتباط كما يلي في إخراج AZD:

Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

تعرف على المزيد حول تسجيل الدخول إلى تطبيقات .NET في السلسلة على تمكين Azure Monitor OpenTelemetry لتطبيقات .NET Node.js وPython وJava.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

8- تنظيف الموارد

لحذف كافة موارد Azure في بيئة النشر الحالية، قم بتشغيل azd down المطالبات واتبعها.

azd down

استكشاف الأخطاء وإصلاحها

تظهر طريقة عرض نشر المدخل لقاعدة بيانات Azure SQL حالة تعارض

اعتمادا على اشتراكك والمنطقة التي تحددها، قد ترى حالة النشر لقاعدة بيانات Azure SQL لتكون Conflict، مع الرسالة التالية في تفاصيل العملية:

InternalServerError: An unexpected error occured while processing the request.

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

في مدخل Microsoft Azure، تعرض واجهة مستخدم دفق السجل لتطبيق الويب أخطاء الشبكة

قد ترى هذا الخطأ:

Unable to open a connection to your app. This may be due to any network security groups or IP restriction rules that you have placed on your app. To use log streaming, please make sure you are able to access your app directly from your current network.

عادة ما يكون هذا خطأ عابرا عند بدء تشغيل التطبيق لأول مرة. انتظر بضع دقائق وتحقق مرة أخرى.

تظهر جلسة SSH في المستعرض SSH CONN CLOSED

يستغرق الأمر بضع دقائق حتى تبدأ حاوية Linux. انتظر بضع دقائق وتحقق مرة أخرى.

تظهر صفحة دفق سجل المدخل ولكن لا توجد Connected! سجلات

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

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

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

تسعير الموارد التي تم إنشاؤها كما يلي:

  • يتم إنشاء خطة 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.

ليس لدي أذونات لإنشاء هوية معينة من قبل المستخدم

راجع إعداد نشر إجراءات GitHub من مركز النشر.

كيف أعمل تغيير اتصال قاعدة بيانات SQL لاستخدام هوية مدارة بدلا من ذلك؟

تتم إدارة سلسلة الاتصال الافتراضية إلى قاعدة بيانات SQL بواسطة Service Connector، مع الاسم defaultConnector، ويستخدم مصادقة SQL. لاستبداله باتصال يستخدم هوية مدارة، قم بتشغيل الأوامر التالية في cloud shell بعد استبدال العناصر النائبة:

az extension add --name serviceconnector-passwordless --upgrade
az sql server update --enable-public-network true
az webapp connection delete sql --connection defaultConnector --resource-group <group-name> --name <app-name>
az webapp connection create sql --connection defaultConnector --resource-group <group-name> --name <app-name> --target-resource-group <group-name> --server <database-server-name> --database <database-name> --client-type dotnet --system-identity --config-connstr true
az sql server update --enable-public-network false

بشكل افتراضي، يقوم الأمر az webapp connection create sql --client-type dotnet --system-identity --config-connstr ما يلي:

  • تعيين المستخدم كمسؤول معرف Microsoft Entra لخادم قاعدة بيانات SQL.
  • إنشاء هوية مدارة معينة من قبل النظام ومنحها حق الوصول إلى قاعدة البيانات.
  • ينشئ سلسلة الاتصال بدون كلمة مرور يسمى AZURE_SQL_CONNECTIONGSTRING، والذي يستخدمه تطبيقك بالفعل في نهاية البرنامج التعليمي.

يجب أن يكون لتطبيقك الآن اتصال بقاعدة بيانات SQL. لمزيد من المعلومات، راجع البرنامج التعليمي: الاتصال بقواعد بيانات Azure من App Service بدون أسرار باستخدام هوية مدارة.

تلميح

ألا تريد تمكين اتصال الشبكة العامة؟ يمكنك التخطي az sql server update --enable-public-network true عن طريق تشغيل الأوامر من Azure cloud shell المدمجة مع شبكتك الظاهرية إذا كان لديك تعيين دور المالك على اشتراكك.

لمنح الهوية الوصول المطلوب إلى قاعدة البيانات التي تم تأمينها بواسطة الشبكة الظاهرية، az webapp connection create sql تحتاج إلى اتصال مباشر مع مصادقة معرف Entra إلى خادم قاعدة البيانات. بشكل افتراضي، لا يمتلك Azure cloud shell هذا الوصول إلى قاعدة البيانات المؤمنة بالشبكة.

ماذا يمكنني أن أفعل مع GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟

ربما لاحظت أن طريقة عرض دردشة GitHub Copilot كانت موجودة بالفعل لك عند إنشاء مساحة التعليمات البرمجية. لراحتك، نقوم بتضمين ملحق دردشة GitHub Copilot في تعريف الحاوية (راجع .devcontainer/devcontainer.json). ومع ذلك، تحتاج إلى حساب GitHub Copilot (يتوفر إصدار تجريبي مجاني لمدة 30 يوما).

بعض النصائح لك عند التحدث إلى GitHub Copilot:

  • في جلسة دردشة واحدة، تعتمد الأسئلة والأجوبة على بعضها البعض ويمكنك ضبط أسئلتك لضبط الإجابة التي تحصل عليها.
  • بشكل افتراضي، لا يملك GitHub Copilot حق الوصول إلى أي ملف في المستودع الخاص بك. لطرح أسئلة حول ملف، افتح الملف في المحرر أولا.
  • للسماح ل GitHub Copilot بالوصول إلى جميع الملفات في المستودع عند إعداد إجاباته، ابدأ سؤالك ب @workspace. لمزيد من المعلومات، انظر Use the @workspace agent.
  • في جلسة الدردشة، يمكن ل GitHub Copilot اقتراح تغييرات و (مع @workspace) حتى مكان إجراء التغييرات، ولكن لا يسمح بإجراء التغييرات نيابة عنك. الأمر متروك لك لإضافة التغييرات المقترحة واختبارها.

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

  • أريد تشغيل هذه التعليمة البرمجية فقط في وضع الإنتاج.
  • أريد تشغيل هذه التعليمة البرمجية فقط في Azure App Service وليس محليا.
  • يبدو أن المعلمة --output-path غير مدعومة.

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

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