البرنامج التعليمي: إنشاء تطبيق ويب JBoss باستخدام Azure App Service على Linux وMySQL
يوضح هذا البرنامج التعليمي كيفية إنشاء وتكوين ونشر تطبيق JBoss آمن في Azure App Service يتصل بقاعدة بيانات MySQL (باستخدام قاعدة بيانات Azure ل MySQL). Azure App Service هي خدمة استضافة ويب قابلة للتطوير بدرجة كبيرة وتصحيح ذاتي يمكنها نشر التطبيقات بسهولة على Windows أو Linux. عند الانتهاء، سيكون لديك تطبيق JBoss يعمل على Azure App Service على Linux.
في هذا البرنامج التعليمي، تتعلم كيفية:
- إنشاء بنية آمنة افتراضيا لخدمة تطبيقات Azure وقاعدة بيانات Azure لخادم MySQL المرن.
- تأمين اتصال قاعدة البيانات باستخدام سلسلة الاتصال بدون كلمة مرور.
- تحقق من مصادر بيانات JBoss في App Service باستخدام JBoss CLI.
- نشر نموذج تطبيق JBoss إلى App Service من مستودع GitHub.
- الوصول إلى إعدادات تطبيق App Service في التعليمات البرمجية للتطبيق.
- قم بإجراء التحديثات وإعادة توزيع التعليمات البرمجية للتطبيق.
- دفق سجلات التشخيص من App Service.
- إدارة التطبيق في مدخل Microsoft Azure.
- توفير نفس البنية والنشر باستخدام Azure Developer CLI.
- تحسين سير عمل التطوير الخاص بك باستخدام GitHub Codespaces وGitHub Copilot.
- حساب Azure مع اشتراك نشط. إذا لم يكن لديك حساب Azure، يمكنك إنشاء حساب مجانا.
- حساب GitHub. يمكنك أيضا الحصول على واحد مجانا.
- معرفة Java مع تطوير JBoss.
- (اختياري) لتجربة GitHub Copilot، حساب GitHub Copilot. يتوفر إصدار تجريبي مجاني لمدة 30 يوما.
- حساب Azure مع اشتراك نشط. إذا لم يكن لديك حساب Azure، يمكنك إنشاء حساب مجانا.
- تم تثبيت Azure Developer CLI . يمكنك اتباع الخطوات باستخدام Azure Cloud Shell لأنه يحتوي بالفعل على Azure Developer CLI مثبت.
- معرفة Java مع تطوير JBoss.
- (اختياري) لتجربة GitHub Copilot، حساب GitHub Copilot. يتوفر إصدار تجريبي مجاني لمدة 30 يوما.
يمكنك نشر نموذج التطبيق بسرعة في هذا البرنامج التعليمي ورؤيتها قيد التشغيل في Azure. ما عليك سوى تشغيل الأوامر التالية في Azure Cloud Shell، واتبع المطالبة:
mkdir msdocs-jboss-mysql-sample-app
cd msdocs-jboss-mysql-sample-app
azd init --template msdocs-jboss-mysql-sample-app
azd up
أولا، يمكنك إعداد نموذج تطبيق يستند إلى البيانات كنقطة بداية. لراحتك، يتضمن مستودع العينة تكوين حاوية التطوير. تحتوي حاوية التطوير على كل ما تحتاجه لتطوير تطبيق، بما في ذلك قاعدة البيانات وذاكرة التخزين المؤقت وجميع متغيرات البيئة التي يحتاجها نموذج التطبيق. يمكن تشغيل حاوية التطوير في مساحة التعليمات البرمجية GitHub، ما يعني أنه يمكنك تشغيل العينة على أي كمبيوتر باستخدام مستعرض ويب.
الخطوة 1: في نافذة مستعرض جديدة:
- قم بتسجيل الدخول إلى حساب GitHub الخاص بك.
- الانتقال إلى https://github.com/Azure-Samples/msdocs-jboss-mysql-sample-app/fork.
- قم بإلغاء تحديد نسخ الفرع الرئيسي فقط. تريد جميع الفروع.
- حدد Create fork.
الخطوة 2: في نسخة GitHub:
- حدد main>starter-no-infra لفرع البداية. يحتوي هذا الفرع فقط على نموذج المشروع ولا يوجد ملفات أو تكوينات متعلقة ب Azure. حدد Code>Create codespace على starter-no-infra. تستغرق مساحة التعليمات البرمجية بضع دقائق لإعدادها.
الخطوة 3: في الوحدة الطرفية لمساحة التعليمات البرمجية:
- شغّل
mvn clean wildfly:run
. - عندما ترى الإعلام
Your application running on port 8080 is available.
، انتظر بضع ثوان أطول حتى ينتهي خادم WildFly من تحميل التطبيق. ثم حدد فتح في المستعرض. يجب أن تشاهد نموذج التطبيق في علامة تبويب مستعرض جديدة. لإيقاف خادم WildFly، اكتبCtrl
+C
.
تلميح
يمكنك أن تسأل GitHub Copilot عن هذا المستودع. على سبيل المثال:
- @workspace ماذا يفعل هذا المشروع؟
- @workspace ماذا يفعل المجلد .devcontainer؟
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
أولا، يمكنك إنشاء موارد Azure. تنشئ الخطوات المستخدمة في هذا البرنامج التعليمي مجموعة من الموارد الآمنة بشكل افتراضي التي تتضمن خدمة التطبيقات وقاعدة بيانات Azure ل MySQL. بالنسبة لعملية الإنشاء، يمكنك تحديد:
-
اسم تطبيق الويب. يتم استخدامه كجزء من اسم DNS لتطبيقك في شكل
https://<app-name>-<hash>.<region>.azurewebsites.net
. - المنطقة لتشغيل التطبيق فعلياً في العالم. كما يتم استخدامه كجزء من اسم DNS لتطبيقك.
- مكدس الذاكرة المؤقتة لوقت التشغيل للتطبيق. إنه المكان الذي تحدد فيه إصدار Java لاستخدامه لتطبيقك.
- خطة الاستضافة للتطبيق. إنها طبقة الأسعار التي تتضمن مجموعة الميزات وسعة التحجيم لتطبيقك.
- مجموعة الموارد للتطبيق. تتيح لك مجموعة الموارد تجميع (في حاوية منطقية) جميع موارد Azure المطلوبة للتطبيق.
سجّل الدخول إلى مدخل Azure واتبع هذه الخطوات لإنشاء مورد Azure App Service.
الخطوة 1: في مدخل Microsoft Azure:
- في شريط البحث العلوي، اكتب app service.
- حدد العنصر المسمى App Service ضمن عنوان Services .
- حدد إنشاء>تطبيق ويب. يمكنك أيضا الانتقال إلى معالج الإنشاء مباشرة.
الخطوة 2: في صفحة إنشاء تطبيق ويب، املأ النموذج كما يلي.
- الاسم: msdocs-jboss-mysql. سيتم إنشاء مجموعة موارد باسم msdocs-jboss-mysql_group لك.
- مكدس وقت التشغيل: Java 17.
- مكدس خادم الويب Java: Red Hat JBoss EAP 8. إذا قمت بتكوين اشتراك Red Hat مع Azure بالفعل، فحدد Red Hat JBoss EAP 8 BYO License.
- المنطقة: أي منطقة Azure قريبة منك.
- خطة Linux: إنشاء جديد واستخدام اسم msdocs-jboss-mysql.
- خطة التسعير: Premium V3 P0V3. عندما تكون مستعدا، يمكنك التوسع إلى مستوى تسعير مختلف.
- النشر باستخدام تطبيقك: حدد قاعدة البيانات. يتم تحديد Azure Database for MySQL - Flexible Server لك بشكل افتراضي. إنها قاعدة بيانات MySQL مدارة بالكامل كخدمة على Azure، متوافقة مع أحدث إصدارات المجتمع.
- حدد "Review + create".
- وبعد اكتمال عملية التحقق، حدد Create.
الخطوة 3: يستغرق النشر بضع دقائق لإكماله. بعد اكتمال التوزيع، حدد الزر انتقال إلى المورد. يتم نقلك مباشرة إلى تطبيق App Service، ولكن يتم إنشاء الموارد التالية:
- مجموعة الموارد: الحاوية لكافة الموارد التي تم إنشاؤها.
- خطة App Service: تحدد موارد الحوسبة ل App Service. يتم إنشاء خطة Linux في الطبقة الأساسية.
- App Service: تمثل تطبيقك وتعمل في خطة App Service.
- الشبكة الظاهرية: متكاملة مع تطبيق App Service وتعزل حركة مرور الشبكة الخلفية.
- خادم Azure Database for MySQL المرن: يمكن الوصول إليه فقط من الشبكة الظاهرية. يتم إنشاء قاعدة بيانات ومستخدم لك على الخادم.
- مناطق DNS الخاصة: تمكين دقة DNS لخادم قاعدة البيانات في الشبكة الظاهرية.
- نقاط النهاية الخاصة: الوصول إلى نقاط النهاية لخادم قاعدة البيانات في الشبكة الظاهرية.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
في هذه الخطوة، يمكنك إنشاء اتصال خدمة مدار يستند إلى الهوية، والذي يمكنك استخدامه لاحقا لإنشاء مصدر بيانات في خادم JBoss. باستخدام هوية مدارة للاتصال بقاعدة بيانات MySQL، تكون التعليمات البرمجية الخاصة بك آمنة من تسرب الأسرار العرضية.
الخطوة 1: إنشاء هوية مدارة.
- في شريط البحث العلوي، اكتب الهوية المدارة.
- حدد العنصر المسمى الهويات المدارةضمن عنوان الخدمات .
- حدد إنشاء.
- في Resource group، حدد msdocs-jboss-mysql_group.
- في المنطقة، حدد نفس المنطقة التي استخدمتها لتطبيق الويب الخاص بك.
- في Name، اكتب msdocs-jboss-mysql-server-identity.
- حدد "Review + create".
- حدد إنشاء.
الخطوة 2: تمكين مصادقة Microsoft Entra في خادم MySQL.
- في شريط البحث العلوي، اكتب msdocs-jboss-mysql-server.
- حدد مورد Azure Database for MySQL Flexible Server المسمى msdocs-jboss-mysql-server.
- من القائمة اليسرى، حدد مصادقة الأمان>.
- في تعيين الوصول إلى، حدد مصادقة Microsoft Entra فقط.
- في الهوية المدارة المعينة من قبل المستخدم، حدد تحديد.
- حدد msdocs-jboss-mysql-server-identity، ثم حدد Add. يستغرق الأمر لحظة لتعيين الهوية إلى خادم MySQL.
- في Microsoft Entra Admin Name، حدد Select.
- ابحث عن حساب Azure وحدده، ثم حدد تحديد.
- حدد "Save" وانتظر حتى تكتمل العملية.
الخطوة 3: إضافة موصل خدمة مدار يستند إلى الهوية.
- في شريط البحث العلوي، اكتب msdocs-jboss-mysql.
- حدد مورد App Service المسمى msdocs-jboss-mysql.
- في صفحة App Service، في القائمة اليمنى، حدد Settings > Service Connector.
- حدد إنشاء.
- في علامة التبويب Basics:
- تعيين نوع الخدمة إلى DB لخادم MySQL المرن.
- تعيين خادم MySQL المرن إلى msdocs-jboss-mysql-server.
- تعيين قاعدة بيانات MySQL إلى msdocs-jboss-mysql-database.
- تعيين نوع العميل إلى Java.
- حدد علامة التبويب مصادقة.
- حدد الهوية المدارة المعينة من قبل النظام.
- حدد علامة التبويب Review + Create .
- عند اكتمال التحقق من الصحة، حدد Create on Cloud Shell وانتظر حتى تكتمل العملية في Cloud Shell.
- عندما ترى إخراج JSON، يمكنك إغلاق Cloud Shell. أغلق أيضا مربع الحوار إنشاء اتصال.
- حدد تحديث لإظهار موصل الخدمة الجديد.
الخطوة 4: إضافة مكونات المصادقة الإضافية إلى سلسلة الاتصال.
- من القائمة اليسرى، حدد متغيرات البيئة.
- حدد AZURE_MYSQL_CONNECTIONSTRING.
يجب أن يحتوي حقل القيمة على
user
ولكن لاpassword
. المستخدم هو هوية مدارة. - يحتوي خادم JBoss في تطبيق App Service على مكونات المصادقة الإضافية لمصادقة الهوية المدارة، ولكنك لا تزال بحاجة إلى إضافتها إلى سلسلة الاتصال. قم بالتمرير إلى نهاية القيمة وإلحاق
&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin
. - حدد تطبيق.
- حدد تطبيق، ثم تأكيد.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
إذا أضفت إعداد تطبيق يحتوي على سلسلة الاتصال JDBC صالح ل Oracle أو SQL Server أو PostgreSQL أو MySQL، فإن App Service تضيف مصدر بيانات Java Naming and Directory Interface (JNDI) له في خادم JBoss. في هذه الخطوة، يمكنك استخدام اتصال SSH بحاوية التطبيق للتحقق من مصدر بيانات JNDI. في هذه العملية، ستتعلم كيفية الوصول إلى SSH shell وتشغيل JBoss CLI.
الخطوة 1: العودة إلى صفحة App Service:
- في القائمة اليسرى، حدد Development Tools > SSH.
- حدد Go.
الخطوة 2: في محطة SSH الطرفية:
- شغّل
$JBOSS_HOME/bin/jboss-cli.sh --connect
. - في اتصال JBoss CLI، قم بتشغيل
ls subsystem=datasources/data-source
. يجب أن تشاهد مصدر البيانات الذي تم إنشاؤه تلقائيا يسمىAZURE_MYSQL_CONNECTIONSTRING_DS
. - احصل على اسم JNDI لمصدر البيانات باستخدام
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)
. لديك الآن اسمjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
JNDI ، والذي يمكنك استخدامه في التعليمات البرمجية للتطبيق الخاص بك لاحقا.
ملاحظة
يمكن أن تستمر التغييرات التي يتم إجراؤها على الملفات في /home
فقط بعد عمليات إعادة تشغيل التطبيق. على سبيل المثال، إذا قمت بتحرير /opt/eap/standalone/configuration/standalone.xml
تكوين الخادم أو تغييره في JBoss CLI، فلن تستمر التغييرات بعد إعادة تشغيل التطبيق. لاستمرار التغييرات، استخدم برنامج نصي لبدء التشغيل، كما هو موضح في تكوين مصادر البيانات لتطبيق Tomcat أو JBoss أو Java SE في Azure App Service
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
في هذه الخطوة، يمكنك تكوين نشر GitHub باستخدام GitHub Actions. إنها مجرد واحدة من العديد من الطرق للتوزيع في خدمة التطبيق، ولكنها أيضا طريقة رائعة للحصول على تكامل مستمر في عملية التوزيع الخاصة بك. بشكل افتراضي، git push
كل إلى مستودع GitHub الخاص بك تبدأ إجراء الإنشاء والتوزيع.
مثل اصطلاح JBoss، إذا كنت تريد النشر إلى السياق الجذر ل JBoss، فسم البيانات الاصطناعية ROOT.war المضمنة.
الخطوة 1: مرة أخرى في صفحة App Service، في القائمة اليسرى، حدد Deployment > Deployment Center.
الخطوة 2: في صفحة Deployment Center:
- في المصدر، حدد GitHub. بشكل افتراضي، يتم تحديد إجراءات GitHub كموفر بناء.
- سجل الدخول إلى حساب GitHub واتبع المطالبة لتخويل Azure.
- في المؤسسة، حدد حسابك.
- في Repository، حدد msdocs-jboss-mysql-sample-app.
- في Branch، حدد starter-no-infra. هذا هو نفس الفرع الذي عملت فيه مع نموذج التطبيق الخاص بك، دون أي ملفات أو تكوينات متعلقة ب Azure.
- بالنسبة لنوع المصادقة، حدد الهوية المعينة من قبل المستخدم.
- في القائمة العلوية، حدد حفظ. تلتزم App Service بملف سير عمل في مستودع GitHub المختار، في الدليل
.github/workflows
. بشكل افتراضي، ينشئ مركز التوزيع هوية معينة من قبل المستخدم لسير العمل للمصادقة باستخدام Microsoft Entra (مصادقة OIDC). للحصول على خيارات المصادقة البديلة، راجع النشر إلى App Service باستخدام GitHub Actions.
الخطوة 3: مرة أخرى في مساحة التعليمات البرمجية GitHub لنسخة المستودع الخاصة بك، قم بتشغيل git pull origin starter-no-infra
.
يؤدي هذا إلى سحب ملف سير العمل الملتزم به حديثا إلى مساحة التعليمات البرمجية الخاصة بك. يمكنك تعديله وفقا لاحتياجاتك في .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml.
الخطوة 4 (الخيار 1: مع GitHub Copilot):
- ابدأ جلسة دردشة جديدة بالنقر فوق طريقة عرض الدردشة، ثم النقر فوق +.
- اسأل، "@workspace كيف يتصل التطبيق بقاعدة البيانات؟" قد يمنحك Copilot بعض الشرح حول
java:jboss/MySQLDS
مصدر البيانات وكيفية تكوينه. - لنفترض أن "مصدر البيانات في JBoss في Azure يستخدم اسم JNDI java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS." قد يمنحك Copilot اقتراحا للتعليمات البرمجية مشابها لاقتراح في الخيار 2: بدون خطوات GitHub Copilot أدناه وحتى إخبارك بإجراء التغيير في الفئة. لا يمنحك GitHub Copilot نفس الرد في كل مرة، فقد تحتاج إلى طرح المزيد من الأسئلة لضبط استجابته. للحصول على تلميحات، راجع ما الذي يمكنني فعله باستخدام GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟.
الخطوة 4 (الخيار 2: بدون GitHub Copilot):
- افتح src/main/resources/META-INF/persistence.xml في المستكشف. عند بدء تشغيل التطبيق، يقوم بتحميل إعدادات قاعدة البيانات في هذا الملف.
- قم بتغيير قيمة من
<jta-data-source>
java:jboss/MySQLDS
إلىjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
، وهو مصدر البيانات الذي وجدته مع JBoss CLI في وقت سابق في SSH shell.
الخطوة 5:
- حدد ملحق البرنامج للتحكم بالمصادر.
- في مربع النص، اكتب رسالة تثبيت مثل
Configure Azure JNDI name
. - حدد Commit، ثم قم بالتأكيد باستخدام Yes.
- حدد مزامنة التغييرات 1، ثم تأكد من موافق.
الخطوة 6: العودة إلى صفحة Deployment Center في مدخل Microsoft Azure:
- حدد "Logs". تم بالفعل بدء تشغيل نشر جديد من التغييرات الملتزم بها.
- في عنصر السجل لتشغيل النشر، حدد إدخال Build/Deploy Logs مع أحدث طابع زمني.
الخطوة 7: يتم نقلك إلى مستودع GitHub الخاص بك وترى أن إجراء GitHub قيد التشغيل. يحدد ملف سير العمل مرحلتين منفصلتين، الإنشاء والتوزيع. انتظر حتى يتم تشغيل GitHub لإظهار حالة مكتمل. يستغرق حوالي 5 دقائق.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
الخطوة 1: في صفحة App Service:
- من القائمة اليسرى، حدد نظرة عامة.
- في المجال الافتراضي، حدد عنوان URL لتطبيقك.
الخطوة 2: إضافة بعض المهام إلى القائمة. تهانينا، أنت تقوم بتشغيل تطبيق ويب في Azure App Service، مع اتصال آمن بقاعدة بيانات Azure ل MySQL.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
تلتقط Azure App Service جميع مُخرجات الرسائل إلى وحدة التحكم لمساعدتك في تشخيص المشكلات مع التطبيق الخاص بك. يتضمن نموذج التطبيق عبارات تسجيل Log4j القياسية لإثبات هذه الإمكانية، كما هو موضح في القصاصة البرمجية التالية:
private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
@PersistenceContext
private EntityManager entityManager;
public List<Task> getAllTasks() {
logger.log(Level.INFO, "Finding all tasks. ");
return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}
في صفحة App Service، من القائمة اليسرى، حدد Log stream. ترى سجلات تطبيقك، بما في ذلك سجلات النظام الأساسي والسجلات من داخل الحاوية.
تعرف على المزيد حول تسجيل الدخول إلى تطبيقات Java في السلسلة على تمكين Azure Monitor OpenTelemetry لتطبيقات .NET Node.js وPython وJava.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
عند الانتهاء، يمكنك حذف جميع الموارد من اشتراك Azure الخاص بك عن طريق حذف مجموعة الموارد.
الخطوة 1: في شريط البحث أعلى مدخل Microsoft Azure:
- أدخل اسم مجموعة الموارد msdocs-jboss-mysql_group.
- حدد مجموعة الموارد.
الخطوة 2: في صفحة مجموعة الموارد، حدد حذف مجموعة الموارد.
الخطوة 3:
- تأكد من الحذف عن طريق كتابة اسم مجموعة الموارد.
- حدد حذف.
- قم بالتأكيد باستخدام الحذف مرة أخرى.
في هذه الخطوة، يمكنك إنشاء موارد Azure ونشر نموذج تطبيق إلى App Service على Linux. تنشئ الخطوات المستخدمة في هذا البرنامج التعليمي مجموعة من الموارد الآمنة بشكل افتراضي التي تتضمن خدمة التطبيقات وقاعدة بيانات Azure ل MySQL.
تحتوي حاوية التطوير بالفعل على Azure Developer CLI (AZD).
من جذر المستودع، قم بتشغيل
azd init
.azd init --template jboss-app-service-mysql-infra
عند المطالبة، قدم الإجابات التالية:
السؤال الإجابة هل تستمر في تهيئة تطبيق في ' <your-directory>
'؟السنة ماذا تريد أن تفعل بهذه الملفات؟ الاحتفاظ بالملفات الموجودة دون تغيير أدخل اسم بيئة جديدة اكتب اسم فريد. يستخدم قالب AZD هذا الاسم كجزء من اسم DNS لتطبيق الويب الخاص بك في Azure ( <app-name>-<hash>.azurewebsites.net
). يسمح بالأحرف الأبجدية الرقمية والواصلات.سجل الدخول إلى Azure عن طريق تشغيل
azd auth login
الأمر واتباع المطالبة:azd auth login
إنشاء موارد 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 المرن: يمكن الوصول إليه فقط من الشبكة الظاهرية. يتم إنشاء قاعدة بيانات لك على الخادم.
- ذاكرة التخزين المؤقت Azure ل Redis: يمكن الوصول إليها فقط من داخل الشبكة الظاهرية.
- نقاط النهاية الخاصة: الوصول إلى نقاط النهاية لمخزن المفاتيح وذاكرة التخزين المؤقت Redis في الشبكة الظاهرية.
- مناطق DNS الخاصة: تمكين دقة DNS لمخزن المفاتيح وخادم قاعدة البيانات وذاكرة التخزين المؤقت Redis في الشبكة الظاهرية.
- مساحة عمل Log Analytics: تعمل كحاوية مستهدفة لتطبيقك لشحن سجلاته، حيث يمكنك أيضا الاستعلام عن السجلات.
- Key vault: يستخدم للحفاظ على كلمة مرور قاعدة البيانات الخاصة بك كما هي عند إعادة النشر باستخدام AZD.
بمجرد انتهاء الأمر من إنشاء الموارد ونشر التعليمات البرمجية للتطبيق في المرة الأولى، لا يعمل نموذج التطبيق المنشور بعد لأنه يجب إجراء تغييرات صغيرة لجعله يتصل بقاعدة البيانات في Azure.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
قام قالب AZD الذي تستخدمه بإنشاء متغيرات الاتصال لك بالفعل كإعدادات تطبيق وإخراجها إلى المحطة الطرفية لراحتك. تعد إعدادات التطبيق إحدى الطرق للحفاظ على أسرار الاتصال خارج مستودع التعليمات البرمجية.
في إخراج AZD، ابحث عن إعداد
AZURE_MYSQL_CONNECTIONSTRING
التطبيق . يتم عرض أسماء الإعدادات فقط. تبدو كما يلي في إخراج AZD:App Service app has the following app settings: - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE - AZURE_MYSQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING
AZURE_MYSQL_CONNECTIONSTRING
يحتوي على سلسلة الاتصال إلى قاعدة بيانات MySQL في Azure. تحتاج إلى استخدامه في التعليمات البرمجية الخاصة بك لاحقا.لراحتك، يعرض لك قالب AZD الارتباط المباشر إلى صفحة إعدادات التطبيق. ابحث عن الارتباط وافتحه في علامة تبويب مستعرض جديدة.
إذا أضفت إعداد تطبيق يحتوي على Oracle أو SQL Server أو PostgreSQL أو MySQL سلسلة الاتصال، فإن App Service تضيفه كمصدر بيانات Java Naming and Directory Interface (JNDI) في ملف context.xml لخادم JBoss.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
في هذه الخطوة، يمكنك استخدام اتصال SSH بحاوية التطبيق للتحقق من مصدر بيانات JNDI في خادم JBoss. في هذه العملية، ستتعلم كيفية الوصول إلى SSH shell لحاوية JBoss.
في إخراج AZD، ابحث عن عنوان URL لجلسة SSH وانتقل إليه في المتصفح. يبدو مثل هذا في الإخراج:
Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
في محطة SSH الطرفية، قم بتشغيل
$JBOSS_HOME/bin/jboss-cli.sh --connect
.في اتصال JBoss CLI، قم بتشغيل
ls subsystem=datasources/data-source
. يجب أن تشاهد مصدر البيانات الذي تم إنشاؤه تلقائيا يسمىAZURE_MYSQL_CONNECTIONSTRING_DS
.احصل على اسم JNDI لمصدر البيانات باستخدام
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)
. لديك الآن اسمjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
JNDI ، والذي يمكنك استخدامه في التعليمات البرمجية للتطبيق الخاص بك لاحقا.
ملاحظة
يمكن أن تستمر التغييرات التي يتم إجراؤها على الملفات في /home
فقط بعد عمليات إعادة تشغيل التطبيق. على سبيل المثال، إذا قمت بتحرير /opt/eap/standalone/configuration/standalone.xml
تكوين الخادم أو تغييره في JBoss CLI، فلن تستمر التغييرات بعد إعادة تشغيل التطبيق. لاستمرار التغييرات، استخدم برنامج نصي لبدء التشغيل، كما هو موضح في تكوين مصادر البيانات لتطبيق Tomcat أو JBoss أو Java SE في Azure App Service
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
في مساحة التعليمات البرمجية GitHub، ابدأ جلسة دردشة جديدة بالنقر فوق طريقة عرض الدردشة ، ثم النقر فوق +.
اسأل، "@workspace كيف يتصل التطبيق بقاعدة البيانات؟" قد يمنحك Copilot بعض الشرح حول
java:jboss/MySQLDS
مصدر البيانات وكيفية تكوينه.اسأل، "@workspace أريد استبدال مصدر البيانات المحدد في persistence.xml بمصدر بيانات JNDI موجود في JBoss." قد يمنحك Copilot اقتراحا للتعليمات البرمجية مشابها لاقتراح في الخيار 2: بدون خطوات GitHub Copilot أدناه وحتى إخبارك بإجراء التغيير في ملف persistence.xml .
افتح src/main/resources/META-INF/persistence.xml في المستكشف وقم بإجراء تغيير JNDI المقترح.
لا يمنحك GitHub Copilot نفس الرد في كل مرة، فقد تحتاج إلى طرح أسئلة أخرى لضبط استجابته. للحصول على تلميحات، راجع ما الذي يمكنني فعله باستخدام GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟.
في الوحدة الطرفية لمساحة التعليمات البرمجية، قم بتشغيل
azd deploy
.azd deploy
تلميح
يمكنك أيضا استخدام azd up
دائما فقط، والذي يقوم بجميع azd package
و azd provision
و.azd deploy
لمعرفة كيفية حزم ملف War، يمكنك التشغيل azd package --debug
بنفسه.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
في إخراج AZD، ابحث عن عنوان URL لتطبيقك وانتقل إليه في المستعرض. يبدو عنوان URL كما يلي في إخراج AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
أضف القليل من المهام إلى القائمة.
تهانينا، أنت تقوم بتشغيل تطبيق ويب في Azure App Service، مع اتصال آمن بقاعدة بيانات Azure ل MySQL.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
يمكن ل Azure App Service التقاط سجلات وحدة التحكم لمساعدتك في تشخيص المشكلات مع التطبيق الخاص بك. للراحة، قام قالب AZD بالفعل بتمكين التسجيل إلى نظام الملفات المحلي ويشحن السجلات إلى مساحة عمل Log Analytics.
يتضمن نموذج التطبيق عبارات تسجيل Log4j القياسية لإثبات هذه الإمكانية، كما هو موضح في القصاصة البرمجية التالية:
private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
@PersistenceContext
private EntityManager entityManager;
public List<Task> getAllTasks() {
logger.log(Level.INFO, "Finding all tasks. ");
return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}
في إخراج 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.
هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.
لحذف كافة موارد Azure في بيئة النشر الحالية، قم بتشغيل azd down
المطالبات واتبعها.
azd down
- أرى الخطأ "لا يحق له استخدام ميزة إحضار الترخيص الخاص بك" في معالج الإنشاء.
- تظهر طريقة عرض نشر المدخل لقاعدة بيانات Azure لخادم MySQL المرن حالة تعارض.
- يظهر مربع الحوار إنشاء اتصال زر إنشاء على Cloud Shell ولكنه غير ممكن.
- فشل بدء تشغيل تطبيقي، وأرى "تم رفض الوصول للمستخدم... (باستخدام كلمة المرور: لا)' في السجلات.
- لا يعرض تطبيق العينة المنشور تطبيق قائمة المهام.
- أرى خطأ "جدول "المهمة" موجود بالفعل في سجلات التشخيص.
إذا رأيت الخطأ: The subscription '701ea799-fb46-4407-bb67-9cbcf289f1c7' is not entitled to use the Bring Your Own License feature when creating the application
، فهذا يعني أنك حددت Red Hat JBoss EAP 7/8 BYO License في مكدس خادم الويب Java ولكنك لم تقم بإعداد حساب Azure الخاص بك في Red Hat Cloud Access أو ليس لديك ترخيص JBoss EAP نشط في Red Hat Cloud Access.
اعتمادا على اشتراكك والمنطقة التي تحددها، قد ترى حالة النشر لقاعدة بيانات Azure لخادم MySQL المرن لتكون Conflict
، مع الرسالة التالية في تفاصيل العملية:
InternalServerError: An unexpected error occured while processing the request.
يحدث هذا الخطأ على الأرجح بسبب حد اشتراكك للمنطقة التي تحددها. حاول اختيار منطقة مختلفة للتوزيع.
قد تشاهد أيضا رسالة خطأ في مربع الحوار: The database server is in Virtual Network and Cloud Shell can't connect to it. Please copy the commands and execute on an environment which can connect to the database server in Virtual Network.
تحتاج أتمتة موصل الخدمة إلى الوصول إلى الشبكة إلى خادم MySQL. ابحث في إعدادات الشبكة لمورد خادم MySQL وتأكد من تحديد السماح بالوصول العام إلى هذا المورد عبر الإنترنت باستخدام عنوان IP عام كحد أدنى. يمكن لموصل الخدمة أن يأخذه من هناك.
إذا لم تتمكن من رؤية خانة الاختيار هذه، فربما قمت بإنشاء النشر باستخدام معالج Web App + Database بدلا من ذلك، ويقفل النشر جميع الوصول إلى الشبكة العامة إلى خادم MySQL. لا توجد طريقة لتعديل التكوين. نظرا لأن حاوية Linux الخاصة بالتطبيق يمكنها الوصول إلى MySQL من خلال تكامل الشبكة الظاهرية، يمكنك تثبيت Azure CLI في جلسة SSH للتطبيق وتشغيل أوامر Cloud Shell المتوفرة هناك.
إذا رأيت صفحة البداية JBoss بدلا من تطبيق قائمة المهام، فمن المرجح أن خدمة التطبيقات لا تزال تقوم بتحميل الحاوية المحدثة من أحدث نشر للتعليمات البرمجية. انتظر بضع دقائق وقم بتحديث الصفحة.
هذا الخطأ هو على الأرجح لأنك لم تقم بإضافة المكون الإضافي للمصادقة بدون كلمة مرور إلى سلسلة الاتصال (راجع نموذج التعليمات البرمجية ل Java لدمج قاعدة بيانات Azure ل MySQL مع موصل الخدمة). قم بتغيير سلسلة الاتصال MySQL باتباع الإرشادات الواردة في 3. إنشاء اتصال بدون كلمة مرور.
يمكنك تجاهل خطأ الإسبات هذا لأنه يشير إلى أن التعليمات البرمجية للتطبيق متصلة بقاعدة بيانات MySQL. يتم تكوين التطبيق لإنشاء الجداول الضرورية عند بدء تشغيله (راجع src/main/resources/META-INF/persistence.xml). عندما يبدأ التطبيق في المرة الأولى، يجب أن يقوم بإنشاء الجداول بنجاح، ولكن عند إعادة التشغيل اللاحقة، سترى هذا الخطأ لأن الجداول موجودة بالفعل.
- كم يكلف هذا الإعداد؟
- كيف أعمل الاتصال بخادم MySQL خلف الشبكة الظاهرية باستخدام أدوات أخرى؟
- كيف أعمل الحصول على رمز وصول صالح لاتصال MySQL باستخدام مصادقة Microsoft Entra؟
- كيف يعمل تطوير التطبيقات المحلية مع إجراءات GitHub؟
- ليس لدي أذونات لإنشاء هوية معينة من قبل المستخدم
- ماذا يمكنني أن أفعل مع GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟
تسعير الموارد التي تم إنشاؤها كما يلي:
- يتم إنشاء خطة App Service في مستوى P0v3 ويمكن توسيع نطاقها لأعلى أو لأسفل. راجع تسعير App Service.
- يتم إنشاء خادم MySQL المرن في طبقة D2ds ويمكن توسيع نطاقه لأعلى أو لأسفل. راجع أسعار Azure Database for MySQL.
- يتم إنشاء ذاكرة التخزين المؤقت Azure ل Redis في المستوى الأساسي مع الحد الأدنى لحجم ذاكرة التخزين المؤقت. هناك تكلفة صغيرة مرتبطة بهذا المستوى. يمكنك توسيع نطاقه إلى مستويات أداء أعلى للحصول على قابلية وصول عالية، وتكوين أنظمة المجموعات، وميزات أخرى. راجع تسعير Azure Cache for Redis.
- لا تتحمل الشبكة الظاهرية رسوما ما لم تقم بتكوين وظائف إضافية، مثل التناظر. راجع أسعار شبكة Azure الظاهرية.
- تتحمل منطقة DNS الخاصة رسوما صغيرة. راجع أسعار Azure DNS.
في هذا البرنامج التعليمي، يحتوي تطبيق App Service بالفعل على اتصال بالشبكة بخادم MySQL ويمكنه المصادقة مع Microsoft Entra باستخدام هويته المدارة المعينة من قبل النظام. يمكنك الاتصال ب MySQL مباشرة من داخل حاوية التطبيق عن طريق تشغيل الأوامر التالية في جلسة SSH (احصل على <server>
<user>
القيم و و <database>
من AZURE_MYSQL_CONNECTIONSTRING
إعداد التطبيق):
apt-get update
apt-get install curl less mysql-client jq -y
mysql -h <server> --user <user> --database <database> --enable-cleartext-plugin --password=`curl "${IDENTITY_ENDPOINT}?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01" -H "X-IDENTITY-HEADER: $IDENTITY_HEADER" -s | jq -r '.access_token'`
بعض الاعتبارات:
- لا تستمر الأدوات التي تقوم بتثبيتها في جلسة SSH عبر عمليات إعادة تشغيل التطبيق.
- إذا اتبعت خطوات المدخل وقمت بتكوين MySQL باستخدام مستخدم Microsoft Entra كمسؤول، يمكنك الاتصال ب MySQL باستخدام مستخدم Microsoft Entra.
- للاتصال من أداة سطح مكتب مثل MySQL Workbench، يجب أن يكون جهازك داخل الشبكة الظاهرية، مثل جهاز Azure الظاهري المنشور في نفس الشبكة الظاهرية. يجب عليك أيضا تكوين المصادقة بشكل منفصل، إما بهوية مدارة أو مع مستخدم Microsoft Entra.
- للاتصال من جهاز في شبكة محلية لديها اتصال VPN من موقع إلى موقع مع شبكة Azure الظاهرية، لا يمكنك تكوين المصادقة بهوية مدارة، ولكن يمكنك تكوين المصادقة باستخدام مستخدم Microsoft Entra.
- يمكنك أيضا دمج Azure Cloud Shell والاتصال باستخدام Azure CLI أو MySQL CLI. للمصادقة، يمكنك تكوين مستخدم Microsoft Entra.
بالنسبة لمستخدم Microsoft Entra أو هوية مدارة معينة من قبل النظام أو هوية مدارة معينة من قبل المستخدم ومخولة بالوصول إلى قاعدة بيانات MySQL، يمكن أن يساعدك Azure CLI في إنشاء رمز مميز للوصول. في حالة وجود هوية مدارة، يجب تكوين الهوية على تطبيق App Service أو الجهاز الظاهري حيث تقوم بتشغيل Azure CLI.
# Sign in as a Microsoft Entra user
az login
# Sign in as the system-assigned managed identity
az login --identity
# Sign in as a user-assigned managed identity
az login --identity --username <client-id-of-user-assigned-identity>
# Get an access token
az account get-access-token --resource-type oss-rdbms
إذا أردت، يمكنك أيضا استخدام الأمر az mysql flexible-server connect Azure CLI للاتصال ب MySQL. عند المطالبة، استخدم الرمز المميز للوصول ككلمة مرور.
az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive
لمزيد من المعلومات، راجع:
- كيفية استخدام الهويات المُدارة لـ App Service وAzure Functions
- المصادقة على Azure باستخدام Azure CLI
- الاتصال بقاعدة بيانات Azure لخادم MySQL المرن باستخدام معرف Microsoft Entra
باستخدام ملف سير العمل الذي تم إنشاؤه تلقائيا من App Service كمثال، يقوم كل git push
منها ببدء تشغيل بنية ونشر جديد. من نسخة محلية من مستودع GitHub، يمكنك إجراء التحديثات المطلوبة ودفعها إلى GitHub. على سبيل المثال:
git add .
git commit -m "<some-message>"
git push origin starter-no-infra
راجع إعداد نشر إجراءات GitHub من مركز النشر.
قد تلاحظ أن طريقة عرض دردشة 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 في دليل المطور.
تعرف على كيفية تأمين تطبيقك باستخدام مجال وشهادة مخصصين.