AWS CLI

  • تشغيل AWS CLI على Cygwin: الحلول والتحديات

    عندما تقوم بتثبيت برنامج AWS CLI على نظام التشغيل Windows 10 باستخدام بيئة Cygwin، قد تواجه بعض التحديات في تشغيل الأوامر بشكل صحيح. الخطأ الذي تواجهه يشير إلى مشكلة في التفسير (Interpretation) لمسار البرنامج. يبدو أن الـ interpreter لا يستطيع العثور على الملف الذي يحتوي على الأمر الذي تحاول تشغيله.

    الخطأ الذي تتلقاه يوحي بأنه تم تفسير المسار الخاص بـ AWS CLI بشكل غير صحيح، حيث يعتبر جزءًا من المسار كجزء من اسم البرنامج بدلاً من أن يتم فهمه كمسار منفصل. هذا قد يكون ناتجًا عن الفراغات الموجودة في المسار.

    لحل هذه المشكلة، يجب تحديد المسار بشكل صحيح في نظام التشغيل Cygwin. يمكنك القيام بذلك باستخدام علامات التنصيص (quotes) حول المسار عند استدعاء الأمر. على سبيل المثال، بدلاً من كتابة:

    bash
    aws

    يمكنك تجربة كتابة:

    bash
    "/cygdrive/c/Program Files/Anaconda2/Scripts/aws"

    هذا يضمن أن تتم قراءة المسار بشكل صحيح، بما في ذلك أي فراغات موجودة في المسار.

    إذا استمرت المشكلة، يمكنك أيضًا التحقق من تكوينات التثبيت الخاصة بـ AWS CLI والتأكد من أن المسارات المحددة فيها صحيحة. قد تحتاج أيضًا إلى التحقق من أن البرنامج تم تثبيته بشكل صحيح وفقًا لتوجيهات التثبيت الخاصة بـ Cygwin.

    باستخدام هذه الخطوات، يجب أن تتمكن من تشغيل AWS CLI بنجاح على نظام التشغيل Cygwin الخاص بك دون وجود أي مشكلات.

    المزيد من المعلومات

    بعد معالجة الخطأ الذي تواجهه في تشغيل AWS CLI على نظام التشغيل Cygwin، يمكن أن تواجه بعض المشكلات الإضافية التي تحتاج إلى تصحيح. من بين هذه المشكلات، قد تواجه صعوبة في تكوين AWS CLI بشكل صحيح للوصول إلى الخدمات السحابية واستخدامها بفعالية.

    أولاً، يجب التأكد من أن لديك اعتمادات (credentials) صحيحة للوصول إلى حسابك على AWS. يمكنك تكوين اعتمادات الوصول عن طريق إنشاء ملف credentials في دليل .aws الخاص بك. يمكنك القيام بذلك يدويًا أو باستخدام أمر aws configure. يتيح لك هذا الأمر إدخال معلومات اعتمادك مثل مفتاح الوصول (Access Key) والمفتاح السري (Secret Key) والمنطقة (Region) المفضلة.

    ثانيًا، يجب التأكد من تثبيت الأدوات الإضافية التي قد تحتاجها لتشغيل AWS CLI بشكل كامل. على سبيل المثال، إذا كنت تخطط لاستخدام S3 لتخزين الملفات، فقد تحتاج إلى تثبيت برنامج s3cmd لتسهيل العمليات المتعلقة بتحميل وتنزيل الملفات من وإلى S3.

    ثالثًا، يمكنك استكشاف وتعلم مزيد من الأوامر والخيارات المتاحة في AWS CLI من خلال الوثائق الرسمية لأمازون. تحتوي هذه الوثائق على أمثلة وتفاصيل حول كيفية استخدام الأوامر لإدارة موارد AWS بفعالية.

    أخيرًا، يمكنك البحث عن المجتمعات والمنتديات عبر الإنترنت للحصول على مساعدة إضافية في حال واجهت مشكلات أخرى في استخدام AWS CLI مع Cygwin. قد تجد أن هناك مستخدمين آخرين قد واجهوا مشاكل مماثلة ويمكنهم تقديم نصائح قيمة لمساعدتك في حل المشكلات.

    باستخدام هذه الخطوات والموارد المتاحة، يجب أن تكون قادرًا على استخدام AWS CLI بنجاح على نظام التشغيل Cygwin الخاص بك والوصول إلى خدمات AWS بسهولة وفعالية.

  • Get Public IP Address EC2

    للحصول على عنوان IP العام للمثيل الحالي EC2 على AWS باستخدام سطر الأوامر في نظام التشغيل Linux أو macOS ، يمكنك استخدام الأمر التالي:

    bash
    curl http://checkip.amazonaws.com

    سيُعيد هذا الأمر العنوان IP العام الخاص بالمثيل EC2 الحالي كسلسلة نصية بسيطة.

    إذا كنت تستخدم Windows ، يمكنك استخدام أمر PowerShell لجلب عنوان IP العام كما يلي:

    powershell
    Invoke-RestMethod -Uri http://checkip.amazonaws.com

    سيعود هذا الأمر بالنتيجة نفسها، أي عنوان IP العام للمثيل EC2 الحالي كسلسلة نصية.

    يرجى ملاحظة أن هذه الطريقة تفترض أن لديك إمكانية الوصول إلى الإنترنت من المثيل EC2 الحالي.

    المزيد من المعلومات

    بالطبع! عندما تقوم بتشغيل Amazon EC2 instance، يتم تخصيص عنوان IP خاص (Private IP) للتواصل داخل الشبكة الافتراضية الخاصة بك في AWS، بينما يتم تخصيص عنوان IP عام (Public IP) للتواصل من الإنترنت. يمكنك الحصول على العنوان العام لمثيل EC2 الخاص بك بعدة طرق، منها استخدام AWS CLI أو الاستعلام عنه من داخل المثيل نفسه.

    عند استخدام AWS CLI، يمكنك استخدام الأمر describe-instances للحصول على تفاصيل حول المثيل الحالي، بما في ذلك عنوان الـ Public IP. ولكن إذا كنت تريد فقط الحصول على الـ Public IP بدون JSON response، يمكنك استخدام الأمر التالي:

    bash
    aws ec2 describe-instances --query "Reservations[*].Instances[*].PublicIpAddress" --output text

    هذا الأمر يسترجع الـ Public IP كسلسلة نصية بسيطة.

    يمكنك أيضًا الحصول على الـ Public IP من داخل المثيل EC2 نفسه، بإجراء طلب HTTP إلى http://checkip.amazonaws.com كما ذكرت في الرد السابق.

  • تحديث تاريخ انتهاء صلاحية محتوى S3 باستخدام AWS CLI

    لتحديث دورة حياة الكائنات في سلة S3 باستخدام AWS CLI، يمكنك استخدام خيار --expires مع أمر cp أو sync. لكن، يجب أن تكون على علم بأنه لا يمكنك تحديد تاريخ انتهاء صلاحية المحتوى الذي تم تحميله مباشرة عن طريق هذا الأمر. يمكنك فقط تحديث الوقت الذي يتم فيه الكائن الذي تم تحميله من الطلبات الجديدة.

    إذا كنت ترغب في إضافة تاريخ انتهاء صلاحية للمحتوى المحمل، يمكنك استخدام خيار --metadata-directive REPLACE لتحديث الوصف الوثيقي للكائن وتضمين تاريخ انتهاء صلاحيته.

    التنسيق الصحيح لتاريخ الانتهاء هو “يوم، يوم الشهر سنة الساعة: الدقيقة: الثانية غرينتش” (مثال: “Thu, 01 Dec 2022 12:00:00 GMT”). يمكنك تحديد تاريخ انتهاء صلاحية المحتوى المحمل باستخدام خيار --metadata مع تحديد المفتاح “Expires” وقيمتها المناسبة.

    إليك مثال على كيفية تحديث التاريخ الذي تم تحميله باستخدام الأمر cp:

    bash
    aws s3 cp s3://bucket-name/object-key s3://bucket-name/object-key --metadata '{"Expires":"Thu, 01 Dec 2022 12:00:00 GMT"}' --metadata-directive REPLACE

    يرجى استبدال “bucket-name” و “object-key” بالقيم الفعلية للدليل والمفتاح الخاص بالكائن الذي ترغب في تحديثه.

    للمزيد من المعلومات، يمكنك الاطلاع على وثائق AWS CLI حول تحديث الوصف الوثيقي لكائن S3.

    المزيد من المعلومات

    يمكنك استخدام خيار --expires مع أمر cp لتحديث دورة حياة الكائنات في سلة S3. يعتمد تنسيق تاريخ الانتهاء على تنسيق تاريخ HTTP، حيث يجب أن يكون بالصيغة التالية: “Wdy, DD Mon YYYY HH:MM:SS GMT”، على سبيل المثال “Sun, 12 Feb 2023 06:00:00 GMT”.

    ومع ذلك، يُفضل استخدام خيار --metadata-directive بقيمة REPLACE لتحديث الوصف الوثيقي لكائن S3 بما في ذلك تاريخ الانتهاء. يمكنك استخدام الأمر التالي كمثال:

    bash
    aws s3 cp s3://bucket-name/object-key s3://bucket-name/object-key --expires "Sun, 12 Feb 2023 06:00:00 GMT" --metadata-directive REPLACE

    يرجى استبدال “bucket-name” و “object-key” بالقيم الفعلية لاسم السلة ومفتاح الكائن الذي ترغب في تحديثه.

  • تكامل Travis CI مع AWS CLI لنشر التطبيقات بكفاءة

    في عملية نشر التطبيقات باستخدام منصة Travis CI، يعتبر تكوين AWS CLI أمرًا أساسيًا لتحقيق السير الآلي لعملية النشر عبر الخدمات السحابية لأمازون. تواجه العديد من المطورين تحدياً عند محاولة تكوين AWS CLI داخل بيئة Travis CI، حيث يتوقف البرنامج ويطلب إدخال المستخدم عند تنفيذ الأمر aws configure.

    لتجنب هذا التأخير وتحقيق التكامل السلس مع Travis CI، يجب تجاوز هذه الخطوة اليدوية باستخدام البيئة الآلية المتاحة للأوامر البرمجية. يمكن تحقيق ذلك عن طريق تعيين المتغيرات البيئية مباشرة في سياق Travis CI.

    لتحقيق هذا الهدف، يمكنك تعديل ملف .travis.yml الخاص بك على النحو التالي:

    yaml
    before_deploy: - 'curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"' - 'unzip awscli-bundle.zip' - './awscli-bundle/install -b ~/bin/aws' - 'export PATH=~/bin:$PATH' - 'echo -e "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID\nAWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY\nAWS_DEFAULT_REGION=$AWS_DEFAULT_REGION" > ~/.aws/credentials'

    في هذا النص، تم إنشاء ملف ~/.aws/credentials بواسطة أمر echo وتم تحديد قيم المتغيرات البيئية داخله. وهذا يمنح AWS CLI الإشارات اللازمة للتحقق من الهوية والوصول إلى الخدمات.

    مع هذه التعديلات، يجب أن تكون عملية النشر أكثر تلقائية وتجنب التوقف عند تنفيذ أمر aws configure. بالتالي، يمكنك الآن الاستمتاع بتكامل Travis CI مع AWS CLI دون الحاجة إلى تدخل يدوي.

    المزيد من المعلومات

    للتأكيد على الفهم وتوفير مزيد من التفاصيل، يمكننا استكمال الشرح حول الخطوات التي تم اتخاذها في الملف .travis.yml وتحسين العمليات الأوتوماتيكية لضمان نجاح عملية النشر.

    بعد تكوين AWS CLI باستخدام الملف ~/.aws/credentials، يمكنك إجراء الخطوات التالية في الملف .travis.yml:

    yaml
    deploy: provider: script script: - 'aws s3 sync s3:///' on: branch:

    حيث يمثل المسار المحلي للملفات التي تريد نشرها، و هو اسم دلو S3 الخاص بك، و هو المسار الذي تريد نشر الملفات إليه على S3. كما يمكنك تحديد لتحديد الفرع الذي عندما يتم الدمج فيه يتم تشغيل عملية النشر.

    يتم استخدام aws s3 sync لنقل الملفات بشكل فعّال إلى دلو S3 بناءً على التغييرات. ولتوفير مزيد من التأمين، يمكنك استخدام أمان AWS عند تخزين مفاتيح الوصول في Travis CI. يمكنك إعداد المتغيرات البيئية في واجهة Travis CI واستخدامها في الملف .travis.yml بشكل آمن.

    باستخدام هذه الخطوات، يصبح بإمكانك تحقيق عملية نشر سلسة وآمنة لتطبيقك باستخدام Travis CI وAWS CLI. يجمع هذا التكامل بين الأدوات لتحقيق السير الآلي لتطوير ونشر التطبيقات بشكل فعّال وموثوق.

  • حلول أخطاء Elastic Beanstalk: إدارة إصدارات التطبيقات وتحسين النشر

    عند استخدام أداة Elastic Beanstalk Command Line Interface (EB CLI) لنشر تطبيق في بيئة AWS، قد تواجه بعض المشاكل التي تتطلب فحصاً دقيقاً للتحديد والحل. يبدو أنك تواجه خطأ يشير إلى وجود إصدار غير صحيح للتطبيق على جميع الخوادم.

    قد يكون الحل في تنظيف الإصدارات السابقة للتطبيقات على الخوادم وتحميل إصدار جديد. يمكنك استخدام أمر “eb cleanup” لحذف الإصدارات القديمة. قبل تنفيذ هذا الأمر، تأكد من أنك على دراية بالتأثيرات المحتملة له على بيئتك.

    bash
    eb cleanup

    بالإضافة إلى ذلك، يمكنك تجربة استخدام الأمر “eb deploy” بشكل متكرر للتأكد من رفع الإصدار الصحيح وتحديث البيئة بشكل صحيح. يمكنك أيضاً تحديد الإصدار الذي تريد استخدامه عند استخدام “eb deploy” باستخدام الخيار “-l” مع تحديد رقم الإصدار.

    bash
    eb deploy -l

    إذا استمرت المشكلة، يفضل مراجعة وثائق استكشاف الأخطاء التي تظهر في الرسالة التي تلي عملية التحديث. يمكن أن تقدم هذه الوثائق توجيهات إضافية حول كيفية التعامل مع مشكلات محددة.

    بخصوص حذف ملفات السجلات، يفضل فحص إعدادات Elastic Beanstalk الخاصة بك للتحقق مما إذا كان هناك أي إعداد يؤدي إلى حذف ملفات السجلات، ويمكنك أيضاً النظر في تحديث تكوينات السجلات للتحكم في هذا السلوك.

    تذكر دائماً أن تحتفظ بنسخ احتياطية قبل تنفيذ أي تغييرات كبيرة على بيئتك، وذلك لتجنب فقدان البيانات أو حدوث مشاكل غير متوقعة.

    المزيد من المعلومات

    لفهم الخطأ الذي تواجهه أثناء استخدام Elastic Beanstalk وتحسين عملية النشر، يمكن التعمق في بعض المفاهيم والتحقق من الخطوات المحتملة لحل المشكلة.

    أولاً وقبل كل شيء، يجب فهم أن Elastic Beanstalk يقوم بتتبع الإصدارات المستخدمة في بيئتك. يتوقع النظام وجود إصدار معين يتم تحديده في كل طلب نشر جديد. في حالة عدم تطابق الإصدارات المتوقعة مع الإصدارات المثبتة على الخوادم، يظهر الخطأ الذي تشير إليه.

    تأكد من أنك تستخدم EB CLI الإصدار الأحدث لتجنب أخطاء تحديث البيئة. يمكنك تحديث EB CLI باستخدام الأمر التالي:

    bash
    pip install --upgrade awsebcli

    ثم قم بتسجيل الدخول إلى إدارة Elastic Beanstalk عبر متصفح الويب لديك وتحقق من تكوينات بيئتك. اطلع على علامات التبويب المختلفة، بما في ذلك “Configurations” و “Software”، للتحقق من أن الإصدار الذي تحاول نشره يتوافق مع متطلبات تطبيقك.

    يمكن أيضاً تحليل ملفات السجلات لفهم سبب الخطأ بشكل أفضل. يمكنك العثور على ملفات السجلات في وحدة التخزين المؤقت /var/log/eb-activity.log على كل خادم. قم بتحليل هذه الملفات لاكتشاف أي رسائل خطأ إضافية أو أدلة تساعد في تحديد المشكلة.

    في حالة استمرار المشكلة، يفضل التحقق من تكوينات AWS Elastic Beanstalk ومستوى الوصول للتأكد من أن لديك الصلاحيات الكافية لتنفيذ عمليات النشر والتحديث.

    من المهم أيضاً مراعاة أي تكامل أو اعتماد خاص بتطبيقك مع Elastic Beanstalk، والتحقق من توافق الإصدارات والتبادل مع مجتمع AWS أو المنتديات للحصول على مساعدة إضافية.

    باختصار، تحتاج إلى فحص الخطوات المتبعة لنشر التطبيق، التحقق من تكوينات Elastic Beanstalk، تحليل ملفات السجلات، والتأكد من أن لديك الصلاحيات الكافية. بتوخي الدقة في هذه الخطوات، يمكنك حل المشكلة وتحسين عملية نشر التطبيق على AWS Elastic Beanstalk.

  • حل مشكلة Access Denied: دليل لتحميل الملفات بنجاح إلى S3 Bucket باستخدام Boto3

    في محاولتك لتحميل ملف إلى دلو S3، تواجهك مشكلة في الوصول إلى المستوى الجذري للدلو وتحتاج إلى تحديد بادئة (prefix) محددة. الشيفرة الخاصة بك تواجه خطأ Access Denied، ولديك بعض التساؤلات حول كيفية تحديد بادئة الصحيحة أو إذا كانت الأذونات موجودة.

    الخطأ يظهر أن الوصول مرفوض (Access Denied)، ولكن تتسائل إذا ما كان السبب هو الشرط المتعلق بالمعايير المتوقعة للبادئة (prefix) أو إذا كانت أذونات الكتابة موجودة بالفعل. قد يكون السبب في الخطأ هو وجود خاصية prefix في bucket_name، ولكن يبدو أيضا أن هناك شك في القدرة على الكتابة.

    تأكد من أن لديك أذونات كافية للكتابة في الدلو بشكل عام. يمكنك أيضًا التحقق مما إذا كانت البادئة (prefix) المحددة تتناسب مع متطلبات الدلو. يمكنك استخدام الكود الذي يعرض الملفات في الدلو للتحقق من وجود أي مشكلات في الوصول.

    قد يكون من المفيد أيضًا استخدام دالة os.path.join لضمان حصولك على تنسيق صحيح للمسارات، حيث يمكن أن يكون إضافة “/” يدوياً سبباً للأخطاء.

    على سبيل المثال:

    python
    import os file_path = os.path.join(prefix, 'hello-remote.txt') s3_client.upload_file('/tmp/hello.txt', bucket_name, file_path)

    قم بمراجعة إعدادات الأذونات والتأكد من صحة البادئة، وقد تجد السبب وراء خطأ الوصول المرفوض.

    المزيد من المعلومات

    لفهم الخطأ الذي تواجهه عند محاولة تحميل الملف إلى دلو S3، يمكننا التركيز على بعض النقاط الهامة. أولاً وقبل كل شيء، يبدو أن لديك إعدادات الأمان (security settings) قائمة بشكل صحيح، حيث يظهر الخطأ Access Denied.

    في الكود الذي كتبته، يمكن أن يكون الخطأ مرتبطًا بعدة عوامل:

    1. أذونات الكتابة:
      تأكد من أن لديك الأذونات اللازمة للكتابة في الدلو المستهدف. يمكنك التحقق من ذلك من خلال لوحة التحكم في AWS أو استخدام أداة AWS CLI.

    2. البادئة (Prefix):
      تأكد من أن البادئة (prefix) المستخدمة تتناسب مع البنية الصحيحة لمسار الدلو. الفرق بين استخدام /a/b/c/d/ و a/b/c/d/ يمكن أن يؤثر على الطريقة التي يتم بها فهم البادئة.

    3. تنسيق الملف:
      تأكد من أن الملف الذي تحاول تحميله ('/tmp/hello.txt') موجود ولديه أذونات قراءة.

    4. تصحيح الكود:
      قم بتحسين الكود الخاص بك باستخدام دالة os.path.join لتشكيل مسار الملف بشكل صحيح، مثلما تم ذكره في الرد السابق.

    5. التحقق من الأمان:
      تأكد من أن سياسات الأمان لديك لا تمنع عملية الرفع. يمكن أيضًا التحقق من سجلات الأمان لمعرفة مزيد من التفاصيل حول الطلب الذي يؤدي إلى Access Denied.

    مع التحقق من هذه النقاط، يمكن أن تساعدك في تحديد سبب الخطأ وإصلاحه بنجاح.

  • حل مشكلة AWS CLI JSON Formatting Error

    في هذا السياق، يظهر أنك تواجه مشكلة في تنسيق JSON الخاص بك عند محاولة تنفيذ أمر AWS CLI لاسترجاع قائمة الكائنات في سلة S3 مع استخدام ملف JSON لتحديد المدخلات. يظهر أن هناك خطأ في التنسيق أثناء محاولة قراءة الملف JSON الذي تقوم بتحديده.

    الخطأ الذي تم الإبلاغ عنه يشير إلى أن هناك مشكلة في التحليل اللغوي للمعلمة ‘cli-input-json’ ويشير إلى وجود مشكلة في الصياغة الصحيحة لملف JSON الخاص بك. يبدو أن الخطأ يتعلق بتوقع وجود قيمة (Expecting value) في السطر 1، العمود 1 (line 1 column 1)، ولكن لم يتم العثور على أي قيمة صالحة في الموقع المتوقع.

    لحل هذه المشكلة، يجب عليك مراجعة ملف JSON الخاص بك بعناية. هنا بعض النصائح التي قد تساعدك في ذلك:

    1. تحقق من صحة الJSON: تأكد من أن ملف JSON الخاص بك صحيح وخالٍ من أخطاء التحليل اللغوي. يمكنك استخدام أدوات على الإنترنت للتحقق من صحة JSON.

    2. تأكد من استبدال القيم بالفعل: تأكد من أنك قمت بتبديل القيم النصية مثل “” و”

      ” بالقيم الفعلية التي تريد استخدامها.

    3. استخدام علامات التنصيص بشكل صحيح: تأكد من أنك استخدمت علامات التنصيص بشكل صحيح حول القيم النصية في الملف JSON.

    4. تجنب الأخطاء الإملائية: تحقق من عدم وجود أخطاء إملائية أو أخطاء في وضع الفواصل بين العناصر في الملف JSON.

    5. تجنب الأخطاء في التنسيق: تأكد من أن التنسيق العام للملف JSON هو الصحيح، وتجنب الفراغات الزائدة أو الأخطاء في الهياكل.

    باختصار، يتعين عليك فحص ملف JSON الخاص بك بدقة والتأكد من أنه يتبع الصيغة الصحيحة. إذا استمرت المشكلة، يمكنك توفير المزيد من التفاصيل حول الملف JSON للمساعدة في تحديد المشكلة بشكل أفضل.

    المزيد من المعلومات

    بالطبع، لنقم بتوسيع التفاصيل حول مشكلتك. عند النظر إلى محتوى ملف JSON الخاص بك، يظهر أنك تقوم بتنفيذ أمر AWS CLI للوصول إلى قائمة الكائنات في سلة S3 باستخدام الأمر التالي:

    bash
    aws s3api list-objects --cli-input-json .json --profile

    وقد وفرت ملف JSON الذي يحتوي على المعلمات التي تمررها إلى الأمر. في هذا السياق، يجب أن يكون ملف JSON مثل التالي:

    json
    { "Bucket": "", "Delimiter": "", "EncodingType": "", "Marker": "", "MaxKeys": 0, "Prefix": "" }

    حيث يتم استبدال و بالقيم الفعلية التي ترغب في استخدامها. تأكد من أن قيم JSON محاطة بعلامات التنصيص الزوجية (double quotes) وأن الفواصل بين العناصر صحيحة.

    قد يكون هناك عدة أسباب لحدوث مشكلة في تحليل JSON. يمكنك استخدام أدوات عبر الإنترنت للتحقق من صحة بنية JSON الخاصة بك، مثل “JSONLint”، وهي أداة تتيح لك فحص صحة وتنسيق JSON.

    إذا استمرت المشكلة، يمكنك تقديم مزيد من المعلومات حول الملف JSON الخاص بك أو أي رسائل خطأ إضافية التي قد تظهر، وسأكون سعيدًا بمساعدتك في حل المشكلة بشكل أفضل.

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر