إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
في هذا الدرس، تبني تطبيق ويب Node.js يتصل ب Azure DocumentDB. مكدس MongoDB وExpress وReact.jsNode.js (MERN) هو مجموعة شهيرة من التقنيات المستخدمة لبناء العديد من تطبيقات الويب الحديثة. مع Azure DocumentDB، يمكنك بناء تطبيق ويب جديد أو ترحيل تطبيق موجود باستخدام تعريفات MongoDB التي تعرفها بالفعل. في هذا البرنامج التعليمي، سوف تتعلّم:
- إعداد بيئتك
- اختبر تطبيق MERN باستخدام حاوية MongoDB محلية
- اختبر تطبيق MERN باستخدام عنقود
- نشر تطبيق MERN إلى Azure App Service
Prerequisites
لإكمال هذا البرنامج التعليمي، تحتاج إلى الموارد التالية:
اشتراك Azure
- إذا لم يكن لديك اشتراك Azure، فقم بإنشاء حساب مجاني
مجموعة Azure DocumentDB موجودة
- إذا لم يكن لديك عنقود، أنشئ عنقود جديد
- حساب GitHub مع استحقاق GitHub Codespaces
تكوين بيئة التطوير
بيئة حاوية تطوير متوفرة بجميع التبعيات المطلوبة لإكمال كل تمرين في هذا المشروع. يمكنك تشغيل حاوية التطوير في GitHub Codespaces أو محليا باستخدام Visual Studio Code.
- مساحات رموز GitHub
- Visual Studio Code
يدير GitHub Codespaces حاوية تطوير تديرها GitHub مع Visual Studio Code for the Web كواجهة مستخدم. لأكثر بيئة تطوير بسيطة، استخدم GitHub Codespaces حتى يكون لديك الأدوات والتبعيات الصحيحة للمطورين مثبتة مسبقا لإكمال وحدة التدريب هذه.
Important
جميع حسابات GitHub يمكنها استخدام Codespaces لمدة تصل إلى 60 ساعة مجانية شهريا مع وجود مثيلتين أساسيتين.
ابدأ عملية إنشاء مساحة كود جديدة على GitHub على
mainفرع مستودعazure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-appGitHub.في صفحة إنشاء مساحة الكود ، راجع إعدادات إعدادات مساحة الكود، ثم اختر إنشاء مساحة كود جديدة
انتظر حتى يبدأ الشيفرة. قد تستغرق عملية بدء التشغيل بضع دقائق.
افتح طرفية جديدة في مساحة الكود.
تحقق من نسخ الأدوات التي تستخدمها في هذا الدرس.
docker --version node --version npm --version az --versionإشعار
يتطلب هذا الدرس الإصدارات التالية من كل أداة، والتي يتم تثبيتها مسبقا في بيئتك:
Tool إصدار Docker ≥ 20.10.0 Node.js ≥ 18.0150 npm ≥ 9.5.0 Azure CLI ≥ 2.46.0 أغلق المحطة.
الخطوات المتبقية في هذا الدرس تتم في سياق حاوية التطوير هذه.
اختبر واجهة برمجة تطبيقات تطبيق MERN باستخدام حاوية MongoDB
ابدأ بتشغيل واجهة برمجة تطبيقات التطبيق النموذجي مع حاوية MongoDB المحلية للتحقق من أن التطبيق يعمل.
شغل حاوية MongoDB باستخدام Docker وانشر منفذ MongoDB النموذجي (
27017).docker pull mongo:6.0 docker run --detach --publish 27017:27017 mongo:6.0في الشريط الجانبي، اختر امتداد MongoDB.
إضافة اتصال جديد إلى امتداد MongoDB باستخدام سلسلة
mongodb://localhostالاتصال .
بمجرد نجاح الاتصال، افتح ملف data/products.mongodb playground.
اختر أيقونة تشغيل الجميع لتنفيذ السكريبت.
يجب أن تؤدي جولة الملعب إلى قائمة بالوثائق في مجموعة MongoDB المحلية. إليك مثال مختصر على المخرج.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]إشعار
معرفات الكائنات (
_id) مولدة عشوائيا وتختلف عن هذا المخرجات المختصرة من المثال.في الخادم/ المجلد، أنشئ ملف .env جديد.
في ملف server/.env ، أضف متغير بيئة لهذه القيمة:
متغير بيئة القيمة CONNECTION_STRINGسلسلة الاتصال إلى عنقود Azure DocumentDB. حاليا، استخدم mongodb://localhost:27017?directConnection=true.CONNECTION_STRING=mongodb://localhost:27017?directConnection=trueغير سياق الطرفية إلى الخادم/ المجلد.
cd serverتثبيت التبعيات من Node Package Manager (npm).
npm installابدأ تطبيق Node.js & Express.
npm startتفتح واجهة برمجة التطبيقات تلقائيا نافذة متصفح للتحقق من أنها ترجع مجموعة من مستندات المنتج.
أغلق تبويب أو نافذة المتصفح الإضافية.
أغلق المحطة.
اختبار تطبيق MERN باستخدام عنقود Azure DocumentDB
الآن، دعونا نتأكد من أن التطبيق يعمل بسلاسة مع Azure DocumentDB. لهذه المهمة، قم بملء البيانات البذرية في المجموعة الموجودة مسبقا باستخدام shell MongoDB ثم تحديث سلسلة الاتصال الخاصة ب API.
سجّل الدخول إلى مدخل Azure (https://portal.azure.com).
انتقل إلى صفحة التجمع الحالية في Azure DocumentDB.
من صفحة مجموعة Azure DocumentDB، اختر خيار قائمة التنقل في سلاسل الاتصال .
سجل القيمة من حقل سلسلة الاتصال .
Important
سلسلة الاتصال في البوابة لا تتضمن قيم اسم المستخدم وكلمة المرور. يجب عليك استبدال
<user>ال و<password>المؤقتين ببيانات الاعتماد التي استخدمتها عند إنشاء العنقود الأصلي.افتح طرفية جديدة داخل بيئة التطوير المتكاملة (IDE) الخاصة بك.
شغل MongoDB Shell باستخدام
mongoshالأمر وسلسلة الاتصال التي سجلتها سابقا. تأكد من استبدال<user>ال and<password>المؤقتين ببيانات الاعتماد التي استخدمتها عند إنشاء العنقود الأصلي.mongosh "<mongodb-cluster-connection-string>"إشعار
قد تحتاج إلى ترميز قيم محددة لسلسلة الاتصال. في هذا المثال، اسم العنقود هو
msdocs-azure-documentdb-tutorial، واسم المستخدم هوclusteradmin، وكلمة المرور هيP@ssw.rd. في كلمة المرور، يجب ترميز@الحرف باستخدام%40. تم تقديم مثال على سلسلة اتصال هنا مع الترميز الصحيح لكلمة المرور.CONNECTION_STRING=mongodb+srv://clusteradmin:P%40ssw.rd@msdocs-azure-documentdb-tutorial.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000داخل الshell، قم بتشغيل الأوامر التالية لإنشاء قاعدة البيانات الخاصة بك، وإنشاء مجموعتك، وزرع بيانات المبتدئين.
use('cosmicworks'); db.products.drop(); db.products.insertMany([ { name: "Confira Watch", category: "watches", price: 105.00 }, { name: "Diannis Watch", category: "watches", price: 98.00, sale: true }, { name: "Sterse Gloves", category: "gloves", price: 42.00 }, { name: "Peache Sunglasses", category: "eyewear", price: 32.00, sale: false, sizes: [ "S", "M", "L" ] }, { name: "Icento Pack", category: "bags", price: 58.00 }, { name: "Iroowl Bracelet", category: "watches", price: 66.00 }, { name: "Glaark Bag", category: "bags", price: 56.00, sale: true }, { name: "Windry Mittens", category: "gloves", price: 35.00 }, { name: "Tuvila Hat", category: "hats", price: 120.00 }, { name: "Klinto Hat", category: "hats", subcategory: "hats-beanies", price: 65.00 } ]); db.products.find({});يجب أن تؤدي الأوامر إلى قائمة بالوثائق في مجموعة MongoDB المحلية. إليك مثال مختصر على المخرج.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]إشعار
معرفات الكائنات (
_id) مولدة عشوائيا وتختلف عن هذا المخرجات المختصرة من المثال.اخرج من غلاف MongoDB.
exitفي العميل/ المجلد، أنشئ ملف .env جديد.
في ملف client/.env ، أضف متغير بيئة لهذه القيمة:
متغير بيئة القيمة CONNECTION_STRINGسلسلة الاتصال إلى عنقود Azure DocumentDB. استخدم نفس سلسلة الاتصال التي استخدمتها مع قشرة مونغو. CONNECTION_STRING=<your-connection-string>التحقق من أن التطبيق يستخدم خدمة قاعدة البيانات عن طريق تغيير سياق الطرفية إلى الخادم/ المجلد، وتثبيت التبعيات من Node Package Manager (npm)، ثم تشغيل التطبيق.
cd server npm install npm startتفتح واجهة برمجة التطبيقات تلقائيا نافذة متصفح للتحقق من أنها ترجع مجموعة من مستندات المنتج.
أغلق تبويب أو نافذة المتصفح الإضافية. ثم، أغلق المحطة.
نشر تطبيق MERN إلى Azure App Service
أثبت أن التطبيق يعمل من طرف إلى طرف عن طريق نشر الخدمة والعميل إلى خدمة تطبيقات Azure. استخدم الأسرار في تطبيقات الويب لتخزين متغيرات البيئة باستخدام بيانات الاعتماد ونقاط نهاية API.
داخل بيئة التطوير المتكاملة (IDE)، افتح طرفية جديدة.
إنشاء متغير shell لاسم مجموعة الموارد الموجودة مسبقا باسم resourceGroupName.
# Variable for resource group name resourceGroupName="<existing-resource-group>"أنشئ متغيرات shell لتطبيقين ويب هما serverAppName و clientAppName.
# Variable for randomnly generated suffix let suffix=$RANDOM*$RANDOM # Variable for web app names with a randomnly generated suffix serverAppName="server-app-$suffix" clientAppName="client-app-$suffix"إذا لم تفعل ذلك بعد، سجل الدخول إلى واجهة Azure CLI باستخدام الأمر
az login --use-device-code.غير الدليل العامل الحالي إلى الخادم/ المسار.
cd serverإنشاء تطبيق ويب جديد لمكون الخادم في تطبيق MERN باستخدام
az webapp up.az webapp up \ --resource-group $resourceGroupName \ --name $serverAppName \ --sku F1 \ --runtime "NODE|18-lts"أنشئ إعداد سلسلة اتصال جديدة لتطبيق الويب الخاص بالخادم المسمى
CONNECTION_STRING.az webapp config connection-string setاستخدم نفس القيمة لسلسلة الاتصال التي استخدمتها مع shell MongoDB وملف .env في هذا الدرس.az webapp config connection-string set \ --resource-group $resourceGroupName \ --name $serverAppName \ --connection-string-type custom \ --settings "CONNECTION_STRING=<mongodb-connection-string>"احصل على URI الخاص بتطبيق الويب الخاص بالخادم مع
az webapp showواحتفظ به في متغير shell اسمه d serverUri.serverUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $serverAppName \ --query hostNames[0] \ --output tsv)استخدم الحزمة
open-cliوالأمر من NuGet معnpxلفتح نافذة متصفح باستخدام رابط المستخدم الخاص بتطبيق الويب الخاص بالخادم. تحقق من أن تطبيق الخادم يعيد بيانات مصفوفة JSON الخاصة بك من العنقود.npx open-cli "https://$serverUri/products" --yesتلميح
أحيانا يمكن أن تنتهي عمليات النشر بشكل غير متزامن. إذا لم تكن تتوقع ما تتوقعه، انتظر دقيقة أخرى وقم بتحديث نافذة المتصفح.
غير مجلد العمل إلى العميل أو المسار.
cd ../clientأنشئ تطبيق ويب جديد لمكون العميل في تطبيق MERN باستخدام
az webapp up.az webapp up \ --resource-group $resourceGroupName \ --name $clientAppName \ --sku F1 \ --runtime "NODE|18-lts"أنشئ إعداد تطبيق جديد لتطبيق الويب العميل بعنوان
REACT_APP_API_ENDPOINTaz webapp config appsettings set. استخدم نقطة نهاية واجهة برمجة تطبيقات الخادم المخزنة في متغير serverUri shell.az webapp config appsettings set \ --resource-group $resourceGroupName \ --name $clientAppName \ --settings "REACT_APP_API_ENDPOINT=https://$serverUri"احصل على رابط المستخدم لتطبيق الويب الخاص
az webapp showبالعميل واحتفظ به في متغير shell اسمه d clientUri.clientUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $clientAppName \ --query hostNames[0] \ --output tsv)استخدم الحزمة
open-cliوالأمر من NuGet معnpxلفتح نافذة متصفح باستخدام URI الخاص بتطبيق الويب الخاص بالعميل. تحقق من أن تطبيق العميل يعرض البيانات من واجهة برمجة تطبيقات الخادم.npx open-cli "https://$clientUri" --yesتلميح
أحيانا يمكن أن تنتهي عمليات النشر بشكل غير متزامن. إذا لم تكن تتوقع ما تتوقعه، انتظر دقيقة أخرى وقم بتحديث نافذة المتصفح.
أغلق المحطة.
تنظيف الموارد
عندما تعمل في اشتراكك الخاص، في نهاية المشروع، من المستحسن إزالة الموارد التي لم تعد بحاجة إليها. الموارد المتبقية قيد التشغيل يمكن أن تكلفك المال. يمكنك حذف الموارد بشكل فردي أو حذف مجموعة الموارد لحذف تشكيلة الموارد بأكملها.
لحذف مجموعة الموارد بالكامل، استخدم
az group delete.az group delete \ --name $resourceGroupName \ --yesتحقق من حذف مجموعة الموارد باستخدام
az group list.az group list
تنظيف بيئة التطوير
قد ترغب أيضا في تنظيف بيئة التطوير أو إعادتها إلى حالتها الطبيعية.
- مساحات رموز GitHub
- Visual Studio Code
حذف بيئة كودسبيس في GitHub يضمن قدرتك على تعظيم كمية الساعات الأساسية المجانية التي تحصل عليها لحسابك.
تسجيل الدخول إلى لوحة تحكم GitHub Codespaces (https://github.com/codespaces).
ابحث عن حاوية التطوير التي تعمل حاليا من
azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-appمستودع GitHub.
افتح قائمة السياق الخاصة بمساحة الكود ثم اختر حذف.