البرنامج التعليمي: إنشاء تطبيق ويب Java Spring Boot باستخدام Azure App Service على Linux وAzure Cosmos DB
إشعار
بالنسبة لتطبيقات Spring، نوصي باستخدام Azure Spring Apps. ومع ذلك، لا يزال بإمكانك استخدام Azure App Service كوجهة. راجع إرشادات وجهة حمل عمل Java للحصول على المشورة.
يرشدك هذا البرنامج التعليمي خلال عملية إنشاء تطبيقات Java على الويب وتكوينها ونشرها وتوسيع نطاقها على Azure. عند الانتهاء، سيكون لديك تطبيق Spring Boot يخزن البيانات في Azure Cosmos DB الذي يعمل على Azure App Service على Linux.
في هذا البرنامج التعليمي، تتعلم كيفية:
- إنشاء قاعدة بيانات في Azure Cosmos DB.
- قم بتوصيل نموذج التطبيق بقاعدة البيانات واختبره محليًا
- انشر نموذج التطبيق إلى Azure
- سجلات تشخيص الدفق من App Service
- أضف مثيلات إضافية لتوسيع نطاق نموذج التطبيق
إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.
المتطلبات الأساسية
استنساخ عينة التطبيق TODO وإعداد الريبو
يستخدم هذا البرنامج التعليمي نموذج تطبيق قائمة TODO مع واجهة مستخدم ويب تستدعي واجهة برمجة تطبيقات Spring REST المدعومة من Spring Data ل Azure Cosmos DB. تتوفر التعليمات البرمجية للتطبيق على GitHub. لمعرفة المزيد حول كتابة تطبيقات Java باستخدام Spring وAzure Cosmos DB، راجع Spring Boot Starter مع البرنامج التعليمي Azure Cosmos DB for NoSQL والبدء السريع ل Spring Data ل Azure Cosmos DB.
قم بتشغيل الأوامر التالية في الوحدة الطرفية الخاصة بك لاستنساخ عينة الريبو وإعداد بيئة نموذج التطبيق.
git clone --recurse-submodules https://github.com/Azure-Samples/e2e-java-experience-in-app-service-linux-part-2.git
cd e2e-java-experience-in-app-service-linux-part-2
yes | cp -rf .prep/* .
إنشاء Azure Cosmos DB
اتبع هذه الخطوات لإنشاء قاعدة بيانات Azure Cosmos DB في اشتراكك. سيقوم تطبيق قائمة TODO بالاتصال بقاعدة البيانات هذه وتخزين البيانات الخاصة به عند التشغيل، مع الاستمرار في حالة التطبيق بغض النظر عن مكان تشغيل التطبيق.
قم بتسجيل الدخول إلى Azure CLI، ثم قم بشكل اختياري تعيين اشتراكك إذا كان لديك أكثر من اشتراك متصل ببيانات اعتماد تسجيل الدخول الخاصة بك.
az login az account set -s <your-subscription-id>
إنشاء مجموعة موارد Azure، بالإضافة إلى إعادة تحديد اسم مجموعة الموارد.
az group create -n <your-azure-group-name> \ -l <your-resource-group-region>
إنشاء Azure Cosmos DB مع
GlobalDocumentDB
النوع . يجب أن يستخدم اسم مثيل Azure Cosmos DB أحرفا صغيرة فقط. لاحظ أسفلdocumentEndpoint
الحقل في الاستجابة من الأمر .az cosmosdb create --kind GlobalDocumentDB \ -g <your-azure-group-name> \ -n <your-azure-COSMOS-DB-name-in-lower-case-letters>
احصل على مفتاح Azure Cosmos DB للاتصال بالتطبيق. احتفظ ب
primaryMasterKey
،documentEndpoint
في مكان قريب كما ستحتاج إليه في الخطوة التالية.az cosmosdb keys list -g <your-azure-group-name> -n <your-azure-COSMOSDB-name>
قم بتكوين خصائص تطبيق TODO
افتح وحدة طرفية على جهاز الكمبيوتر الخاص بك. انسخ نموذج ملف البرنامج النصي في المستودع المستنسخ حتى تتمكن من تخصيصه لقاعدة بيانات Azure Cosmos DB التي أنشأتها للتو.
cd initial/spring-todo-app
cp set-env-variables-template.sh .scripts/set-env-variables.sh
قم بالتحرير .scripts/set-env-variables.sh
في المحرر المفضل لديك وتوفير معلومات اتصال Azure Cosmos DB. لتكوين App Service Linux، استخدم نفس المنطقة كما كان من قبل (your-resource-group-region
) ومجموعة الموارد (your-azure-group-name
) المستخدمة عند إنشاء قاعدة بيانات Azure Cosmos DB. اختر WEBAPP_NAME ويكون اسمًا مميزًا حيث لا يمكن تكرار أي اسم لتطبيق ويب في أي نشر Azure.
export COSMOSDB_URI=<put-your-COSMOS-DB-documentEndpoint-URI-here>
export COSMOSDB_KEY=<put-your-COSMOS-DB-primaryMasterKey-here>
export COSMOSDB_DBNAME=<put-your-COSMOS-DB-name-here>
# App Service Linux Configuration
export RESOURCEGROUP_NAME=<put-your-resource-group-name-here>
export WEBAPP_NAME=<put-your-Webapp-name-here>
export REGION=<put-your-REGION-here>
ثم قم بتشغيل البرنامج النصي:
source .scripts/set-env-variables.sh
يتم استخدام متغيرات البيئة هذه في application.properties
تطبيق قائمة TODO. تقوم الحقول الموجودة في ملف الخصائص بإعداد تكوين مستودع افتراضي لـ Spring Data:
azure.cosmosdb.uri=${COSMOSDB_URI}
azure.cosmosdb.key=${COSMOSDB_KEY}
azure.cosmosdb.database=${COSMOSDB_DBNAME}
@Repository
public interface TodoItemRepository extends DocumentDbRepository<TodoItem, String> {
}
ثم يستخدم نموذج التطبيق التعليق التوضيحي @Document
المستورد من com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document
لإعداد نوع كيان ليتم تخزينه وإدارته بواسطة Azure Cosmos DB:
@Document
public class TodoItem {
private String id;
private String description;
private String owner;
private boolean finished;
تشغيل نموذج التطبيق
استخدم Maven لتشغيل النموذج.
mvn package spring-boot:run
يجب أن يبدو الناتج كما يلي.
bash-3.2$ mvn package spring-boot:run
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[INFO] WelcomePageHandlerMapping - Adding welcome page: class path resource [static/index.html]
2018-10-28 15:04:32.101 INFO 7673 --- [ main] c.m.azure.documentdb.DocumentClient : Initializing DocumentClient with serviceEndpoint [https://sample-cosmos-db-westus.documents.azure.com:443/], ConnectionPolicy [ConnectionPolicy [requestTimeout=60, mediaRequestTimeout=300, connectionMode=Gateway, mediaReadMode=Buffered, maxPoolSize=800, idleConnectionTimeout=60, userAgentSuffix=;spring-data/2.0.6;098063be661ab767976bd5a2ec350e978faba99348207e8627375e8033277cb2, retryOptions=com.microsoft.azure.documentdb.RetryOptions@6b9fb84d, enableEndpointDiscovery=true, preferredLocations=null]], ConsistencyLevel [null]
[INFO] AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[INFO] TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
[INFO] TodoApplication - Started TodoApplication in 45.573 seconds (JVM running for 76.534)
يمكنك الوصول إلى تطبيق Spring TODO محليا باستخدام هذا الارتباط بمجرد بدء تشغيل التطبيق: http://localhost:8080/
.
إذا رأيت استثناءات بدلا من رسالة "Started TodoApplication"، فتحقق من أن bash
البرنامج النصي في الخطوة السابقة قام بتصدير متغيرات البيئة بشكل صحيح وأن القيم صحيحة لقاعدة بيانات Azure Cosmos DB التي قمت بإنشائها.
تكوين توزيع Azure
افتح ملف pom.xml
في initial/spring-boot-todo
وأضف التكوين التالي Azure Web App Plugin for Maven.
<plugins>
<!--*************************************************-->
<!-- Deploy to Java SE in App Service Linux -->
<!--*************************************************-->
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.5.0</version>
<configuration>
<schemaVersion>v2</schemaVersion>
<!-- Web App information -->
<resourceGroup>${RESOURCEGROUP_NAME}</resourceGroup>
<appName>${WEBAPP_NAME}</appName>
<region>${REGION}</region>
<pricingTier>P1v2</pricingTier>
<!-- Java Runtime Stack for Web App on Linux-->
<runtime>
<os>linux</os>
<javaVersion>Java 8</javaVersion>
<webContainer>Java SE</webContainer>
</runtime>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
<appSettings>
<property>
<name>COSMOSDB_URI</name>
<value>${COSMOSDB_URI}</value>
</property>
<property>
<name>COSMOSDB_KEY</name>
<value>${COSMOSDB_KEY}</value>
</property>
<property>
<name>COSMOSDB_DBNAME</name>
<value>${COSMOSDB_DBNAME}</value>
</property>
<property>
<name>JAVA_OPTS</name>
<value>-Dserver.port=80</value>
</property>
</appSettings>
</configuration>
</plugin>
...
</plugins>
انشر في App Service على Linux
mvn azure-webapp:deploy
استخدم هدف Maven لنشر تطبيق TODO إلى Azure App Service على Linux.
# Deploy
bash-3.2$ mvn azure-webapp:deploy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-todo-app 2.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- azure-webapp-maven-plugin:2.5.0:deploy (default-cli) @ spring-todo-app ---
Auth Type: AZURE_CLI
Default subscription: xxxxxxxxx
Username: xxxxxxxxx
[INFO] Subscription: xxxxxxxxx
[INFO] Creating App Service Plan 'ServicePlanb6ba8178-5bbb-49e7'...
[INFO] Successfully created App Service Plan.
[INFO] Creating web App spring-todo-app...
[INFO] Successfully created Web App spring-todo-app.
[INFO] Trying to deploy artifact to spring-todo-app...
[INFO] Successfully deployed the artifact to https://spring-todo-app.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:19 min
[INFO] Finished at: 2019-11-06T15:32:03-07:00
[INFO] Final Memory: 50M/574M
[INFO] ------------------------------------------------------------------------
يحتوي الإخراج على عنوان URL للتطبيق المنشور (في هذا المثال، https://spring-todo-app.azurewebsites.net
). يمكنك نسخ عنوان URL هذا إلى مستعرض الويب أو تشغيل الأمر التالي في نافذة الوحدة الطرفية لتحميل التطبيق.
explorer https://spring-todo-app.azurewebsites.net
يجب أن تشاهد التطبيق قيد التشغيل باستخدام عنوان URL في شريط العناوين:
دفق سجلات التشخيص
للوصول إلى سجلات وحدة التحكم التي تم إنشاؤها من داخل التعليمة البرمجية للتطبيق في خدمة التطبيقات، قم بتشغيل تسجيل التشخيص عن طريق تشغيل الأمر التالي في 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
.
توسيع نطاق تطبيق TODO
قم بتوسيع نطاق التطبيق بإضافة عامل آخر:
az appservice plan update --number-of-workers 2 \
--name ${WEBAPP_PLAN_NAME} \
--resource-group <your-azure-group-name>
تنظيف الموارد
إذا لم تكن بحاجة إلى هذه الموارد لبرنامج تعليمي آخر (راجع الخطوات التالية)، يمكنك حذفها عن طريق تشغيل الأمر التالي في Cloud Shell:
az group delete --name <your-azure-group-name> --yes
الخطوات التالية
Azure لمطوريJava Spring Boot وSpring Data ل Azure Cosmos DB وAzure Cosmos DB وApp Service Linux.
تعرّف على المزيد حول تشغيل تطبيقات Java على خدمة التطبيقات على Linux في دليل المطور.
تعرف على كيفية تأمين تطبيقك باستخدام مجال وشهادة مخصصين.