تكوين تطبيق Java لـ Azure App Service

إشعار

بالنسبة لتطبيقات Spring، نوصي باستخدام Azure Spring Apps. ومع ذلك، لا يزال بإمكانك استخدام Azure App Service كوجهة. راجع إرشادات وجهة حمل عمل Java للحصول على المشورة.

تتيح Azure App Service لمطوري Java إمكانية إنشاء تطبيقات الويب Java SE وTomcat وJBoss EAP وتوزيعها وتوسيع نطاقها سريعاً على خدمة مُدارة بالكامل. يمكنك توزيع التطبيقات باستخدام وظائف Maven الإضافية، من سطر الأوامر، أو في محررات النصوص مثل IntelliJ أو Eclipse أو Visual Studio Code.

يوفر هذا الدليل الإرشادات والمفاهيم الرئيسية لمطوري Java الذين يستخدمون App Service. إذا لم يسبق لك استخدام Azure App Service، فيجب عليك قراءة التشغيل السريع لـ Java أولاً. تتوفر الإجابة عن الأسئلة العامة حول استخدام App Service غير الخاصة بتطوير Java في الأسئلة المتداولة حول App Service.

إظهار إصدار Java

لإظهار إصدار Java الحالي، قم بتشغيل الأمر التالي في Cloud Shell:

az webapp config show --name <app-name> --resource-group <resource-group-name> --query "[javaVersion, javaContainer, javaContainerVersion]"

لإظهار كافة إصدارات Java المدعمة، قم بتشغيل الأمر التالي في Cloud Shell:

az webapp list-runtimes --os windows | grep java

لإظهار إصدار Java الحالي، قم بتشغيل الأمر التالي في Cloud Shell:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion

لإظهار كافة إصدارات Java المدعمة، قم بتشغيل الأمر التالي في Cloud Shell:

az webapp list-runtimes --os linux | grep "JAVA\|TOMCAT\|JBOSSEAP"

لمزيد من المعلومات حول دعم الإصدار، راجع نهج دعم وقت تشغيل لغة خدمة التطبيقات.

توزيع تطبيقك

Build Tools

Maven

باستخدام وظيفة Maven الإضافية لـ Azure Web Apps، يمكنك إعداد مشروع Maven Java لـ Azure Web App بسهولة باستخدام أمر واحد في جذر المشروع:

mvn com.microsoft.azure:azure-webapp-maven-plugin:2.11.0:config

يضيف هذا الأمر مكونا إضافيا azure-webapp-maven-plugin والتكوين ذي الصلة عن طريق مطالبتك بتحديد Azure Web App موجود أو إنشاء واحد جديد. بعد ذلك، يمكنك توزيع تطبيق Java إلى Azure باستخدام الأمر التالي:

mvn package azure-webapp:deploy

فيما يلي نموذج تكوين في pom.xml:

<plugin> 
  <groupId>com.microsoft.azure</groupId>  
  <artifactId>azure-webapp-maven-plugin</artifactId>  
  <version>2.11.0</version>  
  <configuration>
    <subscriptionId>111111-11111-11111-1111111</subscriptionId>
    <resourceGroup>spring-boot-xxxxxxxxxx-rg</resourceGroup>
    <appName>spring-boot-xxxxxxxxxx</appName>
    <pricingTier>B2</pricingTier>
    <region>westus</region>
    <runtime>
      <os>Linux</os>      
      <webContainer>Java SE</webContainer>
      <javaVersion>Java 11</javaVersion>
    </runtime>
    <deployment>
      <resources>
        <resource>
          <type>jar</type>
          <directory>${project.basedir}/target</directory>
          <includes>
            <include>*.jar</include>
          </includes>
        </resource>
      </resources>
    </deployment>
  </configuration>
</plugin> 

Gradle

  1. إعداد المكون الإضافي Gradle لتطبيقات ويب Azure عن طريق إضافة المكون الإضافي إلى build.gradle:

    plugins {
      id "com.microsoft.azure.azurewebapp" version "1.7.1"
    }
    
  2. تكوين تفاصيل تطبيق الويب الخاص بك. يتم إنشاء موارد Azure المقابلة إذا لم تكن موجودة. فيما يلي نموذج تكوين، للحصول على التفاصيل، راجع هذا المستند.

    azurewebapp {
        subscription = '<your subscription id>'
        resourceGroup = '<your resource group>'
        appName = '<your app name>'
        pricingTier = '<price tier like 'P1v2'>'
        region = '<region like 'westus'>'
        runtime {
          os = 'Linux'
          webContainer = 'Tomcat 9.0' // or 'Java SE' if you want to run an executable jar
          javaVersion = 'Java 8'
        }
        appSettings {
            <key> = <value>
        }
        auth {
            type = 'azure_cli' // support azure_cli, oauth2, device_code and service_principal
        }
    }
    
  3. توزيع باستخدام أمر واحد.

    gradle azureWebAppDeploy
    

IDEs

يوفر Azure تجربة تطوير سلسة لـ Java App Service في Java IDEs الشائعة، بما في ذلك:

واجهة برمجة تطبيقات Kudu

Java SE

لتوزيع ملفات .jar إلى Java SE، استخدم نقطة نهاية /api/publish/ لموقع Kudu. لمزيد من المعلومات حول واجهة برمجة التطبيقات هذه، راجع هذه الوثائق.

إشعار

يجب تسمية تطبيق .jar لـ App Service بـ app.jar، لتحديد التطبيق وتشغيله. يقوم المكون الإضافي Maven بذلك تلقائيا أثناء النشر. إذا كنت لا ترغب في إعادة تسمية JAR الخاص بك إلى app.jar، يمكنك تحميل برنامج نصي shell باستخدام الأمر لتشغيل تطبيق .jar. الصق المسار المطلق لهذا البرنامج النصي في مربع نص ملف بدء التشغيل في المقطع "التكوين" بالمدخل. لا يتم تشغيل البرنامج النصي لبدء التشغيل من الدليل الذي تم وضعه فيه. لذلك، يجب عليك دائماً استخدام المسارات المطلقة للإشارة إلى الملفات في البرنامج النصي لبدء التشغيل (على سبيل المثال: java -jar /home/myapp/myapp.jar).

Tomcat

لتوزيع ملفات .war إلى Tomcat، استخدم نقطة نهاية /api/wardeploy/ لنشر ملف الأرشيف. لمزيد من المعلومات حول واجهة برمجة التطبيقات هذه، راجع هذه الوثائق.

JBoss EAP

لتوزيع ملفات .war إلى Tomcat، استخدم نقطة نهاية /api/wardeploy/ لنشر ملف الأرشيف. لمزيد من المعلومات حول واجهة برمجة التطبيقات هذه، راجع هذه الوثائق.

لتوزيع ملفات .ear، استخدم FTP. يتم نشر تطبيق .ear الخاص بك إلى جذر السياق المحدد في تكوين التطبيق الخاص بك. على سبيل المثال، إذا كان جذر سياق تطبيقك هو <context-root>myapp</context-root>، يمكنك استعراض الموقع في المسار /myapp: http://my-app-name.azurewebsites.net/myapp. إذا كنت تريد تقديم تطبيق الويب الخاص بك في المسار الجذر، فتأكد من أن تطبيقك يعين جذر السياق إلى المسار الجذر: <context-root>/</context-root>. لمزيد من المعلومات، راجع تعيين جذر السياق لتطبيق ويب.

لا تنشر .war أو .jar باستخدام FTP. تم تصميم أداة FTP لتحميل البرامج النصية لبدء التشغيل أو التبعيات أو ملفات وقت التشغيل الأخرى. إنه ليس الخيار الأمثل لنشر تطبيقات الويب.

التسجيل وتتبع أخطاء التطبيقات

تتوفر تقارير الأداء ومرئيات نسبة استخدام الشبكة وفحوصات السلامة لكل تطبيق من خلال مدخل Azure. لمزيد من المعلومات، راجع نظرة عامة على تشخيصات Azure App Service.

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

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

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

القيم المحتملة لـ --level هي: Error وWarning وInfo وVerbose. يتضمن كل مستوى لاحق المستوى السابق. على سبيل المثال: Error يتضمن رسائل الخطأ فقط بينما Verbose يتضمن جميع الرسائل.

بمجرد تشغيل التسجيل التشخيصي، قم بتشغيل الأمر التالي لمشاهدة تدفق السجل:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

وفي حال عدم رؤية سجلات وحدة التحكم على الفور، فتحقق مجددًا في غضون 30 ثانية.

إشعار

يمكنك أيضا فحص ملفات السجل من المستعرض في https://<app-name>.scm.azurewebsites.net/api/logs/docker.

لإيقاف تسجيل التدفق في أي وقت، اكتب Ctrl+C.

يمكنك الوصول إلى سجلات وحدة التحكم المنشأة من داخل الحاوية.

أولًا، قم بتشغيل تسجيل الحاويات عن طريق تشغيل الأمر التالي:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

استبدل <app-name> و<resource-group-name> بالأسماء المناسبة لتطبيق الويب الخاص بك.

بمجرد تشغيل تسجيل الحاويات، قم بتشغيل الأمر التالي لمشاهدة تدفق السجل:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

وفي حال عدم رؤية سجلات وحدة التحكم على الفور، فتحقق مجددًا في غضون 30 ثانية.

لإيقاف دفق السجل في أي وقت، اكتب Ctrl+C.

يمكنك أيضًا فحص ملفات السجل من المتصفح الموجود في https://<app-name>.scm.azurewebsites.net/api/logs/docker.

لمزيد من المعلومات، راجع سجلات Stream في Cloud Shell.

الوصول إلى وحدة تحكم SSH

لفتح جلسة SSH مباشرة مع حاويتك، يجب أن يكون تطبيقك قيد التشغيل.

الصق عنوان URL التالي في المتصفح واستبدله<app-name> باسم التطبيق:

https://<app-name>.scm.azurewebsites.net/webssh/host

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

اتصال SSH

إشعار

تخزن أي تغييرات تقوم بها خارج الدليل /home في الحاوية نفسها ولا تستمر بعد إعادة تشغيل التطبيق.

لفتح جلسة SSH بعيدة من الجهاز المحلي، راجعجلسة SSH المفتوحة من واجهة بعيدة.

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

تستند صور Java المضمَّنة إلى نظام التشغيل Alpine Linux. استخدم مدير حزمة apk لتثبيت أي أدوات أو أوامر لاستكشاف الأخطاء وإصلاحها.

محلل ملفات تعريف Java

تأتي جميع أوقات تشغيل Java على Azure App Service مع مسجل JDK Flight Recorder لإنشاء ملفات تعريف لأحمال عمل Java. يمكنك استخدامه لتسجيل أحداث JVM والنظام والتطبيق واستكشاف المشكلات وإصلاحها في تطبيقاتك.

لمعرفة المزيد حول محلل ملفات تعريف Java، تفضل بزيارة وثائق Azure Application Insights.

Flight Recorder

تأتي جميع أوقات تشغيل Java على App Service مع مسجل Java Flight Recorder. يمكنك استخدامه لتسجيل أحداث JVM والنظام والتطبيق واستكشاف المشكلات وإصلاحها في تطبيقات Java الخاصة بك.

التسجيل المُؤَقّت

لأخذ تسجيل زمني، تحتاج إلى PID (معرف العملية) لتطبيق Java. للعثور على PID، افتح موقع SCM لتطبيق الويب على مستعرض من https://<your-site-name>.scm.azurewebsites.net/ProcessExplorer/. تعرض هذه الصفحة العمليات الجارية في تطبيق الويب. ابحث عن العملية المسماة "java" في الجدول وانسخ PID المتوافق (معرِّف العملية).

بعد ذلك، افتح وحدة تحكم تتبع الأخطاء في شريط الأدوات العلوي لموقع SCM وقم بتشغيل الأمر التالي. استبدل <pid> بمعرف العملية الذي نسخته سابقاً. يبدأ هذا الأمر تسجيل محلل ملفات التعريف 30 ثانية لتطبيق Java الخاص بك وإنشاء ملف مسمى timed_recording_example.jfr في C:\home الدليل.

jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="C:\home\timed_recording_example.JFR"

استخدم SSH في App Service وقم بتشغيل الأمر jcmd لعرض قائمة بجميع عمليات Java قيد التشغيل. بالإضافة إلى jcmd، من المفترض ملاحظة تشغيل تطبيق Java برقم معرِّف العملية (pid).

078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar

تنفيذ الأمر التالي لبدء تسجيل 30 ثانية من JVM. يقوم بملفات تعريف JVM وإنشاء ملف JFR يسمى jfr_example.jfr في الدليل الرئيسي. (استبدل 116 برقم معرِّف العملية لتطبيق Java.)

jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"

أثناء الفاصل الزمني الذي مدته 30 ثانية، يمكنك التحقق من صحة التسجيل عن طريق تشغيل jcmd 116 JFR.check. يعرض الأمر جميع التسجيلات لعملية Java المحددة.

تسجيل مستمر

يمكنك استخدام Java Flight Recorder لملفات تعريف تطبيق Java الخاص بك باستمرار بأقل تأثير على أداء وقت التشغيل. لفعل ذلك، قم بتشغيل أمر Azure CLI التالي لإنشاء إعداد تطبيق يسمى JAVA_OPTS باستخدام التكوين الضروري. يتم تمرير محتويات إعداد التطبيق JAVA_OPTS إلى الأمر java عند بدء تشغيل تطبيقك.

az webapp config appsettings set -g <your_resource_group> -n <your_app_name> --settings JAVA_OPTS=-XX:StartFlightRecording=disk=true,name=continuous_recording,dumponexit=true,maxsize=1024m,maxage=1d

بمجرد بدء التسجيل، يمكنك تفريغ بيانات التسجيل الحالية في أي وقت باستخدام JFR.dump الأمر .

jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"

تحليل ملفات .jfr

استخدم FTPS لتنزيل ملف JFR إلى جهازك المحلي. لتحليل ملف JFR، قم بتنزيل وتثبيت Java Mission Control. للحصول على إرشادات حول Java Mission Control، راجع وثائق JMC وإرشادات التثبيت.

سجل التطبيق

يمكنك تمكين سجل التطبيق من خلال مدخل Azure أو Azure CLI لتكوين App Service لكتابة إخراج وحدة التحكم القياسية لتطبيقك ودفق أخطاء وحدة التحكم القياسية إلى نظام الملفات المحلي أو Azure Blob Storage. يتم تعطيل تسجيل الدخول إلى مثيل نظام ملفات App Service المحلي بعد 12 ساعة من تكوينه. إذا كنت بحاجة إلى استبقاء البيانات فترة أطول، فقم بتكوين التطبيق لكتابة الإخراج في حاوية تخزين Blob. يمكن العثور على سجلات تطبيق Java وTomcat في دليل /home/LogFiles/Application/.

يمكنك تمكين سجل التطبيق من خلال مدخل Azure أو Azure CLI لتكوين App Service لكتابة إخراج وحدة التحكم القياسية لتطبيقك ودفق أخطاء وحدة التحكم القياسية إلى نظام الملفات المحلي أو Azure Blob Storage. إذا كنت بحاجة إلى استبقاء البيانات فترة أطول، فقم بتكوين التطبيق لكتابة الإخراج في حاوية تخزين Blob. يمكن العثور على سجلات تطبيق Java وTomcat في دليل /home/LogFiles/Application/.

يمكن تكوين تسجيل Azure Blob Storage للتطبيقات المستندة إلى Linux فقط باستخدام Azure Monitor.

إذا كان تطبيقك يستخدم Logback أو Log4j للتتبع، يمكنك إعادة توجيه هذه التتبعات للمراجعة إلى Azure Application Insights باستخدام إرشادات تكوين إطار التسجيل في استكشاف سجلات تتبع Java في Application Insights.

إشعار

بسبب وجود الثغرة الأمنية المعروفة CVE-2021-44228، يجب استخدام Log4j الإصدار 2.16 أو الأحدث.

التخصيص والضبط

تدعم Azure App Service الضبط والتخصيص خارج الأطر النمطية من خلال مدخل Azure وCLI. راجع المقالات التالية لتكوين تطبيق ويب محدد غير مرتبط بـ Java:

نسخ محتوى التطبيق محليا

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

تعيين خيارات وقت تشغيل Java

لتعيين ذاكرة مخصصة أو خيارات وقت تشغيل JVM الأخرى، أنشئ إعداد تطبيق باسم JAVA_OPTS مع الخيارات. يمرر App Service هذا الإعداد باعتباره متغير بيئة إلى وقت تشغيل Java عند بدء تشغيله.

في مدخل Azure، أسفل إعدادات التطبيق لتطبيق الويب، أنشئ إعداد تطبيق جديداً بالاسم JAVA_OPTS لـ Java SE أو بالاسم CATALINA_OPTS لـ Tomcat يتضمن إعدادات أخرى، مثل -Xms512m -Xmx1204m.

لتكوين إعداد التطبيق من وظيفة Maven الإضافية، أضف علامات القيمة/الإعداد في مقطع الوظيفة الإضافية في Azure. يعين المثال التالي حداً أدنى وحداً أقصى محددين لحجم كومة الذاكرة المؤقتة لـ Java:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Xms1024m -Xmx1024m</value>
    </property>
</appSettings>

إشعار

لا تحتاج إلى إنشاء ملف web.config عند استخدام Tomcat على خدمة تطبيقات Windows.

يمكن للمطورين الذين يستخدمون تطبيقاً واحداً مع فتحة توزيع واحدة في خطة App Service استخدام الخيارات التالية:

  • مثيلات B1 وS1: -Xms1024m -Xmx1024m
  • مثيلات B2 وS2: -Xms3072m -Xmx3072m
  • مثيلات B3 وS3: -Xms6144m -Xmx6144m
  • مثيلات P1v2: -Xms3072m -Xmx3072m
  • مثيلات P2v2: -Xms6144m -Xmx6144m
  • مثيلات P3v2: -Xms12800m -Xmx12800m
  • مثيلات P1v3: -Xms6656m -Xmx6656m
  • مثيلات P2v3: -Xms14848m -Xmx14848m
  • مثيلات P3v3: -Xms30720m -Xmx30720m
  • مثيلات I1: -Xms3072m -Xmx3072m
  • مثيلات I2: -Xms6144m -Xmx6144m
  • مثيلات I3 : -Xms12800m -Xmx12800m
  • مثيلات I1v2: -Xms6656m -Xmx6656m
  • مثيلات I2v2: -Xms14848m -Xmx14848m
  • مثيلات I3v2: -Xms30720m -Xmx30720m

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

تشغيل مآخذ توصيل الويب

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

قم بتشغيل دعم مأخذ توصيل الويب باستخدام Azure CLI باستخدام الأمر التالي:

az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true

بعد ذلك، أعد تشغيل تطبيقك:

az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>

تعيين ترميز الأحرف الافتراضي

في مدخل Azure، أسفل إعدادات التطبيق لتطبيق الويب، أنشئ إعداد تطبيق جديداً بالاسم JAVA_OPTS باستخدام القيمة -Dfile.encoding=UTF-8.

أو بدلاً من ذلك، يمكنك تكوين إعداد التطبيق باستخدام وظيفة Maven الإضافية لـ App Service. أضف اسم الإعداد وعلامات القيم في تكوين الوظيفة الإضافية:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Dfile.encoding=UTF-8</value>
    </property>
</appSettings>

التحويل البرمجي المسبق لملفات JSP

لتحسين أداء تطبيقات Tomcat، يمكنك إجراء تحويل برمجي لملفات JSP قبل التوزيع إلى App Service. يمكنك استخدام وظيفة Maven الإضافية التي توفرها Apache Sling، أو استخدام ملف بنية Ant هذا.

تأمين التطبيقات

كما هو الحال مع التطبيقات الأخرى، تتضمن تطبيقات Java التي يتم تشغيلها في App Service نفس مجموعة أفضل ممارسات الأمان.

مصادقة المستخدمين (Easy Auth)

يمكنك إعداد مصادقة التطبيق في مدخل Azure باستخدام خيار المصادقة والتخويل. من هناك، يمكنك تمكين المصادقة باستخدام معرف Microsoft Entra أو عمليات تسجيل الدخول الاجتماعية مثل Facebook أو Google أو GitHub. يعمل تكوين مدخل Azure فقط عند تكوين موفِّر مصادقة واحد. لمزيد من المعلومات، راجع تكوين تطبيق App Service لاستخدام تسجيل الدخول إلى Microsoft Entra والمقالات ذات الصلة لموفري الهوية الآخرين. إذا كنت بحاجة إلى تمكين العديد من موفري تسجيل الدخول، فاتبع الإرشادات الموجودة في تخصيص عمليات تسجيل الدخول وتسجيل الخروج.

Java SE

يمكن لمطوري Spring Boot استخدام بداية Microsoft Entra Spring Boot لتأمين التطبيقات باستخدام التعليقات التوضيحية وواجهات برمجة التطبيقات ل Spring Security المألوفة. تأكد من زيادة الحد الأقصى لحجم العنوان في ملف application.properties. نقترح القيمة 16384.

Tomcat

يمكن لتطبيق Tomcat الوصول إلى مطالبات المستخدم مباشرة من servlet عن طريق تحويل العنصر الأساسي إلى عنصر تعيين. يعين Map الكائن كل نوع مطالبة إلى مجموعة من المطالبات لهذا النوع. في مثال التعليمات البرمجية التالي، request هو مثيل ل HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

يمكنك الآن فحص العنصر Map بحثاً عن أي مطالبة محددة. على سبيل المثال، تتكرر القصاصة البرمجية التالية عبر كافة أنواع المطالبات وتطبع محتويات كل مجموعة.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

لتسجيل خروج المستخدمين، استخدم المسار /.auth/ext/logout. لتنفيذ إجراءات أخرى، راجع الوثائق حول تخصيص عمليات تسجيل الدخول وتسجيل الخروج. هناك أيضا وثائق رسمية حول واجهة Tomcat HttpServletRequest وأساليبها. يتم تحميل أساليب servlet التالية أيضاً باستخدام بيانات المجال استناداً إلى تكوين App Service:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

لتعطيل هذه الميزة، أنشئ إعداد تطبيق بالاسم WEBSITE_AUTH_SKIP_PRINCIPAL باستخدام القيمة 1. لتعطيل جميع عوامل تصفية servlet المضافة بواسطة App Service، أنشئ إعداد بالاسم WEBSITE_SKIP_FILTERS باستخدام القيمة 1.

تكوين TLS/SSL

لتحميل شهادة TLS/SSL موجودة وربطها باسم مجال التطبيق الخاص بك، اتبع الإرشادات الواردة في تأمين اسم DNS مخصص مع ربط TLS/SSL في Azure App Service. يمكنك أيضا تكوين التطبيق لفرض TLS/SSL.

استخدام مراجع KeyVault

يوفر Azure KeyVault إدارة مركزية للبيانات السرية باستخدام نُهج الوصول ومحفوظات التدقيق. يمكنك تخزين البيانات السرية (مثل كلمات المرور أو سلاسل الاتصال) في KeyVault والوصول إلى هذه البيانات السرية في تطبيقك من خلال متغيرات البيئة.

أولا، اتبع الإرشادات لمنح تطبيقك حق الوصول إلى مخزن مفاتيح وإجراء مرجع KeyVault إلى سرك في إعداد التطبيق. يمكنك التحقق من أن المرجع يحدد البيانات السرية بطباعة متغير البيئة أثناء الوصول عن بُعد إلى الوحدة الطرفية لـ App Service.

لإدخال هذه البيانات السرية في ملف تكوين Tomcat أو Spring، استخدم بناء جملة الإدخال لمتغير البيئة (${MY_ENV_VAR}). للحصول على ملفات تكوين Spring، راجع هذه الوثائق حول التكوينات الخارجية.

استخدام Java Key Store

بشكل افتراضي، يتم تحميل أي شهادات عامة أو خاصة تم تحميلها إلى App Service Linux في مخازن مفاتيح Java المعنية عند بدء الحاوية. بعد تحميل الشهادة، ستحتاج إلى إعادة تشغيل App Service ليتم تحميلها في مخزن مفاتيح Java. يتم تحميل الشهادات العامة إلى Key Store في $JRE_HOME/lib/security/cacerts، ويتم تخزين الشهادات الخاصة في $JRE_HOME/lib/security/client.jks.

قد يكون المزيد من التكوين ضروريا لتشفير اتصال JDBC الخاص بك مع الشهادات في مخزن مفاتيح Java. راجع وثائق برنامج تشغيل JDBC الذي اخترته.

تهيئة Java Key Store

لتهيئة عنصر import java.security.KeyStore، قم بتحميل ملف keystore باستخدام كلمة المرور. كلمة المرور الافتراضية لكلا المخزنين الرئيسيين هي changeit.

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/cacerts"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JRE_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

تحميل مخزن المفاتيح يدوياً

يمكنك تحميل الشهادات يدوياً إلى مخزن المفاتيح. أنشئ إعداد تطبيق، SKIP_JAVA_KEYSTORE_LOAD، باستخدام القيمة 1 لتعطيل App Service عن تحميل الشهادات إلى مخزن المفاتيح تلقائياً. يتم تخزين جميع الشهادات العامة التي تم تحميلها إلى App Service عبر مدخل Azure أسفل /var/ssl/certs/. يتم تخزين الشهادات الخاصة أسفل /var/ssl/private/.

يمكنك التفاعل مع Java Key Tool أو تتبع أخطاءها عن طريق فتح اتصال SSH بـ App Service وتشغيل الأمر keytool. راجع وثائق حول Key Tool للحصول على قائمة بالأوامر. لمزيد من المعلومات حول KeyStore API، راجع الوثائق الرسمية.

تكوين الأنظمة الأساسية لـ APM

يوضح هذا القسم كيفية توصيل تطبيقات Java المنشورة على Azure App Service مع أنظمة مراقبة تطبيق Azure Monitor Application Insights و NewRelic و AppDynamics لمراقبة أداء التطبيق (APM).

تكوين Application Insights

Azure Monitor Application Insights هي خدمة مراقبة تطبيق أصلية سحابية تمكن العملاء من مراقبة حالات الفشل والازدحام وأنماط الاستخدام لتحسين أداء التطبيق وتقليل متوسط وقت الحل (MTTR). من خلال بضع نقرات أو أوامر CLI، يمكنك تمكين المراقبة لتطبيقات Node.js أو Java، والفرز التلقائي للسجلات والمقاييس والتتبعات الموزعة، مما يلغي الحاجة إلى تضمين SDK في تطبيقك. لمزيد من المعلومات حول إعدادات التطبيق المتوفرة لتكوين العامل، راجع وثائق Application Insights.

مدخل Azure

لتمكين Application Insights من مدخل Azure، انتقل إلى Application Insights في القائمة اليمنى وحدد تشغيل Application Insights. بشكل افتراضي، يتم استخدام مورد رؤى تطبيق جديد بنفس اسم تطبيق الويب الخاص بك. يمكنك اختيار استخدام مورد موجود لنتائج تحليلات التطبيق، أو تغيير الاسم. حدد Apply في الأسفل.

Azure CLI

للتمكين عبر Azure CLI، تحتاج إلى إنشاء مورد Application Insights وتعيين إعدادات تطبيقين على مدخل Microsoft Azure لتوصيل Application Insights بتطبيق الويب الخاص بك.

  1. تمكين ملحق Application Insights

    az extension add -n application-insights
    
  2. إنشاء مورد Application Insights باستخدام أمر CLI التالي. استبدل العناصر النائبة باسم المورد المطلوب والمجموعة.

    az monitor app-insights component create --app <resource-name> -g <resource-group> --location westus2  --kind web --application-type web
    

    لاحظ قيم connectionString و instrumentationKey، ستحتاج إلى هذه القيم في الخطوة التالية.

    لاسترداد قائمة بالمواقع الأخرى، قم بتشغيل az account list-locations.

  1. عيّن المفتاح الخاص بالتقرير وسلسلة الاتصال وإصدار عامل المراقبة باعتبارها إعدادات التطبيق في تطبيق الويب. استبدل <instrumentationKey> و<connectionString> بالقيمتين من الخطوة السابقة.

    az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default" "XDT_MicrosoftApplicationInsights_Java=1"
    
  1. عيّن المفتاح الخاص بالتقرير وسلسلة الاتصال وإصدار عامل المراقبة باعتبارها إعدادات التطبيق في تطبيق الويب. استبدل <instrumentationKey> و<connectionString> بالقيمتين من الخطوة السابقة.

    az webapp config appsettings set -n <webapp-name> -g <resource-group> --settings "APPINSIGHTS_INSTRUMENTATIONKEY=<instrumentationKey>" "APPLICATIONINSIGHTS_CONNECTION_STRING=<connectionString>" "ApplicationInsightsAgent_EXTENSION_VERSION=~3" "XDT_MicrosoftApplicationInsights_Mode=default"
    

تكوين New Relic

  1. إنشاء حساب NewRelic في NewRelic.com

  2. قم بتنزيل عامل Java من NewRelic. يحتوي على اسم ملف مشابه newrelic-java-x.x.x.zip.

  3. انسخ مفتاح الترخيص الخاص بك، وتحتاج إليه لتكوين العامل لاحقا.

  4. استخدم SSH في مثيل App Service وأنشئ دليل جديد /home/site/wwwroot/apm.

  5. قم بتحميل ملفات عامل NewRelic Java غير المضغوطة إلى دليل ضمن /home/site/wwwroot/apm. يجب أن تكون ملفات عاملك في /home/site/wwwroot/apm/newrelic.

  6. عدّل ملف YAML في /home/site/wwwroot/apm/newrelic/newrelic.yml واستبدل قيمة الترخيص للعنصر النائب بمفتاح ترخيصك.

  7. في مدخل Azure، استعرض وصولاً إلى تطبيقك في App Service وأنشئ إعداد تطبيق جديداً.

    • بالنسبة إلى تطبيقات Java SE، أنشئ متغير بيئة بالاسم JAVA_OPTS باستخدام القيمة -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
    • بالنسبة إلى Tomcat، أنشئ متغير بيئة بالاسم CATALINA_OPTS باستخدام القيمة -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
  1. إنشاء حساب NewRelic في NewRelic.com

  2. قم بتنزيل عامل Java من NewRelic. يحتوي على اسم ملف مشابه newrelic-java-x.x.x.zip.

  3. انسخ مفتاح الترخيص، فستحتاج إليه لتكوين العامل لاحقاً.

  4. استخدم SSH في مثيل App Service وأنشئ دليل جديد /home/site/wwwroot/apm.

  5. قم بتحميل ملفات عامل NewRelic Java غير المضغوطة إلى دليل ضمن /home/site/wwwroot/apm. يجب أن تكون ملفات عاملك في /home/site/wwwroot/apm/newrelic.

  6. عدّل ملف YAML في /home/site/wwwroot/apm/newrelic/newrelic.yml واستبدل قيمة الترخيص للعنصر النائب بمفتاح ترخيصك.

  7. في مدخل Azure، استعرض وصولاً إلى تطبيقك في App Service وأنشئ إعداد تطبيق جديداً.

    • بالنسبة إلى تطبيقات Java SE، أنشئ متغير بيئة بالاسم JAVA_OPTS باستخدام القيمة -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
    • بالنسبة إلى Tomcat، أنشئ متغير بيئة بالاسم CATALINA_OPTS باستخدام القيمة -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.

إذا كان لديك متغير بيئة بالفعل لـ JAVA_OPTS أو CATALINA_OPTS، فألحق الخيار -javaagent:/... بنهاية القيمة الحالية.

تكوين AppDynamics

  1. إنشاء حساب AppDynamics في AppDynamics.com

  2. قم بتنزيل عامل Java من موقع AppDynamics على الويب. اسم الملف مشابه AppServerAgent-x.x.x.xxxxx.zip

  3. استخدم وحدة تحكم Kudu لإنشاء دليل جديد /home/site/wwwroot/apm.

  4. قم بتحميل ملفات عامل Java إلى دليل ضمن /home/site/wwwroot/apm. يجب أن تكون ملفات عاملك في /home/site/wwwroot/apm/appdynamics.

  5. في مدخل Azure، استعرض وصولاً إلى تطبيقك في App Service وأنشئ إعداد تطبيق جديداً.

    • بالنسبة إلى تطبيقات Java SE، أنشئ متغير بيئة بالاسم JAVA_OPTS باستخدام القيمة -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> حيث <app-name> هو اسم App Service لديك.
    • بالنسبة إلى تطبيقات Tomcat، أنشئ متغير بيئة بالاسم CATALINA_OPTS باستخدام القيمة -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> حيث <app-name> هو اسم App Service لديك.
  1. إنشاء حساب AppDynamics في AppDynamics.com

  2. قم بتنزيل عامل Java من موقع AppDynamics على الويب. اسم الملف مشابه AppServerAgent-x.x.x.xxxxx.zip

  3. استخدم SSH في مثيل App Service وأنشئ دليل جديد /home/site/wwwroot/apm.

  4. قم بتحميل ملفات عامل Java إلى دليل ضمن /home/site/wwwroot/apm. يجب أن تكون ملفات عاملك في /home/site/wwwroot/apm/appdynamics.

  5. في مدخل Azure، استعرض وصولاً إلى تطبيقك في App Service وأنشئ إعداد تطبيق جديداً.

    • بالنسبة إلى تطبيقات Java SE، أنشئ متغير بيئة بالاسم JAVA_OPTS باستخدام القيمة -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> حيث <app-name> هو اسم App Service لديك.
    • بالنسبة إلى تطبيقات Tomcat، أنشئ متغير بيئة بالاسم CATALINA_OPTS باستخدام القيمة -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> حيث <app-name> هو اسم App Service لديك.

إشعار

إذا كان لديك متغير بيئة بالفعل لـ JAVA_OPTS أو CATALINA_OPTS، فألحق الخيار -javaagent:/... بنهاية القيمة الحالية.

تكوين مصادر البيانات

Java SE

للاتصال بمصادر البيانات في تطبيقات Spring Boot، نقترح إنشاء سلاسل اتصال وتضمينها في ملف application.properties الموجود لديك.

  1. في مقطع "التكوين" من صفحة App Service، عيّن اسماً للسلسلة، والصق سلسلة اتصال JDBC في حقل القيمة، ثم عيّن النوع على "مخصص". يمكنك اختيارياً تعيين سلسلة الاتصال هذه كإعداد فتحة.

    يمكن لتطبيقنا الوصول إلى سلسلة الاتصال هذه باعتبارها متغير بيئة بالاسم CUSTOMCONNSTR_<your-string-name>. على سبيل المثال، CUSTOMCONNSTR_exampledb

  2. في ملف application.properties لديك، قم بالإشارة إلى سلسلة الاتصال هذه باستخدام اسم متغير البيئة. على سبيل المثال، يمكننا استخدام ما يلي.

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

لمزيد من المعلومات، راجع وثائق Spring Boot حول الوصول إلى البيانات والتكوينات الخارجية.

Tomcat

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

قاعدة البيانات اسم فئة برنامج التشغيل برنامج تشغيل JDBC
PostgreSQL org.postgresql.Driver تنزيل
MySQL com.mysql.jdbc.Driver تنزيل (حدد "مستقل عن النظام الأساسي")
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver تنزيل

لتكوين Tomcat لاستخدام Java Database Connectivity (JDBC) أو Java Persistence API ‏(JPA)، قم أولاً بتخصيص متغير البيئة CATALINA_OPTS الذي تتم قراءته بواسطة Tomcat عند بدء التشغيل. يمكنك تعيين هذه القيم من خلال إعداد تطبيق في وظيفة Maven الإضافية لـ App Service:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

أو يمكنك تعيين متغيرات البيئة في صفحةالتكوين>إعدادات التطبيق في مدخل Azure.

بعد ذلك، حدد ما إذا كان يجب توفير مصدر البيانات لتطبيق واحد أو لجميع التطبيقات التي يتم تشغيلها على Tomcat servlet.

مصادر البيانات على مستوى التطبيق

  1. أنشئ ملف context.xml في دليل META-INF/ لمشروعك. إنشاء الدليل META-INF/ إذا لم يكن موجودا.

  2. في context.xml، أضف عنصر Context لربط مصدر البيانات بعنوان JNDI. استبدل العنصر النائب driverClassName باسم فئة برنامج التشغيل من الجدول بالأعلى.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. حدّث web.xml لتطبيقك حتى تتمكن من استخدام مصدر البيانات في تطبيقك.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

الموارد المشتركة على مستوى الخادم

توجد عمليات تثبيت Tomcat على App Service على نظام التشغيل Windows في مساحة مشتركة على خطة App Service. لا يمكنك تعديل تثبيت Tomcat لتكوين على مستوى الخادم مباشرة. لإجراء تغييرات على مستوى الخادم على تكوين تثبيت Tomcat، يجب نسخ Tomcat إلى مجلد محلي حيث يمكنك تعديل تكوين Tomcat.

إنشاء Tomcat مخصص تلقائياً عند بدء تشغيل التطبيق

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

  1. تحقق مما إذا تم نسخ Tomcat وتكوينه محلياً. إذا كان الأمر كذلك، يمكن أن يتوقف البرنامج النصي لبدء التشغيل هنا.
  2. انسخ Tomcat محلياً.
  3. قم بإجراء التغييرات المطلوبة على التكوين.
  4. وضِّح أنه تم إكمال التكوين بنجاح.

بالنسبة لتطبيقات Windows، قم بإنشاء ملف باسم startup.cmd أو startup.ps1 في wwwroot الدليل. يتم تشغيل هذا الملف تلقائيا قبل بدء تشغيل خادم Tomcat.

فيما يلي برنامج نصي لـ PowerShell يكمل هذه الخطوات:

    # Check for marker file indicating that config has already been done
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
        return 0
    }

    # Delete previous Tomcat directory if it exists
    # In case previous config isn't completed or a new config should be forcefully installed
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
        Remove-Item "$Env:LOCAL_EXPANDED\tomcat" -Recurse
    }

    # Copy Tomcat to local
    # Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
    New-Item "$Env:LOCAL_EXPANDED\tomcat" -ItemType Directory
    Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" -Destination "$Env:LOCAL_EXPANDED\tomcat" -Recurse

    # Perform the required customization of Tomcat
    {... customization ...}

    # Mark that the operation was a success
    New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
التحويلات

أحد حالات الاستخدام الشائعة لتخصيص إصدار Tomcat هي تعديل ملفات تكوين Tomcat أو server.xml أو context.xml أو web.xml. يعدّل App Service هذه الملفات بالفعل لتوفير ميزات النظام الأساسي. لمتابعة استخدام هذه الميزات، من المهم الاحتفاظ بمحتوى هذه الملفات عند إجراء تغييرات عليها. ولفعل ذلك، من المستحسن استخدام تحويل XSL ‏(XSLT). يمكنك استخدام تحويل XSL لإجراء تغييرات على ملفات XML مع الاحتفاظ بالمحتويات الأصلية للملف.

مثال ملف XSLT

يضيف مثال التحويل هذا عقدة موصل جديدة إلى server.xml. لاحظ تحويل الهوية، الذي يحتفظ بالمحتويات الأصلية للملف.

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <!-- Identity transform: this ensures that the original contents of the file are included in the new file -->
    <!-- Ensure that your transform files include this block -->
    <xsl:template match="@* | node()" name="Copy">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="@* | node()" mode="insertConnector">
      <xsl:call-template name="Copy" />
    </xsl:template>

    <xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
                                   contains(., '&lt;Connector') and
                                   (contains(., 'scheme=&quot;https&quot;') or
                                    contains(., &quot;scheme='https'&quot;))]">
      <xsl:value-of select="." disable-output-escaping="yes" />
    </xsl:template>

    <xsl:template match="Service[not(Connector[@scheme = 'https'] or
                                     comment()[contains(., '&lt;Connector') and
                                               (contains(., 'scheme=&quot;https&quot;') or
                                                contains(., &quot;scheme='https'&quot;))]
                                    )]
                        ">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()" mode="insertConnector" />
      </xsl:copy>
    </xsl:template>

    <!-- Add the new connector after the last existing Connnector if there's one -->
    <xsl:template match="Connector[last()]" mode="insertConnector">
      <xsl:call-template name="Copy" />

      <xsl:call-template name="AddConnector" />
    </xsl:template>

    <!-- ... or before the first Engine if there's no existing Connector -->
    <xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
                  mode="insertConnector">
      <xsl:call-template name="AddConnector" />

      <xsl:call-template name="Copy" />
    </xsl:template>

    <xsl:template name="AddConnector">
      <!-- Add new line -->
      <xsl:text>&#xa;</xsl:text>
      <!-- This is the new connector -->
      <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
                 maxThreads="150" scheme="https" secure="true" 
                 keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
                 clientAuth="false" sslProtocol="TLS" />
    </xsl:template>

    </xsl:stylesheet>
وظيفة تحويل XSL

يحتوي PowerShell على أدوات مضمنة لتحويل ملفات XML باستخدام تحويلات XSL. البرنامج النصي التالي هو مثال لوظيفة يمكنك استخدامها في startup.ps1 لتنفيذ التحويل:

    function TransformXML{
        param ($xml, $xsl, $output)

        if (-not $xml -or -not $xsl -or -not $output)
        {
            return 0
        }

        Try
        {
            $xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
            $XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
            $xslt_settings.EnableScript = 1;

            $xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
            $xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
            $xslt.Transform($xml, $output);

        }

        Catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            Write-Host  'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
            return 0
        }
        return 1
    }
XXApp settingsYY

يحتاج النظام الأساسي أيضاً إلى معرفة مكان تثبيت الإصدار المخصص من Tomcat. يمكنك تعيين موقع التثبيت في إعداد تطبيق CATALINA_BASE.

يمكنك استخدام Azure CLI لتغيير هذا الإعداد:

    az webapp config appsettings set -g $MyResourceGroup -n $MyUniqueApp --settings CATALINA_BASE="%LOCAL_EXPANDED%\tomcat"

أو يمكنك تغيير الإعداد يدوياً في مدخل Azure:

  1. انتقل إلىالإعدادات>التكوين>إعدادات التطبيق.
  2. حددإعداد تطبيق جديد.
  3. استخدم هذه القيم لإنشاء الإعداد:
    1. الاسم:CATALINA_BASE
    2. القيمة: "%LOCAL_EXPANDED%\tomcat"
مثال startup.ps1

ينسخ البرنامج النصي المثال التالي Tomcat مخصصاً إلى مجلد محلي، وينفذ تحويل XSL، ويوضِّح نجاح التحويل:

    # Locations of xml and xsl files
    $target_xml="$Env:LOCAL_EXPANDED\tomcat\conf\server.xml"
    $target_xsl="$Env:HOME\site\server.xsl"

    # Define the transform function
    # Useful if transforming multiple files
    function TransformXML{
        param ($xml, $xsl, $output)

        if (-not $xml -or -not $xsl -or -not $output)
        {
            return 0
        }

        Try
        {
            $xslt_settings = New-Object System.Xml.Xsl.XsltSettings;
            $XmlUrlResolver = New-Object System.Xml.XmlUrlResolver;
            $xslt_settings.EnableScript = 1;

            $xslt = New-Object System.Xml.Xsl.XslCompiledTransform;
            $xslt.Load($xsl,$xslt_settings,$XmlUrlResolver);
            $xslt.Transform($xml, $output);
        }

        Catch
        {
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            echo  'Error'$ErrorMessage':'$FailedItem':' $_.Exception;
            return 0
        }
        return 1
    }

    $success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml

    # Check for marker file indicating that config has already been done
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker"){
        return 0
    }

    # Delete previous Tomcat directory if it exists
    # In case previous config isn't completed or a new config should be forcefully installed
    if(Test-Path "$Env:LOCAL_EXPANDED\tomcat"){
        Remove-Item "$Env:LOCAL_EXPANDED\tomcat" --recurse
    }

    md -Path "$Env:LOCAL_EXPANDED\tomcat"

    # Copy Tomcat to local
    # Using the environment variable $AZURE_TOMCAT90_HOME uses the 'default' version of Tomcat
    Copy-Item -Path "$Env:AZURE_TOMCAT90_HOME\*" "$Env:LOCAL_EXPANDED\tomcat" -Recurse

    # Perform the required customization of Tomcat
    $success = TransformXML -xml $target_xml -xsl $target_xsl -output $target_xml

    # Mark that the operation was a success if successful
    if($success){
        New-Item -Path "$Env:LOCAL_EXPANDED\tomcat\config_done_marker" -ItemType File
    }

إنهاء التكوين

وأخيرا، يمكنك وضع برنامج التشغيل JARs في مسار فئة Tomcat وإعادة تشغيل App Service. تأكد من أن ملفات برنامج تشغيل JDBC متوفرة لمحمل فئة Tomcat عن طريق وضعها في الدليل /home/site/lib . في Cloud Shell، قم بتشغيل az webapp deploy --type=lib لكل برنامج تشغيل JAR:

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --target-path <jar-name>.jar

Tomcat

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

قاعدة البيانات اسم فئة برنامج التشغيل برنامج تشغيل JDBC
PostgreSQL org.postgresql.Driver تنزيل
MySQL com.mysql.jdbc.Driver تنزيل (حدد "مستقل عن النظام الأساسي")
SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver تنزيل

لتكوين Tomcat لاستخدام Java Database Connectivity (JDBC) أو Java Persistence API ‏(JPA)، قم أولاً بتخصيص متغير البيئة CATALINA_OPTS الذي تتم قراءته بواسطة Tomcat عند بدء التشغيل. يمكنك تعيين هذه القيم من خلال إعداد تطبيق في وظيفة Maven الإضافية لـ App Service:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

أو يمكنك تعيين متغيرات البيئة في صفحةالتكوين>إعدادات التطبيق في مدخل Azure.

بعد ذلك، حدد ما إذا كان يجب توفير مصدر البيانات لتطبيق واحد أو لجميع التطبيقات التي يتم تشغيلها على Tomcat servlet.

مصادر البيانات على مستوى التطبيق

  1. أنشئ ملف context.xml في دليل META-INF/ لمشروعك. إنشاء الدليل META-INF/ إذا لم يكن موجودا.

  2. في context.xml، أضف عنصر Context لربط مصدر البيانات بعنوان JNDI. استبدل العنصر النائب driverClassName باسم فئة برنامج التشغيل من الجدول بالأعلى.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${connURL}"
            driverClassName="<insert your driver class name>"
            username="${dbuser}"
            password="${dbpassword}"
        />
    </Context>
    
  3. حدّث web.xml لتطبيقك حتى تتمكن من استخدام مصدر البيانات في تطبيقك.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

الموارد المشتركة على مستوى الخادم

تتطلب إضافة مصدر بيانات مشترك على مستوى الخادم تحرير server.xml Tomcat. أولاً، قم بتحميل برنامج نصي لبدء التشغيل وعيّن المسار إلى البرنامج النصي منالتكوين>الأمر. يمكنك تحميل البرنامج النصي لبدء التشغيل باستخدام FTP.

سيجري البرنامج النصي لبدء التشغيل لديك تحويل xsl على ملف server.xml ويقوم بإخراج ملف xml الناتج إلى /usr/local/tomcat/conf/server.xml. يجب أن يقوم البرنامج النصي لبدء التشغيل بتثبيت libxslt عبر apk. يمكن تحميل ملف xsl والبرنامج النصي لبدء التشغيل عبر FTP. فيما يلي مثال للبرنامج النصي لبدء التشغيل.

# Install libxslt. Also copy the transform file to /home/tomcat/conf/
apk add --update libxslt

# Usage: xsltproc --output output.xml style.xsl input.xml
xsltproc --output /home/tomcat/conf/server.xml /home/tomcat/conf/transform.xsl /usr/local/tomcat/conf/server.xml

يضيف ملف XSL المثال التالي عقدة موصل جديدة إلى server.xml Tomcat.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()" name="Copy">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@* | node()" mode="insertConnector">
    <xsl:call-template name="Copy" />
  </xsl:template>

  <xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
                                 contains(., '&lt;Connector') and
                                 (contains(., 'scheme=&quot;https&quot;') or
                                  contains(., &quot;scheme='https'&quot;))]">
    <xsl:value-of select="." disable-output-escaping="yes" />
  </xsl:template>

  <xsl:template match="Service[not(Connector[@scheme = 'https'] or
                                   comment()[contains(., '&lt;Connector') and
                                             (contains(., 'scheme=&quot;https&quot;') or
                                              contains(., &quot;scheme='https'&quot;))]
                                  )]
                      ">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" mode="insertConnector" />
    </xsl:copy>
  </xsl:template>

  <!-- Add the new connector after the last existing Connnector if there's one -->
  <xsl:template match="Connector[last()]" mode="insertConnector">
    <xsl:call-template name="Copy" />

    <xsl:call-template name="AddConnector" />
  </xsl:template>

  <!-- ... or before the first Engine if there's no existing Connector -->
  <xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
                mode="insertConnector">
    <xsl:call-template name="AddConnector" />

    <xsl:call-template name="Copy" />
  </xsl:template>

  <xsl:template name="AddConnector">
    <!-- Add new line -->
    <xsl:text>&#xa;</xsl:text>
    <!-- This is the new connector -->
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
               maxThreads="150" scheme="https" secure="true" 
               keystoreFile="${{user.home}}/.keystore" keystorePass="changeit"
               clientAuth="false" sslProtocol="TLS" />
  </xsl:template>

</xsl:stylesheet>

إنهاء التكوين

وأخيراً، ضع ملفات JAR لبرنامج التشغيل في Tomcat classpath وأعد تشغيل App Service لديك.

  1. تأكد من أن ملفات برنامج تشغيل JDBC متوفرة لمحمل فئة Tomcat عن طريق وضعها في الدليل /home/site/lib . في Cloud Shell، قم بتشغيل az webapp deploy --type=lib لكل برنامج تشغيل JAR:
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <jar-name>.jar --type=lib --path <jar-name>.jar

إذا كنت قد أنشئت مصدر بيانات على مستوى الخادم، فأعد تشغيل تطبيق App Service Linux. سيقوم Tomcat بإعادة تعيين CATALINA_BASE إلى /home/tomcat ويستخدم التكوين المحدث.

مصادر بيانات JBoss EAP

توجد ثلاث خطوات أساسية عند تسجيل مصدر بيانات باستخدام JBoss EAP: تحميل برنامج تشغيل JDBC، وإضافة برنامج تشغيل JDBC باعتباره وحدة نمطية، وتسجيل الوحدة النمطية. App Service خدمة استضافة عديمة الحالة، لذلك يجب كتابة أوامر التكوين من أجل إضافة الوحدة النمطية لمصدر البيانات وتسجيلها وتطبيقها عند بدء تشغيل الحاوية.

  1. احصل على برنامج تشغيل JDBC لقاعدة بياناتك.

  2. أنشئ ملف XML لتعريف الوحدة النمطية لبرنامج تشغيل JDBC. يوضح المثال التالي تعريف وحدة نمطية ل PostgreSQL.

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="org.postgres">
        <resources>
        <!-- ***** IMPORTANT : REPLACE THIS PLACEHOLDER *******-->
        <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" />
        </resources>
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    
  3. ضع أوامر JBoss CLI في ملف يسمى jboss-cli-commands.cli. يجب أن تضيف أوامر JBoss الوحدة النمطية وتسجلها باعتبارها مصدراً للبيانات. يوضح المثال التالي أوامر JBoss CLI ل PostgreSQL.

    #!/usr/bin/env bash
    module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml
    
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
    
    data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    
  4. أنشئ برنامجاً نصياً لبدء التشغيل، startup_script.sh الذي يستدعي أوامر JBoss CLI. يوضح المثال التالي كيفية استدعاء .jboss-cli-commands.cli لاحقا، ستقوم بتكوين App Service لتشغيل هذا البرنامج النصي عند بدء تشغيل الحاوية.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. باستخدام عميل FTP من اختيارك، قم بتحميل برنامج تشغيل JDBC وjboss-cli-commands.cli وstartup_script.shوتعريف الوحدة النمطية إلى /site/deployments/tools/.

  6. قم بتكوين موقعك لتشغيل startup_script.sh عند بدء تشغيل الحاوية. في مدخل Azure، انتقل إلىالتكوين>الإعدادات العامة>أمر بدء التشغيل. عيّن حقل أمر بدء التشغيل على /home/site/deployments/tools/startup_script.sh. احفظ تغييراتك.

للتأكد من إضافة مصدر البيانات إلى خادم JBoss، استخدم SSH في تطبيق الويب وقم بتشغيل $JBOSS_HOME/bin/jboss-cli.sh --connect. بمجرد الاتصال ب JBoss، قم بتشغيل /subsystem=datasources:read-resource لطباعة قائمة بمصادر البيانات.

robots933456 في السجلات

قد تشاهد الرسالة التالية في سجلات الحاوية:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

يمكنك تجاهل هذه الرسالة بأمان. /robots933456.txt هو مسار عنوان URL وهمي يستخدم "خدمة التطبيقات" للتحقق من إمكانية تقديم الحاوية "طلبات". يُشير رد 404 ببساطة إلى أن المسار غير موجود، ولكنه يتيح لـ"خدمة التطبيقات" معرفة أن الحاوية سليمة وجاهزة للاستجابة للطلبات.

اختيار إصدار وقت تشغيل Java

تسمح App Service للمستخدمين باختيار الإصدار الرئيسي من JVM، مثل Java 8 أو Java 11، وإصدار التصحيح، مثل 1.8.0_232 أو 11.0.5. يمكنك أيضاً اختيار تحديث إصدار التصحيح تلقائياً بينما تتوفر إصدارات ثانوية جديدة. في معظم الحالات، يجب أن تستخدم تطبيقات الإنتاج إصدارات JVM التصحيحية مثبتة. يمنع هذا الانقطاعات غير المتوقعة أثناء التحديث التلقائي لإصدار التصحيح. تستخدم جميع تطبيقات الويب Java JVMs 64 بت، وهي غير قابلة للتكوين.

إذا كنت تستخدم Tomcat، يمكنك اختيار تثبيت إصدار التصحيح من Tomcat. في نظام التشغيل Windows، يمكنك تثبيت إصدارات التصحيح من JVM وTomcat كل على حدة. على Linux، يمكنك تثبيت إصدار التصحيح من Tomcat؛ يتم أيضا تثبيت إصدار التصحيح من JVM ولكنه غير قابل للتكوين بشكل منفصل.

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

JBoss EAP

تكوين أنظمة المجموعات في JBoss EAP

تدعم App Service تكوين أنظمة المجموعات لإصدارات JBoss EAP 7.4.1 والإصدارات الأحدث. لتمكين تكوين أنظمة المجموعات، يجب دمج تطبيق الويب لديك مع شبكة ظاهرية. عند دمج تطبيق الويب مع شبكة ظاهرية، يتم إعادة تشغيله، ويبدأ تثبيت JBoss EAP تلقائيا بتكوين متفاوت المسافات. تتصل مثيلات JBoss EAP عبر الشبكة الفرعية المحددة في تكامل الشبكة الظاهرية، باستخدام المنافذ الموضحة WEBSITES_PRIVATE_PORTS في متغير البيئة في وقت التشغيل. يمكنك تعطيل تكوين أنظمة المجموعات عن طريق إنشاء إعداد تطبيق بالاسم WEBSITE_DISABLE_CLUSTERING باستخدام أي قيمة.

إشعار

إذا كنت تقوم بتمكين تكامل الشبكة الظاهرية مع قالب ARM، فستحتاج إلى تعيين الخاصية vnetPrivatePorts يدويا إلى قيمة 2. إذا قمت بتمكين تكامل الشبكة الظاهرية من CLI أو المدخل، يتم تعيين هذه الخاصية لك تلقائيا.

عند تمكين تكوين أنظمة المجموعات، تستخدم مثيلات JBoss EAP بروتوكول اكتشاف FILE_PING JGroups لاكتشاف مثيلات جديدة والمحافظة على معلومات نظام المجموعة مثل، أعضاء نظام المجموعة ومعرفاتهم وعناوين IP الخاصة بهم. في App Service، يمكنك العثور على هذه الملفات ضمن /home/clusterinfo/. يحصل مثيل EAP الأول الذي يبدأ على أذونات القراءة/الكتابة على ملف عضوية نظام المجموعة. تقرأ مثيلات أخرى الملف، وتبحث عن العقدة الأساسية، وتنسق مع تلك العقدة لتضمينها في نظام المجموعة وإضافتها إلى الملف.

إشعار

يمكنك تجنب مهلات تجميع JBOSS عن طريق تنظيف ملفات الاكتشاف القديمة أثناء بدء تشغيل التطبيق

يمكن توزيع نوعي خطة App Service ‏Premium V3 وIsolated V2، عبر مناطق التوفر لتحسين المرونة والوثوقية لأحمال العمل الحرجة لأعمالك. تُعرف هذه البنية أيضاً باسم التكرار عبر المناطق. تتوافق ميزة تجميع JBoss EAP مع ميزة تكرار المنطقة.

قواعد التحجيم التلقائي

عند تكوين قواعد التحجيم التلقائي للتحجيم الأفقي، من المهم إزالة المثيلات بشكل متزايد (واحد في كل مرة) للتأكد من أن كل مثيل تمت إزالته يمكنه نقل نشاطه (مثل معالجة معاملة قاعدة بيانات) إلى عضو آخر في المجموعة. عند تكوين قواعد التحجيم التلقائي في المدخل لتقليل الحجم، استخدم الخيارات التالية:

  • الإجراء: "تقليل العدد بمقدار"
  • تهدئة: "5 دقائق" أو أكبر
  • عدد المثيلات: 1

لا تحتاج إلى إضافة مثيلات بشكل متزايد (توسيع النطاق)، يمكنك إضافة مثيلات متعددة إلى نظام المجموعة في كل مرة.

خطط JBoss EAP App Service

يتوفر JBoss EAP فقط لنوعي خطة App Service‏ Premium v3 وIsolated v2. يجب على العملاء الذين أنشئوا موقع JBoss EAP على طبقة مختلفة أثناء المعاينة العامة الترقية إلى طبقة الجهاز Premium أو Isolated لتجنب السلوك غير المتوقع.

تكوين الخط الأساسي ل Tomcat على App Services

يمكن لمطوري Java تخصيص إعدادات الخادم واستكشاف المشكلات وإصلاحها ونشر التطبيقات إلى Tomcat بثقة إذا كانوا يعرفون عن ملف server.xml وتفاصيل التكوين الخاصة ب Tomcat. تتضمن التخصيصات المحتملة ما يلي:

  • تخصيص تكوين Tomcat: من خلال فهم ملف server.xml وتفاصيل تكوين Tomcat، يمكنك ضبط إعدادات الخادم لمطابقة احتياجات تطبيقاتها.
  • تصحيح الأخطاء: عند نشر تطبيق على خادم Tomcat، يحتاج المطورون إلى معرفة تكوين الخادم لتصحيح أي مشكلات قد تنشأ. يتضمن ذلك التحقق من سجلات الخادم، وفحص ملفات التكوين، وتحديد أي أخطاء قد تحدث.
  • استكشاف مشكلات Tomcat وإصلاحها: يواجه مطورو Java حتما مشكلات في خادم Tomcat الخاص بهم، مثل مشكلات الأداء أو أخطاء التكوين. من خلال فهم ملف server.xml وتفاصيل تكوين Tomcat، يمكن للمطورين تشخيص هذه المشكلات واستكشافها وإصلاحها بسرعة، ما يمكن أن يوفر الوقت والجهد.
  • نشر التطبيقات إلى Tomcat: لنشر تطبيق ويب Java إلى Tomcat، يحتاج المطورون إلى معرفة كيفية تكوين ملف server.xml وإعدادات Tomcat الأخرى. يعد فهم هذه التفاصيل أمرا ضروريا لنشر التطبيقات بنجاح وضمان تشغيلها بسلاسة على الخادم.

عند إنشاء تطبيق مع Tomcat مضمن لاستضافة حمل عمل Java (ملف WAR أو ملف JAR)، هناك إعدادات معينة يمكنك الخروج منها لتكوين Tomcat. يمكنك الرجوع إلى وثائق Apache Tomcat الرسمية للحصول على معلومات مفصلة، بما في ذلك التكوين الافتراضي ل Tomcat Web Server.

بالإضافة إلى ذلك، هناك بعض التحويلات التي يتم تطبيقها بشكل أكبر أعلى server.xml لتوزيع Tomcat عند البدء. هذه هي التحويلات إلى إعدادات الاتصال أو المضيفو الصمام.

لاحظ أن أحدث إصدارات Tomcat لها server.xml (8.5.58 و9.0.38 فصاعدا). لا تستخدم الإصدارات القديمة من Tomcat التحويلات وقد يكون لها سلوك مختلف نتيجة لذلك.

الموصل

<Connector port="${port.http}" address="127.0.0.1" maxHttpHeaderSize="16384" compression="on" URIEncoding="UTF-8" connectionTimeout="${site.connectionTimeout}" maxThreads="${catalina.maxThreads}" maxConnections="${catalina.maxConnections}" protocol="HTTP/1.1" redirectPort="8443"/>
  • maxHttpHeaderSize تم تعيين إلى 16384
  • URIEncoding تم تعيين إلى UTF-8
  • conectionTimeout يتم تعيين إلى WEBSITE_TOMCAT_CONNECTION_TIMEOUT، الذي يتم تعيينه افتراضيا إلى 240000
  • maxThreads يتم تعيين إلى WEBSITE_CATALINA_MAXTHREADS، الذي يتم تعيينه افتراضيا إلى 200
  • maxConnections يتم تعيين إلى WEBSITE_CATALINA_MAXCONNECTIONS، الذي يتم تعيينه افتراضيا إلى 10000

إشعار

يمكن ضبط إعدادات connectionTimeout وmaxThreads وmax الاتصال ions مع إعدادات التطبيق

فيما يلي أمثلة لأوامر CLI التي قد تستخدمها لتغيير قيم conectionTimeout أو maxThreads أو max الاتصال ions:

az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_TOMCAT_CONNECTION_TIMEOUT=120000
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXTHREADS=100
az webapp config appsettings set --resource-group myResourceGroup --name myApp --settings WEBSITE_CATALINA_MAXCONNECTIONS=5000
  • يستخدم الاتصال or عنوان الحاوية بدلا من 127.0.0.1

المضيف

<Host appBase="${site.appbase}" xmlBase="${site.xmlbase}" unpackWARs="${site.unpackwars}" workDir="${site.tempdir}" errorReportValveClass="com.microsoft.azure.appservice.AppServiceErrorReportValve" name="localhost" autoDeploy="true">
  • appBase يتم تعيين إلى AZURE_SITE_APP_BASE، الذي يتم تعيينه افتراضيا إلى محلي WebappsLocalPath
  • xmlBase يتم تعيين إلى AZURE_SITE_HOME، الذي يتم تعيينه افتراضيا إلى /site/wwwroot
  • unpackWARs يتم تعيين إلى AZURE_UNPACK_WARS، الذي يتم تعيينه افتراضيا إلى true
  • workDir يتم تعيين إلى JAVA_TMP_DIR، أي الإعدادات الافتراضية TMP
  • errorReportValveClass يستخدم صمام تقرير الخطأ المخصص

صمام

<Valve prefix="site_access_log.${catalina.instance.name}" pattern="%h %l %u %t &quot;%r&quot; %s %b %D %{x-arr-log-id}i" directory="${site.logdir}/http/RawLogs" maxDays="${site.logRetentionDays}" className="org.apache.catalina.valves.AccessLogValve" suffix=".txt"/>
  • directory يتم تعيين إلى AZURE_LOGGING_DIR، الذي يتم تعيينه افتراضيا إلى home\logFiles
  • maxDays هو إلى WEBSITE_HTTPLOGGING_RETENTION_DAYS، الذي يتم تعيينه افتراضيا إلى 0 [إلى الأبد]

على Linux، يحتوي على كل التخصيص نفسه، بالإضافة إلى:

  • يضيف بعض صفحات الخطأ وإعداد التقارير إلى الصمام:
               <xsl:attribute name="appServiceErrorPage">
                   <xsl:value-of select="'${appService.valves.appServiceErrorPage}'"/>
               </xsl:attribute>

               <xsl:attribute name="showReport">
                   <xsl:value-of select="'${catalina.valves.showReport}'"/>
               </xsl:attribute>

               <xsl:attribute name="showServerInfo">
                   <xsl:value-of select="'${catalina.valves.showServerInfo}'"/>
               </xsl:attribute>

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

تفضل بزيارة مركز Azure لمطوري برامج Java للعثور على التشغيل السريع لـ Azure والبرامج التعليمية ووثائق Java المرجعية.