نشر تطبيق Quarkus إلى Azure Container Apps
في هذه الوحدة، يمكنك إنشاء بيئة Azure Container Apps باستخدام Azure CLI.
إعداد Dockerfile لتطبيق Quarkus
يتم استخدام تطبيقات الحاوية لنشر التطبيقات المعبأة في حاويات. لذلك تحتاج أولا إلى تعبئة تطبيق Quarkus في حاوية في صورة Docker. هذه العملية سهلة لأن المكون الإضافي Quarkus Maven قد أنشأ بالفعل بعض ملفات Dockerfiles ضمن src/main/docker.
استخدم هذا الأمر لإعادة تسمية أحد ملفات Dockerfiles هذه، Dockerfile.jvm، Dockerfile ونقله إلى المجلد الجذر:
mv src/main/docker/Dockerfile.jvm ./Dockerfile
استبدل المحتوى بعد التعليق الطويل في Dockerfile بما يلي:
FROM registry.access.redhat.com/ubi8/openjdk-17:1.18
ENV LANGUAGE='en_US:en'
# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
يتوقع Dockerfile هذا حزمة تطبيق Quarkus كملف quarkus-run.jar. هذا الاسم هو الاسم الافتراضي لتطبيق Quarkus عند حزمه كملف JAR. تحتاج إلى التأكد من حزم تطبيق Quarkus كملف JAR. للقيام بذلك، قم بتشغيل الأمر Maven التالي:
./mvnw package # On Mac or Linux
mvnw.cmd package # On Windows
يحزم هذا الأمر تطبيق Quarkus في ملف JAR وينشئ ملف quarkus-run.jar في مجلد target/quarkus-app.
إنشاء بيئة Container Apps ونشر الحاوية
الآن بعد أن أصبح Dockerfile في الموقع الصحيح، يمكنك إنشاء بيئة Container Apps ونشر الحاوية باستخدام أمر Azure CLI واحد. قم بتشغيل الأمر التالي في جذر المشروع:
az containerapp up \
--name "$AZ_CONTAINERAPP" \
--environment "$AZ_CONTAINERAPP_ENV" \
--location "$AZ_LOCATION" \
--resource-group "$AZ_RESOURCE_GROUP" \
--ingress external \
--target-port 8080 \
--source .
يقوم هذا الأمر بعدة أشياء:
- إنشاء بيئة تطبيقات الحاوية إذا لم تكن موجودة
- إنشاء سجل Azure إذا لم يكن موجودا
- إنشاء مساحة عمل Log Analytics إذا لم تكن موجودة
- إنشاء صورة Docker ودفعها إلى سجل Azure
- نشر صورة Docker إلى بيئة Container Apps
يستغرق الأمر az containerapp up بعض الوقت للتشغيل. يجب أن ترى الإخراج مشابها للآتي:
Using resource group 'rgazure-deploy-quarkus'
Creating ContainerAppEnvironment 'caeazure-deploy-quarkus' in resource group rgazure-deploy-quarkus
No Log Analytics workspace provided.
Generating a Log Analytics workspace with name "workspace-rgazuredeployquarkusEED7"
Creating Azure Container Registry ca001ad52ae7acr in resource group rgazure-deploy-quarkus
Run ID: ca3 was successful after 41s
Creating Containerapp caazure-deploy-quarkus in resource group rgazure-deploy-quarkus
Adding registry password as a secret with name "ca001ad52ae7acrazurecrio-ca001nxc57acr"
Your container app caazure-deploy-quarkus has been created and deployed! Congrats!
التحقق من صحة التوزيع
يمكنك التحقق من نجاح النشر بعدة طرق. أسهل طريقة هي البحث عن مجموعة الموارد الخاصة بك على مدخل Azure. يجب أن تشاهد موارد مشابهة للآتي:
يمكنك أيضا التحقق من التوزيع عن طريق تشغيل الأمر التالي. يسرد كافة الموارد التي تم إنشاؤها بواسطة الأمر az containerapp up.
az resource list \
--location "$AZ_LOCATION" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
يجب أن ترى الإخراج مشابها لهذا:
Name ResourceGroup Location Type Status
---------------------------------- ---------------------- ---------- ----------------------------------------- --------
caea3a6e0afeacr rgazure-deploy-quarkus eastus Microsoft.ContainerRegistry/registries
psqlazure-deploy-quarkus rgazure-deploy-quarkus eastus Microsoft.DBforPostgreSQL/flexibleServers
caazure-deploy-quarkus rgazure-deploy-quarkus eastus Microsoft.App/containerApps
caeazure-deploy-quarkus rgazure-deploy-quarkus eastus Microsoft.App/managedEnvironments
workspace-rgazuredeployquarkuscDD3 rgazure-deploy-quarkus eastus Microsoft.OperationalInsights/workspaces
تحقق من التطبيق المنشور
يمكنك الآن التحقق من التطبيق المنشور. أولا، تحتاج إلى الحصول على عنوان URL للتطبيق. يمكنك الحصول عليه عن طريق تشغيل الأمر التالي:
export AZ_APP_URL=$(
az containerapp show \
--name "$AZ_CONTAINERAPP" \
--resource-group "$AZ_RESOURCE_GROUP" \
--query "properties.configuration.ingress.fqdn" \
--output tsv \
)
echo "AZ_APP_URL=$AZ_APP_URL"
التطبيق الخاص بك جاهز في https://<app-name>.azurecontainerapps.io/. لاحظ بروتوكول https. يتم استخدام هذا البروتوكول لأنه يتم نشر التطبيق مع شهادة TLS. لاختبار التطبيق، يمكنك استخدام cURL:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"Configuration","details":"Congratulations, you have set up your Quarkus application correctly!","done": "true"}' \
https://$AZ_APP_URL/api/todos
استرداد البيانات باستخدام طلب cURL جديد:
curl https://$AZ_APP_URL/api/todos
يقوم هذا الأمر بإرجاع قائمة بجميع العناصر to-do من قاعدة البيانات:
[
{
"description" : "Take Quarkus MS Learn",
"details" : "Take the MS Learn on deploying Quarkus to Azure Container Apps",
"done" : true,
"id" : 1
},
{
"description" : "Take Azure Container MS Learn",
"details" : "Take the ACA Learn module",
"done" : false,
"id" : 2
},
{
"description" : "Configuration",
"details" : "Congratulations, you have set up your Quarkus application correctly!",
"done" : true,
"id" : 3
}
]
إذا قمت بتشغيل هذا الأمر، يمكنك دفق سجلات الحاوية الخاصة بك عند إنشاء المهام الجديدة:
az containerapp logs show \
--name "$AZ_CONTAINERAPP" \
--resource-group "$AZ_RESOURCE_GROUP" \
--follow
تشغيل المزيد من أوامر cURL. يجب أن تشاهد سجلات التمرير في المحطة الطرفية.
curl https://$AZ_APP_URL/api/todos
ملاحظه
يمكنك أيضا فتح عنوان URL في مستعرض ويب لإرجاع قائمة عناصر to-do.