إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يوفر خادم التكوين ل Spring موقعا مركزيا لتوفير بيانات التكوين لتطبيقات متعددة. في هذه المقالة، ستتعلم كيفية توصيل تطبيق مستضاف في Azure Container Apps بخادم تكوين Java لمثيل Spring.
يستخدم مكون Config Server for Spring Java مستودع GitHub كمصدر لإعدادات التكوين. يتم توفير قيم التكوين لتطبيق الحاوية الخاص بك عبر ربط بين المكون تطبيق الحاوية. مع تغير القيم في خادم التكوين، فإنها تتدفق تلقائيا إلى التطبيق الخاص بك، كل ذلك دون مطالبتك بإعادة التحويل البرمجي أو إعادة توزيع التطبيق الخاص بك.
ستتعرف في هذا البرنامج التعليمي على:
- إنشاء خادم تكوين لمكون Spring Java
- ربط خادم التكوين ل Spring بتطبيق الحاوية
- مراقبة قيم التكوين قبل وبعد توصيل خادم التكوين بتطبيقك
- تشفير قيم التكوين وفك تشفيرها باستخدام مفتاح متماثل
هام
يستخدم هذا البرنامج التعليمي الخدمات التي يمكن أن تؤثر على فاتورة Azure. إذا قررت المتابعة خطوة بخطوة، فتأكد من حذف الموارد المميزة في هذه المقالة لتجنب الفوترة غير المتوقعة.
المتطلبات الأساسية
- حساب Azure مع اشتراك نشط. إذا لم يكن لديك حساب بالفعل، يمكنك إنشاء حساب مجانا.
- Azure CLI.
الاعتبارات
عند التشغيل في Config Server for Spring في Azure Container Apps، كن على دراية بالتفاصيل التالية:
| العنصر | الشرح |
|---|---|
| النطاق | يعمل خادم التكوين ل Spring في نفس بيئة تطبيق الحاوية المتصلة. |
| تغيير الحجم | للحفاظ على مصدر واحد للحقيقة، لا يتوسع خادم التكوين ل Spring. يتم تعيين خصائص minReplicas التحجيم و maxReplicas على 1. |
| الموارد | تم إصلاح تخصيص موارد الحاوية لخادم التكوين ل Spring، وعدد الذاكرات الأساسية لوحدة المعالجة المركزية هو 0.5، وحجم الذاكرة هو 1Gi. |
| التسعير | يقع خادم التكوين لفواتير Spring ضمن التسعير المستند إلى الاستهلاك. تتم فوترة الموارد التي تستهلكها مكونات Java المدارة بأسعار نشطة/خبيثة. يمكنك حذف المكونات التي لم تعد قيد الاستخدام لإيقاف الفوترة. |
| الربط | يتصل تطبيق الحاوية بخادم التكوين ل Spring عبر ربط. يقوم الربط بإدخال التكوينات في متغيرات بيئة تطبيق الحاوية. بعد إنشاء ربط، يمكن لتطبيق الحاوية قراءة قيم التكوين من متغيرات البيئة. |
الإعداد
قبل البدء في العمل مع خادم التكوين ل Spring، تحتاج أولا إلى إنشاء الموارد المطلوبة.
-
Azure CLI - مدخل Microsoft Azure
نفذ الأوامر التالية لإنشاء مجموعة الموارد وبيئة Container Apps.
إنشاء متغيرات لدعم تكوين التطبيق الخاص بك. يتم توفير هذه القيم لك لأغراض هذا الدرس.
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export JAVA_COMPONENT_NAME=configserver export APP_NAME=my-config-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-config-client:latest" export URI="https://github.com/Azure-Samples/azure-spring-cloud-config-java-aca.git"المتغير الوصف LOCATIONموقع منطقة Azure حيث تقوم بإنشاء تطبيق الحاوية ومكون Java. ENVIRONMENTاسم بيئة Azure Container Apps لتطبيق العرض التوضيحي الخاص بك. RESOURCE_GROUPاسم مجموعة موارد Azure لتطبيق العرض التوضيحي الخاص بك. JAVA_COMPONENT_NAMEاسم مكون Java الذي تم إنشاؤه لتطبيق الحاوية. في هذه الحالة، يمكنك إنشاء خادم تكوين لمكون Spring Java. IMAGEصورة الحاوية المستخدمة في تطبيق الحاوية. URIيمكنك استبدال URI بعنوان URL الخاص بمستودع Git، إذا كان خاصا، أضف تكوينات المصادقة ذات الصلة مثل spring.cloud.config.server.git.usernameوspring.cloud.config.server.git.password.سجل الدخول إلى Azure باستخدام Azure CLI.
az loginقم بإنشاء مجموعة موارد.
az group create --name $RESOURCE_GROUP --location $LOCATIONإنشاء بيئة تطبيقات الحاوية.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
يتم استخدام هذه البيئة لاستضافة كل من مكون Config Server for Spring java وحاوية التطبيق الخاص بك.
إنشاء مكون خادم التكوين ل Spring Java
الآن بعد أن أصبح لديك بيئة Container Apps، يمكنك إنشاء تطبيق الحاوية الخاص بك وربطه بخادم التكوين لمكون Spring java. عند ربط تطبيق الحاوية، تتم مزامنة قيم التكوين تلقائيا من مكون Config Server إلى التطبيق الخاص بك.
-
Azure CLI - مدخل Microsoft Azure
إنشاء مكون Config Server for Spring Java.
az containerapp env java-component config-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 1 \ --max-replicas 1 \ --configuration spring.cloud.config.server.git.uri=$URIتحديث مكون Config Server ل Spring Java.
az containerapp env java-component config-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 2 \ --max-replicas 2 \ --configuration spring.cloud.config.server.git.uri=$URI spring.cloud.config.server.git.refresh-rate=60هنا، أنت تخبر المكون بمكان العثور على المستودع الذي يحتوي على معلومات التكوين الخاصة بك عبر الخاصية
uri.refresh-rateتخبر الخاصية Container Apps بمدى تكرار التحقق من وجود تغييرات في مستودع Git الخاص بك.
ربط تطبيق الحاوية الخاص بك بخادم التكوين لمكون Spring Java
-
Azure CLI - مدخل Microsoft Azure
إنشاء تطبيق الحاوية الذي يستهلك بيانات التكوين.
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080 \ --query properties.configuration.ingress.fqdnيقوم هذا الأمر بإرجاع عنوان URL لتطبيق الحاوية الذي يستهلك بيانات التكوين. انسخ عنوان URL إلى محرر نص حتى تتمكن من استخدامه في خطوة قادمة.
إذا قمت بزيارة تطبيقك في مستعرض، فإن القيمة التي
connectTimeoutتم إرجاعها هي القيمة الافتراضية ل0.اربط بخادم التكوين ل Spring.
الآن بعد إنشاء تطبيق الحاوية وخادم التكوين، يمكنك ربطهما مع
updateالأمر إلى تطبيق الحاوية الخاص بك.az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $JAVA_COMPONENT_NAME--bind $JAVA_COMPONENT_NAMEتنشئ المعلمة الارتباط بين تطبيق الحاوية ومكون التكوين.
بعد ربط تطبيق الحاوية ومكون Config Server معا، تتم مزامنة تغييرات التكوين تلقائيا مع تطبيق الحاوية.
عند زيارة عنوان URL للتطبيق مرة أخرى، تكون قيمة connectTimeout الآن 10000. تأتي هذه القيمة من مجموعة مستودع Git في المتغير الذي $URI تم تعيينه في الأصل كمصدر لمكون التكوين. على وجه التحديد، يتم سحب هذه القيمة من الخاصية connectionTimeout في ملف application.yml المستودع.
يقوم طلب الربط بإدخال إعداد التكوين في التطبيق كمتغيرات بيئة. تتوفر هذه القيم الآن للتعليمات البرمجية للتطبيق لاستخدامها عند إحضار إعدادات التكوين من خادم التكوين.
في هذه الحالة، تتوفر متغيرات البيئة التالية للتطبيق:
SPRING_CLOUD_CONFIG_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CLOUD_CONFIG_COMPONENT_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CONFIG_IMPORT=optional:configserver:$SPRING_CLOUD_CONFIG_URI
إذا كنت ترغب في تخصيص الخاص SPRING_CONFIG_IMPORTبك ، يمكنك الرجوع إلى متغير SPRING_CLOUD_CONFIG_COMPONENT_URI البيئة - على سبيل المثال، يمكنك تجاوز بواسطة وسيطات سطر الأوامر، مثل Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true.
يمكنك أيضا إزالة ربط من التطبيق الخاص بك.
(اختياري) إلغاء ربط تطبيق الحاوية من مكون Config Server for Spring Java
-
Azure CLI - مدخل Microsoft Azure
لإزالة ربط من تطبيق حاوية، استخدم --unbind الخيار .
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
عند زيارة عنوان URL للتطبيق مرة أخرى، يتم إرجاع قيمة connectTimeout التغييرات إلى 0.
تنظيف الموارد
الموارد التي تم إنشاؤها في هذا البرنامج التعليمي لها تأثير على فاتورة Azure. إذا كنت لن تستخدم هذه الخدمات على المدى الطويل، فقم بتشغيل الأمر التالي لإزالة كل شيء تم إنشاؤه في هذا البرنامج التعليمي.
az group delete --resource-group $RESOURCE_GROUP
خيارات الإعداد
az containerapp update يستخدم الأمر المعلمة --configuration للتحكم في كيفية تكوين خادم التكوين ل Spring. يمكنك استخدام معلمات متعددة في وقت واحد طالما أنها مفصولة بمسافة. لمزيد من المعلومات، راجع خادم تكوين Spring Cloud.
يصف الجدول التالي قيم تكوين الواجهة الخلفية ل Git المختلفة المتوفرة:
| Name | الوصف |
|---|---|
spring.cloud.config.server.git.uri spring.cloud.config.server.git.repos.{repoName}.uri |
URI للمستودع البعيد. |
spring.cloud.config.server.git.username spring.cloud.config.server.git.repos.{repoName}.username |
اسم المستخدم للمصادقة مع المستودع البعيد. |
spring.cloud.config.server.git.password spring.cloud.config.server.git.repos.{repoName}.password |
كلمة المرور للمصادقة مع المستودع البعيد. |
spring.cloud.config.server.git.search-paths spring.cloud.config.server.git.repos.{repoName}.search-paths |
مسارات البحث لاستخدامها ضمن نسخة العمل المحلية. بشكل افتراضي، يبحث في الجذر فقط. |
spring.cloud.config.server.git.force-pull spring.cloud.config.server.git.repos.{repoName}.force-pull |
ضع علامة للإشارة إلى أن المستودع يجب أن يفرض السحب. إذا true، تجاهل أي تغييرات محلية وأخذها من المستودع البعيد. |
spring.cloud.config.server.git.default-label spring.cloud.config.server.git.repos.{repoName}.default-label |
التسمية الافتراضية المستخدمة ل Git رئيسية. إذا لم تقم بتعيين spring.cloud.config.server.git.default-label وفرع يسمى main غير موجود، يحاول خادم التكوين بشكل افتراضي أيضا سحب فرع يسمى الفرع الرئيسي. إذا كنت ترغب في تعطيل سلوك الفرع الاحتياطي، يمكنك تعيين spring.cloud.config.server.git.tryMasterBranch إلى false. |
spring.cloud.config.server.git.try-master-branch spring.cloud.config.server.git.repos.{repoName}.try-master-branch |
يحاول خادم التكوين بشكل افتراضي سحب فرع يسمى master. |
spring.cloud.config.server.git.skip-ssl-validation spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation |
يمكنك تعطيل التحقق من صحة خادم التكوين لشهادة TLS/SSL لخادم Git عن طريق تعيين الخاصية git.skipSslValidation إلى true. |
spring.cloud.config.server.git.clone-on-start spring.cloud.config.server.git.repos.{repoName}.clone-on-start |
ضع علامة للإشارة إلى أنه يجب استنساخ المستودع عند بدء التشغيل، وليس عند الطلب. بشكل عام يؤدي إلى بدء تشغيل أبطأ ولكن استعلام أول أسرع. |
spring.cloud.config.server.git.timeout spring.cloud.config.server.git.repos.{repoName}.timeout |
المهلة بالثوان للحصول على اتصال HTTP أو SSH، إذا كان ذلك ممكنا. قيمة الافتراضية هي 5 ثوانٍ. |
spring.cloud.config.server.git.refresh-rate spring.cloud.config.server.git.repos.{repoName}.refresh-rate |
عدد المرات التي يجلب فيها خادم التكوين بيانات التكوين المحدثة من خلفية Git. |
spring.cloud.config.server.git.private-key spring.cloud.config.server.git.repos.{repoName}.private-key |
مفتاح SSH خاص صالح. يجب تعيين إذا كان ignore-local-ssh-settings هو true وكان Git URI بتنسيق SSH. |
spring.cloud.config.server.git.host-key spring.cloud.config.server.git.repos.{repoName}.host-key |
مفتاح مضيف SSH صالح. يجب تعيين إذا تم host-key-algorithm تعيين أيضا. |
spring.cloud.config.server.git.host-key-algorithm spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm |
واحد من ssh-dssأو ssh-rsassh-ed25519أو ecdsa-sha2-nistp256أو ecdsa-sha2-nistp384أو أو ecdsa-sha2-nistp521. يجب تعيين إذا تم host-key تعيين أيضا. |
spring.cloud.config.server.git.strict-host-key-checking spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking |
true أو false. إذا false، تجاهل الأخطاء باستخدام مفتاح المضيف. |
spring.cloud.config.server.git.repos.{repoName} |
URI للمستودع البعيد. |
spring.cloud.config.server.git.repos.{repoName}.pattern |
تنسيق النمط هو قائمة {application}/{profile} أسماء مفصولة بفواصل مع أحرف بدل. إذا {application}/{profile} لم يتطابق مع أي من الأنماط، فإنه يستخدم URI الافتراضي المحدد ضمن. |
تصف القائمة التالية التكوينات الشائعة:
تسجيل التكوينات ذات الصلة:
logging.level.*logging.group.*- يجب منع أي تكوينات أخرى تحت
logging.*مساحة الاسم - على سبيل المثال، يجب حظر كتابة ملفات السجل باستخدامlogging.file.
spring.cloud.config.server.overrides- خريطة إضافية لمصدر خاصية ليتم إرسالها إلى جميع العملاء دون شروط.
spring.cloud.config.override-none- يمكنك تغيير أولوية جميع التجاوزات في العميل لتكون أكثر مثل القيم الافتراضية، ما يسمح للتطبيقات بتوفير قيمها الخاصة في متغيرات البيئة أو خصائص النظام، عن طريق تعيين العلامة
spring.cloud.config.override-none=true- الافتراضي خطأ - في المستودع البعيد.
- يمكنك تغيير أولوية جميع التجاوزات في العميل لتكون أكثر مثل القيم الافتراضية، ما يسمح للتطبيقات بتوفير قيمها الخاصة في متغيرات البيئة أو خصائص النظام، عن طريق تعيين العلامة
spring.cloud.config.allow-override- إذا قمت بتمكين تمهيد التكوين الأول، يمكنك السماح لتطبيقات العميل بتجاوز التكوين من خادم التكوين عن طريق وضع خاصيتين داخل تكوين التطبيقات القادمة من خادم التكوين.
spring.cloud.config.server.health.*- يمكنك تكوين مؤشر الصحة للتحقق من المزيد من التطبيقات جنبا إلى جنب مع ملفات التعريف المخصصة والتسميات المخصصة.
spring.cloud.config.server.accept-empty- يمكنك التعيين
spring.cloud.config.server.accept-emptyإلىfalseبحيث يقوم الخادم بإرجاع حالة HTTP404إذا لم يتم العثور على التطبيق. بشكل افتراضي، يتم تعيين هذه العلامة إلىtrue.
- يمكنك التعيين
التشفير وفك التشفير (متماثل):
encrypt.key- مناسب عند استخدام مفتاح متماثل لأنه قيمة خاصية واحدة لتكوينها.
spring.cloud.config.server.encrypt.enabled- قم بتعيين هذه الخاصية إلى
falseلتعطيل فك التشفير من جانب الخادم.
- قم بتعيين هذه الخاصية إلى
تحديث
تحتاج الخدمات التي تستهلك الخصائص إلى معرفة التغيير قبل حدوثه. تتضمن طريقة الإعلام الافتراضية لخادم التكوين ل Spring تشغيل حدث التحديث يدويا، مثل التحديث عن طريق استدعاء https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh، والذي قد لا يكون ممكنا إذا كان هناك العديد من مثيلات التطبيق.
بدلا من ذلك، يمكنك تحديث القيم تلقائيا من خادم التكوين عن طريق السماح لاستطلاع عميل التكوين للتغييرات استنادا إلى تحديث داخلي. استخدم الخطوات التالية لتحديث القيم تلقائيا من خادم التكوين:
تسجيل مهمة مجدولة لتحديث السياق في فاصل زمني معين، كما هو موضح في المثال التالي:
@Configuration @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class}) @EnableScheduling public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer { @Value("${spring.cloud.config.refresh-interval:60}") private long refreshInterval; @Value("${spring.cloud.config.auto-refresh:false}") private boolean autoRefresh; private final RefreshEndpoint refreshEndpoint; public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) { this.refreshEndpoint = refreshEndpoint; } @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { if (autoRefresh) { // set minimal refresh interval to 5 seconds refreshInterval = Math.max(refreshInterval, 5); scheduledTaskRegistrar.addFixedRateTask(refreshEndpoint::refresh, Duration.ofSeconds(refreshInterval)); } } }تمكين
autorefreshالفاصل الزمني للتحديث المناسب وتعيينه في ملف application.yml . في المثال التالي، يستقصي العميل تغيير التكوين كل 60 ثانية، وهو الحد الأدنى للقيمة التي يمكنك تعيينها لفاصل زمني للتحديث.بشكل افتراضي،
autorefreshيتم تعيين إلىfalseويتمrefresh-intervalتعيينه إلى 60 ثانية.spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refreshأضف
@RefreshScopeفي التعليمات البرمجية لديك. في المثال التالي، يتم تحديث المتغيرconnectTimeoutتلقائيا كل 60 ثانية:@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
التشفير وفك التشفير باستخدام مفتاح متماثل
فك التشفير من جانب الخادم
بشكل افتراضي، يتم تمكين التشفير من جانب الخادم. استخدم الخطوات التالية لتمكين فك التشفير في التطبيق الخاص بك:
أضف الخاصية المشفرة في ملف .properties في مستودع Git الخاص بك.
يجب أن يشبه الملف المثال التالي:
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282fقم بتحديث مكون Config Server for Spring Java لاستخدام مستودع Git الذي يحتوي على الخاصية المشفرة وتعيين مفتاح التشفير.
قبل تشغيل الأمر التالي، استبدل العناصر النائبة المحيطة
<>بالقيم الخاصة بك.az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> encrypt.key=randomKey
فك التشفير من جانب العميل
يمكنك استخدام فك تشفير العميل للخصائص باتباع الخطوات التالية:
أضف الخاصية المشفرة في ملف .properties في مستودع Git الخاص بك.
قم بتحديث مكون Config Server for Spring Java لاستخدام مستودع Git الذي يحتوي على الخاصية المشفرة وتعطيل فك التشفير من جانب الخادم.
قبل تشغيل الأمر التالي، استبدل العناصر النائبة المحيطة
<>بالقيم الخاصة بك.az containerapp env java-component config-server-for-spring update \ --environment <ENVIRONMENT_NAME> \ --resource-group <RESOURCE_GROUP> \ --name <JAVA_COMPONENT_NAME> \ --configuration spring.cloud.config.server.git.uri=<URI> spring.cloud.config.server.encrypt.enabled=falseفي تطبيق العميل، أضف مفتاح
ENCRYPT_KEY=randomKeyفك التشفير كمتغير بيئة.بدلا من ذلك، إذا قمت بتضمين
spring-cloud-starter-bootstrapعلىclasspath، أو تعيينspring.cloud.bootstrap.enabled=trueكخاصية نظام، فقم بتعيينencrypt.keyفيbootstrap.properties.قبل تشغيل الأمر التالي، استبدل العناصر النائبة المحيطة
<>بالقيم الخاصة بك.az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"encrypt: key: somerandomkey