البرنامج التعليمي: إنشاء تطبيق ويب Tomcat باستخدام Azure App Service على Linux وMySQL

يوضح هذا البرنامج التعليمي كيفية إنشاء وتكوين ونشر تطبيق Tomcat آمن في Azure App Service يتصل بقاعدة بيانات MySQL (باستخدام قاعدة بيانات Azure ل MySQL). Azure App Service هي خدمة استضافة ويب قابلة للتطوير بدرجة كبيرة وتصحيح ذاتي يمكنها نشر التطبيقات بسهولة على Windows أو Linux. عند الانتهاء، سيكون لديك تطبيق Tomcat يعمل على Azure App Service على Linux.

لقطة شاشة لتطبيق Tomcat الذي يخزن البيانات في MySQL.

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

  • إنشاء بنية آمنة افتراضيا ل Azure App Service وAzure Cosmos DB باستخدام MongoDB API.
  • تأمين أسرار الاتصال باستخدام هوية مدارة ومراجع Key Vault.
  • نشر نموذج تطبيق Tomcat إلى App Service من مستودع GitHub.
  • إعدادات تطبيق Acces App Service في التعليمات البرمجية للتطبيق.
  • قم بإجراء التحديثات وإعادة توزيع التعليمات البرمجية للتطبيق.
  • دفق سجلات التشخيص من App Service.
  • إدارة التطبيق في مدخل Microsoft Azure.
  • توفير نفس البنية والنشر باستخدام Azure Developer CLI.
  • تحسين سير عمل التطوير الخاص بك باستخدام GitHub Codespaces وGitHub Copilot.

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

  • حساب Azure مع اشتراك نشط. إذا لم يكن لديك حساب Azure، يمكنك إنشاء حساب مجانا.
  • تم تثبيت Azure Developer CLI . يمكنك اتباع الخطوات باستخدام Azure Cloud Shell لأنه يحتوي بالفعل على Azure Developer CLI مثبت.
  • معرفة Java مع تطوير Tomcat.
  • (اختياري) لتجربة GitHub Copilot، حساب GitHub Copilot. يتوفر إصدار تجريبي مجاني لمدة 30 يوما.

تخطي إلى النهاية

يمكنك نشر نموذج التطبيق بسرعة في هذا البرنامج التعليمي ورؤيتها قيد التشغيل في Azure. ما عليك سوى تشغيل الأوامر التالية في Azure Cloud Shell، واتبع المطالبة:

mkdir msdocs-tomcat-mysql-sample-app
cd msdocs-tomcat-mysql-sample-app
azd init --template msdocs-tomcat-mysql-sample-app
azd up

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

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

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

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

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

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

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

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

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

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

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

تلميح

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

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

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

2. إنشاء App Service وMySQL

أولا، يمكنك إنشاء موارد Azure. تنشئ الخطوات المستخدمة في هذا البرنامج التعليمي مجموعة من الموارد الآمنة بشكل افتراضي التي تتضمن خدمة التطبيقات وقاعدة بيانات Azure ل MySQL. بالنسبة لعملية الإنشاء، يمكنك تحديد:

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

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

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

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

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

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

  1. Resource Group: حدد Create new واستخدم اسم msdocs-tomcat-mysql-tutorial.
  2. المنطقة: أي منطقة Azure قريبة منك.
  3. الاسم: msdocs-tomcat-mysql-XYZ، حيث XYZ هو أي ثلاثة أحرف عشوائية.
  4. مكدس وقت التشغيل: Java 17.
  5. مكدس خادم ويب Java: Apache Tomcat 10.1.
  6. MySQL - يتم تحديد الخادم المرن لك بشكل افتراضي كمحرك قاعدة البيانات. إذا لم يكن الأمر كذلك، فحدده. قاعدة بيانات Azure لـ MySQL هي قاعدة بيانات MySQL مدارة بالكامل كخدمة على Azure، متوافقة مع أحدث إصدارات المجتمع.
  7. خطة الاستضافة: أساسية. عندما تكون مستعدا، يمكنك التوسع إلى مستوى تسعير الإنتاج.
  8. حدد "Review + create".
  9. وبعد اكتمال عملية التحقق، حدد Create.

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

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

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

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

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

3. تأمين أسرار الاتصال

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

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

  1. في القائمة اليسرى، حدد Settings > Environment variables.
  2. حدد AZURE_MYSQL_CONNECTIONSTRING. يحتوي على سلسلة الاتصال JDBC. إذا أضفت إعداد تطبيق يحتوي على Oracle أو SQL Server أو PostgreSQL أو MySQL سلسلة الاتصال، تقوم App Service بإدخاله كمصدر بيانات Java Naming and Directory Interface (JNDI) في ملف context.xml لخادم Tomcat.
  3. في إعداد إضافة/تحرير التطبيق، في حقل القيمة ، ابحث عن جزء كلمة المرور = في نهاية السلسلة.
  4. انسخ سلسلة كلمة المرور بعد كلمة المرور= لاستخدامها لاحقا. يتيح لك إعداد التطبيق هذا الاتصال بقاعدة بيانات MySQL المؤمنة خلف نقطة نهاية خاصة. ومع ذلك، يتم حفظ السر مباشرة في تطبيق App Service، وهو ليس الأفضل. ستغير هذا.

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

الخطوة 2: إنشاء مخزن رئيسي للإدارة الآمنة للبيانات السرية.

  1. في شريط البحث العلوي، اكتب "key vault"، ثم حدد Marketplace>Key Vault.
  2. في Resource Group، حدد msdocs-tomcat-mysql-tutorial.
  3. في اسم Key vault، اكتب اسما يتكون من أحرف وأرقام فقط.
  4. في Region، قم بتعيينه إلى موقع العينة كمجموعة موارد.

لقطة شاشة توضح كيفية إنشاء مخزن مفاتيح.

الخطوة 3:

  1. حدد علامة التبويب Networking
  2. إلغاء تحديد تمكين الوصول العام.
  3. حدد Create a private endpoint.
  4. في Resource Group، حدد msdocs-tomcat-mysql-tutorial.
  5. في اسم Key vault، اكتب اسما يتكون من أحرف وأرقام فقط.
  6. في Region، قم بتعيينه إلى موقع العينة كمجموعة موارد.
  7. في مربع الحوار، في الموقع، حدد نفس موقع تطبيق App Service.
  8. في Resource Group، حدد msdocs-tomcat-mysql-tutorial.
  9. في الاسم، اكتب msdocs-tomcat-mysql-XYZVaultEndpoint.
  10. في الشبكة الظاهرية، حدد msdocs-tomcat-mysql-XYZVnet.
  11. في الشبكة الفرعية، msdocs-tomcat-mysql-XYZSubnet.
  12. حدد موافق.
  13. حدد Review + create، ثم حدد Create. انتظر حتى ينتهي نشر مخزن المفاتيح. يجب أن ترى "اكتمل النشر الخاص بك. "

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

الخطوة 4:

  1. في شريط البحث العلوي، اكتب msdocs-tomcat-mysql، ثم مورد App Service المسمى msdocs-tomcat-mysql-XYZ.
  2. في صفحة App Service، في القائمة اليمنى، حدد Settings > Service Connector. يوجد بالفعل موصل، أنشأه معالج إنشاء التطبيق لك.
  3. حدد خانة الاختيار بجوار الموصل، ثم حدد تحرير.
  4. في علامة التبويب Basics ، قم بتعيين Client type إلى Java.
  5. حدد علامة التبويب مصادقة.
  6. في كلمة المرور، الصق كلمة المرور التي نسختها سابقا.
  7. حدد مخزن البيانات السرية في Key Vault.
  8. ضمن Key Vault Connection، حدد Create new. يتم فتح مربع حوار إنشاء اتصال أعلى مربع حوار التحرير.

لقطة شاشة توضح كيفية تحرير موصل خدمة باستخدام اتصال key vault.

الخطوة 5: في مربع الحوار إنشاء اتصال لاتصال Key Vault:

  1. في Key Vault، حدد key vault الذي أنشأته سابقا.
  2. حدد "استعراض + إنشاء". يجب أن ترى أنه تم تعيين الهوية المدارة المعينة من قبل النظام إلى Selected.
  3. عند اكتمال التحقق من الصحة، حدد إنشاء.

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

الخطوة 6: لقد عدت إلى مربع حوار التحرير ل defaultConnector.

  1. في علامة التبويب Authentication ، انتظر حتى يتم إنشاء موصل key vault. عند الانتهاء، تحددها القائمة المنسدلة اتصال Key Vault تلقائيا.
  2. حدد Next: Networking.
  3. حدد حفظ. انتظر حتى يظهر إعلام نجاح التحديث.

لقطة شاشة تعرض اتصال key vault المحدد في defaultConnector.

الخطوة 7: للتحقق من التغييرات:

  1. من القائمة اليسرى، حدد متغيرات > البيئة سلاسل الاتصال مرة أخرى.
  2. بجوار AZURE_MYSQL_CONNECTIONSTRING، حدد إظهار القيمة. يجب أن تكون @Microsoft.KeyVault(...)القيمة ، ما يعني أنها مرجع خزنة مفاتيح لأن السر تتم إدارته الآن في مخزن المفاتيح.

لقطة شاشة توضح كيفية رؤية قيمة متغير بيئة MySQL في Azure.

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

4. تأكيد مصدر بيانات JNDI

إذا أضفت إعداد تطبيق يحتوي على سلسلة الاتصال JDBC صالح ل Oracle أو SQL Server أو PostgreSQL أو MySQL، فإن App Service تضيف مصدر بيانات Java Naming and Directory Interface (JNDI) له في ملف context.xml لخادم Tomcat. في هذه الخطوة، يمكنك استخدام اتصال SSH بحاوية التطبيق للتحقق من مصدر بيانات JNDI. في هذه العملية، ستتعلم كيفية الوصول إلى SSH shell لحاوية Tomcat.

الخطوة 1: العودة إلى صفحة App Service:

  1. في القائمة اليسرى، حدد SSH.
  2. حدد Go.

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

الخطوة 2: في محطة SSH الطرفية، قم بتشغيل cat /usr/local/tomcat/conf/context.xml. يجب أن ترى أنه تمت إضافة مورد JNDI يسمى jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS . ستستخدم مصدر البيانات هذا لاحقا.

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

إشعار

يمكن أن تستمر التغييرات التي يتم إجراؤها على الملفات في /home فقط بعد عمليات إعادة تشغيل التطبيق. على سبيل المثال، إذا قمت بتحرير /usr/local/tomcat/conf/server.xml، فلن تستمر التغييرات بعد إعادة تشغيل التطبيق.

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

5. نشر نموذج التعليمات البرمجية

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

مثل اصطلاح Tomcat، إذا كنت تريد النشر إلى السياق الجذر ل Tomcat، فسم البيانات الاصطناعية المضمنة ROOT.war.

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

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

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

  1. في المصدر، حدد GitHub. بشكل افتراضي، يتم تحديد إجراءات GitHub كموفر بناء.
  2. سجل الدخول إلى حساب GitHub واتبع المطالبة لتخويل Azure.
  3. في المؤسسة، حدد حسابك.
  4. في Repository، حدد msdocs-tomcat-mysql-sample-app.
  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 بعض الشرح حول jdbc/MYSQLDS مصدر البيانات وكيفية تكوينه.
  3. اسأل، "@workspace أريد استبدال مصدر البيانات المحدد في persistence.xml بمصدر بيانات JNDI موجود في Tomcat ولكن أريد أن أفعل ذلك ديناميكيا". قد يقدم لك Copilot اقتراح تعليمات برمجية مشابها لاقتراح في الخيار 2: بدون خطوات GitHub Copilot أدناه وحتى إخبارك بإجراء التغيير في فئة ContextListener .
  4. افتح src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java في المستكشف وأضف اقتراح التعليمات البرمجية contextInitialized في الأسلوب . لا يمنحك GitHub Copilot نفس الرد في كل مرة، فقد تحتاج إلى طرح المزيد من الأسئلة لضبط استجابته. للحصول على تلميحات، راجع ما الذي يمكنني فعله باستخدام GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟.

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

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

  1. افتح src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java في المستكشف. عند بدء تشغيل التطبيق، تقوم هذه الفئة بتحميل إعدادات قاعدة البيانات في src/main/resources/META-INF/persistence.xml.
  2. في contextIntialized() الأسلوب ، ابحث عن التعليمات البرمجية التي تم التعليق عليها (الأسطر 29-33) وقم بإلغاء التعليق عليها. تتحقق هذه التعليمة البرمجية لمعرفة ما إذا كان AZURE_MYSQL_CONNECTIONSTRING إعداد التطبيق موجودا، وتغيير مصدر البيانات إلى java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS، وهو مصدر البيانات الذي وجدته سابقا في context.xml في SSH shell.

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

الخطوة 5:

  1. حدد ملحق البرنامج للتحكم بالمصادر.
  2. في مربع النص، اكتب رسالة تثبيت مثل Configure Azure data source.
  3. حدد Commit، ثم قم بالتأكيد باستخدام Yes.
  4. حدد مزامنة التغييرات 1، ثم تأكد من موافق.

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

الخطوة 6: العودة إلى صفحة Deployment Center في مدخل Microsoft Azure:

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

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

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

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

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

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

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

  1. من القائمة اليسرى، حدد نظرة عامة.
  2. حدد عنوان URL لتطبيقك.

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

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

لقطة شاشة لتطبيق ويب Tomcat مع تشغيل MySQL في Azure.

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

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

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

@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
    private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        logger.info("GET /");

        EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");

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

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

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

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

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

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

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

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

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

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

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

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

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

لقطة شاشة تعرض موقع زر **Delete Resource Group** في مدخل Microsoft Azure.

الخطوة 3:

  1. تأكد من الحذف عن طريق كتابة اسم مجموعة الموارد.
  2. حدد حذف.
  3. قم بالتأكيد باستخدام الحذف مرة أخرى.

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

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

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

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

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

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

    السؤال الإجابة
    الدليل الحالي غير فارغ. هل ترغب في تهيئة مشروع هنا في "<دليلك>"؟ السنة
    ماذا تريد أن تفعل بهذه الملفات؟ الاحتفاظ بالملفات الموجودة دون تغيير
    أدخل اسم بيئة جديدة اكتب اسم فريد. يستخدم قالب AZD هذا الاسم كجزء من اسم DNS لتطبيق الويب الخاص بك في Azure (<app-name>-<hash>.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 في المستوى B1 .
    • App Service: تمثل تطبيقك وتعمل في خطة App Service.
    • الشبكة الظاهرية: متكاملة مع تطبيق App Service وتعزل حركة مرور الشبكة الخلفية.
    • خادم Azure Database for MySQL المرن: يمكن الوصول إليه فقط من الشبكة الظاهرية من خلال تكامل منطقة DNS. يتم إنشاء قاعدة بيانات لك على الخادم.
    • ذاكرة التخزين المؤقت Azure ل Redis: يمكن الوصول إليها فقط من داخل الشبكة الظاهرية.
    • نقاط النهاية الخاصة: الوصول إلى نقاط النهاية لمخزن المفاتيح وذاكرة التخزين المؤقت Redis في الشبكة الظاهرية.
    • مناطق DNS الخاصة: تمكين دقة DNS لمخزن المفاتيح وخادم قاعدة البيانات وذاكرة التخزين المؤقت Redis في الشبكة الظاهرية.
    • مساحة عمل Log Analytics: تعمل كحاوية مستهدفة لتطبيقك لشحن سجلاته، حيث يمكنك أيضا الاستعلام عن السجلات.
    • Key vault: يستخدم للحفاظ على كلمة مرور قاعدة البيانات الخاصة بك كما هي عند إعادة النشر باستخدام AZD.

    بمجرد انتهاء الأمر من إنشاء الموارد ونشر التعليمات البرمجية للتطبيق في المرة الأولى، لا يعمل نموذج التطبيق المنشور بعد لأنه يجب إجراء تغييرات صغيرة لجعله يتصل بقاعدة البيانات في Azure.

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

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

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

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

     App Service app has the following connection strings:
             - AZURE_MYSQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
     

    AZURE_MYSQL_CONNECTIONSTRINGيحتوي على سلسلة الاتصال إلى قاعدة بيانات MySQL في Azure. تحتاج إلى استخدامه في التعليمات البرمجية الخاصة بك لاحقا.

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

    إذا أضفت إعداد تطبيق يحتوي على Oracle أو SQL Server أو PostgreSQL أو MySQL سلسلة الاتصال، فإن App Service تضيفه كمصدر بيانات Java Naming and Directory Interface (JNDI) في ملف context.xml لخادم Tomcat.

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

4. تأكيد مصدر بيانات JNDI

في هذه الخطوة، يمكنك استخدام اتصال SSH بحاوية التطبيق للتحقق من مصدر بيانات JNDI في خادم Tomcat. في هذه العملية، ستتعلم كيفية الوصول إلى SSH shell لحاوية Tomcat.

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

     Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
     
  2. في محطة SSH الطرفية، قم بتشغيل cat /usr/local/tomcat/conf/context.xml. يجب أن ترى أنه تمت إضافة مورد JNDI يسمى jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS . ستستخدم مصدر البيانات هذا لاحقا.

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

إشعار

يمكن أن تستمر التغييرات التي يتم إجراؤها على الملفات في /home فقط بعد عمليات إعادة تشغيل التطبيق. على سبيل المثال، إذا قمت بتحرير /usr/local/tomcat/conf/server.xml، فلن تستمر التغييرات بعد إعادة تشغيل التطبيق.

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

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

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

  2. اسأل، "@workspace كيف يتصل التطبيق بقاعدة البيانات؟" قد يمنحك Copilot بعض الشرح حول jdbc/MYSQLDS مصدر البيانات وكيفية تكوينه.

  3. اسأل، "@workspace أريد استبدال مصدر البيانات المحدد في persistence.xml بمصدر بيانات JNDI موجود في Tomcat ولكن أريد أن أفعل ذلك ديناميكيا." قد يقدم لك Copilot اقتراح تعليمات برمجية مشابها لاقتراح في الخيار 2: بدون خطوات GitHub Copilot أدناه وحتى إخبارك بإجراء التغيير في فئة ContextListener .

  4. افتح src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java في المستكشف وأضف اقتراح التعليمات البرمجية contextInitialized في الأسلوب .

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

  5. في الوحدة الطرفية لمساحة التعليمات البرمجية، قم بتشغيل azd deploy.

    azd deploy
    

تلميح

يمكنك أيضا استخدام azd up دائما فقط، والذي يقوم بجميع azd packageو azd provisionو.azd deploy

لمعرفة كيفية حزم ملف War، يمكنك التشغيل azd package --debug بنفسه.

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

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

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

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

    لقطة شاشة لتطبيق Tomcat على الويب مع تشغيل MySQL في Azure يعرض المهام.

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

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

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

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

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

@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
    private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        logger.info("GET /");

        EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");

في إخراج 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

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

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

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

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

azd down

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

أرى العديد من <الفئة> ممسوحة ضوئيا من مواقع متعددة تحذيرات مع mvn jetty:run

يمكنك تجاهل التحذيرات. يعرض المكون الإضافي Maven Jetty التحذيرات لأن pom.xml التطبيق يحتوي على التبعية ل jakarta.servlet.jsp.jstl، والتي يوفرها Jetty بالفعل خارج الصندوق. تحتاج إلى التبعية ل Tomcat.

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

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

InternalServerError: An unexpected error occured while processing the request.

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

لا يعرض تطبيق العينة المنشور تطبيق قائمة المهام

إذا رأيت Hey, Java developers! صفحة بدلا من تطبيق قائمة المهام، فمن المرجح أن App Service لا تزال تقوم بتحميل الحاوية المحدثة من أحدث نشر للتعليمات البرمجية. انتظر بضع دقائق وقم بتحديث الصفحة.

أرى خطأ 404 Page Not Found في نموذج التطبيق المنشور

تأكد من إجراء تغييرات التعليمات البرمجية java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS لاستخدام مصدر البيانات. إذا قمت بإجراء التغييرات وإعادة توزيع التعليمات البرمجية الخاصة بك، فإن App Service على الأرجح لا تزال تقوم بتحميل الحاوية المحدثة. انتظر بضع دقائق وقم بتحديث الصفحة.

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

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

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

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

كيف أعمل الاتصال بخادم MySQL خلف الشبكة الظاهرية باستخدام أدوات أخرى؟

  • لا تحتوي حاوية Tomcat حاليا على المحطة الطرفية mysql-client أيضا. إذا أردت، يجب تثبيته يدويا. تذكر أن أي شيء تقوم بتثبيته لا يستمر عبر عمليات إعادة تشغيل التطبيق.
  • للاتصال من أداة سطح مكتب مثل MySQL Workbench، يجب أن يكون جهازك داخل الشبكة الظاهرية. على سبيل المثال، قد يكون Azure VM في إحدى الشبكات الفرعية، أو جهازا في شبكة محلية لديه اتصال VPN من موقع إلى موقع مع شبكة Azure الظاهرية.
  • يمكنك أيضا دمج Azure Cloud Shell مع الشبكة الظاهرية.

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

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

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

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

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

ماذا يمكنني أن أفعل مع 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) حتى مكان إجراء التغييرات، ولكن لا يسمح بإجراء التغييرات نيابة عنك. الأمر متروك لك لإضافة التغييرات المقترحة واختبارها.

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

  • قم بتغيير هذه التعليمة البرمجية لاستخدام مصدر البيانات jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS.
  • بعض الواردات في التعليمات البرمجية الخاصة بك تستخدم javax ولكن لدي تطبيق Jakarta.
  • أريد تشغيل هذه التعليمة البرمجية فقط إذا تم تعيين متغير البيئة AZURE_MYSQL_CONNECTIONSTRING.
  • أريد تشغيل هذه التعليمة البرمجية فقط في Azure App Service وليس محليا.

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

تعرف على المزيد حول تشغيل تطبيقات Java على App Service في دليل المطور.

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