نشر تطبيق 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.