إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
توفر Azure Container Apps هوية مدارة لتطبيقك، وهو حل تسليم المفتاح لتأمين الوصول إلى قاعدة بيانات Azure ل PostgreSQL وخدمات Azure الأخرى. تجعل الهويات المدارة في Container Apps تطبيقك أكثر أمانا من خلال التخلص من الأسرار من تطبيقك، مثل بيانات الاعتماد في متغيرات البيئة.
يرشدك هذا البرنامج التعليمي خلال عملية إنشاء تطبيقات حاوية Java وتكوينها ونشرها وتوسيع نطاقها على Azure. في نهاية هذا البرنامج التعليمي، لديك تطبيق Quarkus يخزن البيانات في قاعدة بيانات PostgreSQL مع هوية مدارة تعمل على Container Apps.
ما تتعلمه:
- تكوين تطبيق Quarkus للمصادقة باستخدام معرف Microsoft Entra مع قاعدة بيانات PostgreSQL.
- إنشاء مثيل Azure Container Registry ودفع صورة تطبيق Java إليه.
- إنشاء تطبيق حاوية في Azure.
- إنشاء قاعدة بيانات PostgreSQL في Azure.
- الاتصال بقاعدة بيانات PostgreSQL بهوية مدارة باستخدام Service Connector.
إذا لم يكن لديك حساب Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.
1. المتطلبات الأساسية
- إصدار Azure CLI 2.45.0 أو أعلى.
- بوابه
- جافا JDK
- مخضرم
-
Docker
2. إنشاء سجل حاوية
أنشئ مجموعة موارد باستخدام الأمر az group create. مجموعة موارد Azure هي حاوية منطقية يتم بها نشر موارد Azure وإدارتها.
ينشئ المثال التالي مجموعة موارد باسم myResourceGroup في منطقة Azure شرق الولايات المتحدة.
RESOURCE_GROUP="myResourceGroup"
LOCATION="eastus"
az group create --name $RESOURCE_GROUP --location $LOCATION
إنشاء مثيل Azure Container Registry باستخدام الأمر az acr create واسترداد خادم تسجيل الدخول الخاص به باستخدام الأمر az acr show . يجب أن يكون اسم التسجيل فريداً داخل Azure وأن يحتوي على 5-50 حرفاً أبجدياً رقمياً. يجب تحديد كافة الأحرف بأحرف صغيرة. في المثال التالي، mycontainerregistry007 يتم استخدام. قم بتحديث هذا إلى قيمة فريدة.
REGISTRY_NAME=mycontainerregistry007
az acr create \
--resource-group $RESOURCE_GROUP \
--name $REGISTRY_NAME \
--sku Basic
REGISTRY_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv | tr -d '\r')
3. استنساخ نموذج التطبيق وإعداد صورة الحاوية
يستخدم هذا البرنامج التعليمي نموذجًا لتطبيق قائمة Fruits مع واجهة مستخدم ويب تستدعي واجهة برمجة تطبيقات Quarkus REST المدعومة بقاعدة بيانات Azure لـ PostgreSQL. تتوفر التعليمات البرمجية للتطبيق على GitHub. لمعرفة المزيد حول كتابة تطبيقات Java باستخدام Quarkus وPostgreSQL، راجع Quarkus Hibernate ORM مع دليل Panache ودليل مصدر بيانات Quarkus.
قم بتشغيل الأوامر التالية في الوحدة الطرفية الخاصة بك لاستنساخ عينة الريبو وإعداد بيئة نموذج التطبيق.
git clone https://github.com/quarkusio/quarkus-quickstarts
cd quarkus-quickstarts/hibernate-orm-panache-quickstart
تعديل مشروعك
أضف التبعيات المطلوبة إلى ملف POM الخاص بمشروعك.
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity-extensions</artifactId> <version>1.2.0</version> </dependency>تكوين خصائص تطبيق Quarkus.
يوجد تكوين Quarkus في ملف src/main/resources/application.properties . افتح هذا الملف في محرر النص، ولاحظ العديد من الخصائص الافتراضية. لا تُستخدم الخصائص المسبوقة بـ
%prodإلا عندما يتم إنشاء التطبيق ونشره، على سبيل المثال عند نشره في Azure App Service. عند تشغيل التطبيق محليًا، يتم تجاهل خصائص%prod. وبالمثل، يتم استخدام خصائص%devفي وضع الترميز / التطوير المباشر الخاص بـ Quarkus، ويتم استخدام خصائص%testأثناء الاختبار المستمر.احذف المحتوى الموجود في application.properties واستبدل ما يلي لتكوين قاعدة البيانات لأوضاع التطوير والاختبار والإنتاج:
quarkus.hibernate-orm.database.generation=drop-and-create quarkus.datasource.db-kind=postgresql quarkus.datasource.jdbc.max-size=8 quarkus.datasource.jdbc.min-size=2 quarkus.hibernate-orm.log.sql=true quarkus.hibernate-orm.sql-load-script=import.sql quarkus.datasource.jdbc.acquisition-timeout = 10 %dev.quarkus.datasource.username=${CURRENT_USERNAME} %dev.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\ authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\ &sslmode=require %prod.quarkus.datasource.username=${AZURE_POSTGRESQL_USERNAME} %prod.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\ authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\ &sslmode=require %dev.quarkus.class-loading.parent-first-artifacts=com.azure:azure-core::jar,\ com.azure:azure-core-http-netty::jar,\ io.projectreactor.netty:reactor-netty-core::jar,\ io.projectreactor.netty:reactor-netty-http::jar,\ io.netty:netty-resolver-dns::jar,\ io.netty:netty-codec::jar,\ io.netty:netty-codec-http::jar,\ io.netty:netty-codec-http2::jar,\ io.netty:netty-handler::jar,\ io.netty:netty-resolver::jar,\ io.netty:netty-common::jar,\ io.netty:netty-transport::jar,\ io.netty:netty-buffer::jar,\ com.azure:azure-identity::jar,\ com.azure:azure-identity-extensions::jar,\ com.fasterxml.jackson.core:jackson-core::jar,\ com.fasterxml.jackson.core:jackson-annotations::jar,\ com.fasterxml.jackson.core:jackson-databind::jar,\ com.fasterxml.jackson.dataformat:jackson-dataformat-xml::jar,\ com.fasterxml.jackson.datatype:jackson-datatype-jsr310::jar,\ org.reactivestreams:reactive-streams::jar,\ io.projectreactor:reactor-core::jar,\ com.microsoft.azure:msal4j::jar,\ com.microsoft.azure:msal4j-persistence-extension::jar,\ org.codehaus.woodstox:stax2-api::jar,\ com.fasterxml.woodstox:woodstox-core::jar,\ com.nimbusds:oauth2-oidc-sdk::jar,\ com.nimbusds:content-type::jar,\ com.nimbusds:nimbus-jose-jwt::jar,\ net.minidev:json-smart::jar,\ net.minidev:accessors-smart::jar,\ io.netty:netty-transport-native-unix-common::jar,\ net.java.dev.jna:jna::jar
إنشاء صورة Docker ودفعها إلى سجل الحاوية
بناء صورة الحاوية.
قم بتشغيل الأمر التالي لإنشاء صورة تطبيق Quarkus. يجب وضع علامة عليه بالاسم المؤهل بالكامل لخادم تسجيل الدخول إلى السجل.
CONTAINER_IMAGE=${REGISTRY_SERVER}/quarkus-postgres-passwordless-app:v1 mvn quarkus:add-extension -Dextensions="container-image-jib" mvn clean package -Dquarkus.container-image.build=true -Dquarkus.container-image.image=${CONTAINER_IMAGE}تسجيل الدخول إلى السجل.
قبل دفع صور الحاوية، يجب تسجيل الدخول إلى السجل. للقيام بذلك، استخدم الأمر [az acr login][az-acr-login].
az acr login --name $REGISTRY_NAMEيقوم الأمر بإرجاع رسالة
Login Succeededبمجرد اكتمالها.ادفع الصورة إلى السجل.
استخدم
docker pushلدفع الصورة إلى مثيل السجل. ينشئquarkus-postgres-passwordless-appهذا المثال المستودع، الذيquarkus-postgres-passwordless-app:v1يحتوي على الصورة.docker push $CONTAINER_IMAGE
4. إنشاء تطبيق حاوية على Azure
إنشاء مثيل Container Apps عن طريق تشغيل الأمر التالي. تأكد من استبدال قيمة متغيرات البيئة بالاسم الفعلي والموقع الذي تريد استخدامه.
CONTAINERAPPS_ENVIRONMENT="my-environment" az containerapp env create \ --resource-group $RESOURCE_GROUP \ --name $CONTAINERAPPS_ENVIRONMENT \ --location $LOCATIONإنشاء تطبيق حاوية باستخدام صورة التطبيق الخاص بك عن طريق تشغيل الأمر التالي:
APP_NAME=my-container-app az containerapp create \ --resource-group $RESOURCE_GROUP \ --name $APP_NAME \ --image $CONTAINER_IMAGE \ --environment $CONTAINERAPPS_ENVIRONMENT \ --registry-server $REGISTRY_SERVER \ --registry-identity system \ --ingress 'external' \ --target-port 8080 \ --min-replicas 1إشعار
لا تزال الخيارات
--registry-usernameو--registry-passwordمدعومة ولكن لا يوصى بها لأن استخدام نظام الهوية أكثر أمانا.
5. إنشاء قاعدة بيانات PostgreSQL وتوصيلها باتصال الهوية
بعد ذلك، قم بإنشاء قاعدة بيانات PostgreSQL وتكوين تطبيق الحاوية للاتصال بقاعدة بيانات PostgreSQL بهوية مدارة معينة من قبل النظام. يتصل تطبيق Quarkus بقاعدة البيانات هذه ويخزن بياناته عند التشغيل، مع استمرار حالة التطبيق بغض النظر عن مكان تشغيل التطبيق.
إنشاء خدمة قاعدة البيانات.
DB_SERVER_NAME='msdocs-quarkus-postgres-webapp-db' az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ --name $DB_SERVER_NAME \ --location $LOCATION \ --public-access None \ --sku-name Standard_B1ms \ --tier Burstable \ --active-directory-auth Enabledإشعار
لا تزال الخيارات
--admin-userو--admin-passwordمدعومة ولكن لا يوصى بها لأن استخدام نظام الهوية أكثر أمانا.يتم استخدام المعلمات التالية في أمر Azure CLI المذكور أعلاه:
-
مجموعة الموارد → استخدم نفس اسم مجموعة الموارد الذي أنشأت فيه تطبيق الويب - على سبيل المثال،
msdocs-quarkus-postgres-webapp-rg. -
الاسم → اسم خادم قاعدة بيانات PostgreSQL. يجب أن يكون هذا الاسم فريدًا عبر جميع Azure (تصبح
https://<name>.postgres.database.azure.comنقطة نهاية الخادم ). الأحرف المسموح بها هيA-Zو0-9و-. النمط الجيد هو استخدام مَزيج من اسم شركتك ومُعرف التطبيق. (msdocs-quarkus-postgres-webapp-db) - الموقع → استخدم نفس الموقع المستخدم لتطبيق الويب. قم بالتغيير إلى موقع آخر إذا لم يعمل.
-
الوصول العام→
Noneالذي يعين الخادم في وضع الوصول العام بدون قواعد جدار حماية. يتم إنشاء القواعد في خطوة لاحقة. -
sku-name → اسم مستوى التسعير وتكوين الحساب - على سبيل المثال،
Standard_B1ms. لمزيد من المعلومات، يرجى مراجعة Azure Database for PostgreSQL pricing. - الطبقة → طبقة الحوسبة للخادم. لمزيد من المعلومات، يرجى مراجعة Azure Database for PostgreSQL pricing.
- لتمكين مصادقة Microsoft Entra.
-
مجموعة الموارد → استخدم نفس اسم مجموعة الموارد الذي أنشأت فيه تطبيق الويب - على سبيل المثال،
إنشاء قاعدة بيانات باسم
fruitsضمن خدمة PostgreSQL باستخدام هذا الأمر:DB_NAME=fruits az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $DB_SERVER_NAME \ --database-name $DB_NAMEتثبيت ملحق Service Connector بدون كلمة مرور ل Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade --allow-preview trueقم بتوصيل قاعدة البيانات بتطبيق الحاوية بهوية مدارة معينة من قبل النظام، باستخدام أمر الاتصال.
az containerapp connection create postgres-flexible \ --resource-group $RESOURCE_GROUP \ --name $APP_NAME \ --target-resource-group $RESOURCE_GROUP \ --server $DB_SERVER_NAME \ --database $DB_NAME \ --system-identity \ --container $APP_NAME
6. مراجعة التغييرات التي أجريتها
يمكنك العثور على عنوان URL للتطبيق (FQDN) باستخدام الأمر التالي:
echo https://$(az containerapp show \
--name $APP_NAME \
--resource-group $RESOURCE_GROUP \
--query properties.configuration.ingress.fqdn \
--output tsv)
عندما تعرض صفحة الويب الجديدة قائمة الفواكه، يتصل تطبيقك بقاعدة البيانات باستخدام الهوية المدارة. يجب أن تكون الآن قادرا على تحرير قائمة الفواكه كما كان من قبل.
تنظيف الموارد
في الخطوات السابقة، أنشأت موارد Azure في إحدى مجموعات الموارد. إذا لم تتوقع احتياجك لهذه الموارد في المستقبل، فاحذف مجموعة الموارد من خلال تشغيل الأمر التالي في Cloud Shell:
az group delete --name myResourceGroup
قد يستغرق تشغيل هذا الأمر دقيقة.
الخطوات التالية
تعرف على المزيد حول تشغيل تطبيقات Java على Azure في دليل المطور.