البرنامج التعليمي: نشر تطبيق .NET في حاوية Windows إلى Azure Service Fabric

هذا البرنامج التعليمي يوضح لك كيفية وضع تطبيق ASP.NET حالي في حاوية وتعبئته على أنه تطبيق Service Fabric. تشغيل الحاويات محلياً على مجموعة تطوير "Service Fabric" ثم نشر التطبيق إلى Azure. يحفظ التطبيق بالبيانات في Azure SQL Database.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • وضع تطبيق حالي في حاوية باستخدام Visual Studio
  • إنشاء قاعدة بيانات في Azure SQL Database
  • إنشاء سجل حاويات Azure
  • نشر تطبيق " Service Fabric" إلى Azure

ملاحظة

نوصي باستخدام وحدة Azure Az PowerShell للتفاعل مع Azure. راجع تثبيت Azure PowerShell للبدء. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

المتطلبات الأساسية

  1. عند عدم وجود اشتراك في Azure، ⁦قم بإنشاء حساب مجاني⁦⁩.
  2. قم بتمكين ميزات Windows Hyper-Vوالحاويات.
  3. ثبت Docker Desktop Windows بحيث يمكنك تشغيل الحاويات على Windows 10.
  4. ثبت إصدار وقت التشغيل 6.2 أو إصدار أحدث من "Service Fabric" و الإصدار 3.1 من Service Fabric SDK أو إصدار أحدث.
  5. ثبت Visual Studio وقم بتمكين تطوير AzureوASP.NET وتطوير أحمال العمل الخاصة بـ Azure.
  6. ثبت برنامج Azure PowerShell

حمل وشغل Fabrikam Fiber CallCenter

  1. تحميل تطبيق نموذج مركز abrikam Fiber CallCenter من GitHub.

  2. تحقق من أن تطبيق Fabrikam Fiber CallCenter ينشئ ويعمل من دون خطأ. قم بتشغيل Visual Studio كمسؤول ثم افتح الملف VS2015\FabrikamFiber.CallCenter.sln. اضغط F5 لتشغيل وتصحيح أخطاء التطبيق.

    لقطة شاشة للصفحة الرئيسية لتطبيق Fabrikam Fiber CallCenter يعمل على المضيف المحلي. تعرض الصفحة لوحة معلومات مع قائمة بمكالمات الدعم.

قم بإنشاء Azure SQL DB

عند تشغيل تطبيق Fabrikam Fiber CallCenter في الإنتاج، يجب أن تكون البيانات الدائمة في قاعدة بيانات. لا توجد حالياً طريقة لضمان البيانات المستمرة في حاوية، ولذلك لا يمكنك تخزين بيانات الإنتاج في SQL Server في حاوية.

نوصي Azure SQL Database. لإعداد وتشغيل DB SQL Server مدارة في Azure، شغيل البرنامج النصي التالي. تعديل متغيرات البرنامج النصي حسب الضرورة. clientIP هو عنوان IP لجهاز الكمبيوتر المطور. دون اسم الخادم الناتج بواسطة البرنامج النصي.

$subscriptionID="<subscription ID>"

# Sign in to your Azure account and select your subscription.
Login-AzAccount -SubscriptionId $subscriptionID

# The data center and resource name for your resources.
$dbresourcegroupname = "fabrikam-fiber-db-group"
$location = "southcentralus"

# The server name: Use a random value or replace with your own value (do not capitalize).
$servername = "fab-fiber-$(Get-Random)"

# Set an admin login and password for your database.
# The login information for the server.
$adminlogin = "ServerAdmin"
$password = "Password@123"

# The IP address of your development computer that accesses the SQL DB.
$clientIP = "<client IP>"

# The database name.
$databasename = "call-center-db"

# Create a new resource group for your deployment and give it a name and a location.
New-AzResourceGroup -Name $dbresourcegroupname -Location $location

# Create the SQL server.
New-AzSqlServer -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -Location $location `
    -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminlogin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))

# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -FirewallRuleName "AllowClient" -StartIpAddress $clientIP -EndIpAddress $clientIP

# Create the database in the server.
New-AzSqlDatabase  -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -DatabaseName $databasename `
    -RequestedServiceObjectiveName "S0"

Write-Host "Server name is $servername"

تلميح

إذا كنت خلف جدار حماية الشركة، فقد لا يكون عنوان IP لجهاز الكمبيوتر المطور عنوان IP معرض للإنترنت. للتحقق من أن قاعدة البيانات تحتوي على عنوان IP الصحيح لقاعدة جدار الحماية، انتقل إلى مدخل Azure وابحث عن قاعدة البيانات في قسم قواعد بيانات SQL. انقر على اسمها، ثم في القسم نظرة عامة حدد "تعيين جدار حماية الخادم". "عنوان IP العميل" هو عنوان IP لجهاز التطوير الخاص بك. تأكد من تطابق عنوان IP في قاعدة "AllowClient".

حدث ويب التكوين

مرة أخرى في مشروع FabrikamFiber.Web حدث سلسلة الاتصال في ملف web.config للإشارة إلى SQL Server في الحاوية. حدث جزء الخادم من سلسلة الاتصال ليكون اسم الخادم الذي تم إنشاؤه بواسطة البرنامج النصي السابق. يجب أن يكون شيئاً مثل "fab-fiber-751718376.database.windows.net". في XML التالي، تحتاج إلى تحديث السمة connectionString فقط؛ ولا تحتاج إلى تغيير سمات providerName وname.

<add name="FabrikamFiber-Express" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
<add name="FabrikamFiber-DataWarehouse" connectionString="Server=<server name>,1433;Initial Catalog=call-center-db;Persist Security Info=False;User ID=ServerAdmin;Password=Password@123;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient" />
  

ملاحظة

يمكنك استخدام أي SQL Server تفضله لتصحيح الأخطاء المحلية، طالما أنه يمكن الوصول إليه من المضيف الخاص بك. ومع ذلك، لا يدعم localdbcontainer -> host الاتصال. إذا كنت تريد استخدام قاعدة بيانات SQL مختلفة عند إنشاء إصدار تطبيق ويب الخاص بك، أضف سلسلة اتصال أخرى إلى ملف web.release.config.

ضع التطبيق في حاوية

  1. انقر بزر الماوس الأيمن فوق مشروع FabrikamFiber.Web>إضافة>دعم منسق الحاوية. حدد Service Fabric كمنسق الحاوية وانقر فوق موافق.

  2. إذا طلب منك ذلك، انقر فوق نعم للانتقال إلى Docker إلى حاويات Windows الآن.

    يتم إنشاء مشروع FabrikamFiber.CallCenterApplication جديد لمشروع تطبيق Service Fabric في الحل. يُضاف Dockerfile إلى المشروع FabrikamFiber.Web الحالي. كما تتم إضافة دليل PackageRoot إلى مشروع FabrikamFiber.Web الذي يحتوي على بيان الخدمة وإعدادات خدمة FabrikamFiber.Web الجديدة.

    إن الحاوية جاهزة الآن ليتم بناؤها وتعبئتها في تطبيق " Service Fabric". بمجرد أن يكون لديك صورة الحاوية المبنية على جهازك ، يمكنك دفعها إلى أي سجل حاويات وسحبها إلى أي مضيف لتشغيلها.

تشغيل التطبيق الموضوع محلياً في حاوية

اضغط F5 لتشغيل وتصحيح التطبيق في حاوية على مجموعة تطوير "Service Fabric" المحلية. انقر فوق نعم إذا تم تقديم مربع رسالة يطلب منح مجموعة 'ServiceFabricAllowedUsers' قراءة وتنفيذ أذونات إلى دليل مشروع Visual Studio.

إذا كان تشغيل F5 يطرح استثناءً مثل التالي، ثم لم يتم إضافة IP الصحيح إلى جدار حماية قاعدة بيانات Azure.

System.Data.SqlClient.SqlException
HResult=0x80131904
Message=Cannot open server 'fab-fiber-751718376' requested by the login. Client with IP address '123.456.789.012' is not allowed to access the server.  To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range.  It may take up to five minutes for this change to take effect.
Source=.Net SqlClient Data Provider
StackTrace:
<Cannot evaluate the exception stack trace>

لإضافة IP المناسب إلى جدار حماية قاعدة بيانات Azure، قم بتشغيل الأمر التالي.

# The IP address of your development computer that accesses the SQL DB.
$clientIPNew = "<client IP from the Error Message>"

# Create the firewall rule to allow your development computer to access the server.
New-AzSqlServerFirewallRule -ResourceGroupName $dbresourcegroupname `
    -ServerName $servername `
    -FirewallRuleName "AllowClientNew" -StartIpAddress $clientIPNew -EndIpAddress $clientIPNew

إنشاء سجل حاويات

الآن بعد تشغيل التطبيق محلياً، ابدأ التحضير للنشر إلى Azure. يجب تخزين صور الحاوية في سجل حاويات. إنشاء تسجيل حاوية Azure باستخدام البرنامج النصي التالي. اسم تسجيل الحاوية مرئياً بواسطة اشتراكات Azure الأخرى، لذلك يجب أن يكون فريداً. قبل نشر التطبيق إلى Azure، يمكنك دفع صورة الحاوية إلى هذا التسجيل. عندما ينشر التطبيق إلى مجموعة في Azure، يتم سحب صورة الحاوية من هذا التسجيل.

# Variables
$acrresourcegroupname = "fabrikam-acr-group"
$location = "southcentralus"
$registryname="fabrikamregistry$(Get-Random)"

New-AzResourceGroup -Name $acrresourcegroupname -Location $location

$registry = New-AzContainerRegistry -ResourceGroupName $acrresourcegroupname -Name $registryname -EnableAdminUser -Sku Basic

إنشاء مجموعة "Service Fabric" على Azure

تعمل تطبيقات "Service Fabric" على نظام مجموعة متصلة بالشبكة من الأجهزة الظاهرية أو الفعلية. قبل أن تتمكن من نشر التطبيق إلى Azure، أنشئ مجموعة "Service Fabric" في Azure.

يمكنك:

  • إنشاء مجموعة اختبار من Visual Studio. يسمح لك هذا الخيار بإنشاء مجموعة آمنة مباشرة من Visual Studio مع التكوينات المفضلة لديك.
  • إنشاء مجموعة آمنة من قالب

هذا البرنامج التعليمي يخلق مجموعة من Visual Studio، وهو مثالي لسيناريوهات الاختبار. إذا قمت بإنشاء مجموعة بطريقة أخرى أو استخدام مجموعة موجودة، يمكنك نسخ ولصق نقطة نهاية الاتصال أو اختيارها من الاشتراك الخاص بك.

قبل البدء، افتح FabrikamFiber.Web -> PackageRoot -> ServiceManifest.xml في مستكشف الحلول. سجل منفذ واجهة الويب الأمامية المدرجة في نقطة النهاية.

عند إنشاء المجموعة قم بما يلي:

  1. انقر بزر الماوس الأيمن فوق مشروع تطبيق FabrikamFiber.CallCenterApplication في مستكشف الحلول واختر نشر.

  2. سجل الدخول باستخدام حساب Azure الخاص بك حتى تتمكن من الوصول إلى اشتراكك/ اشتراكاتك.

  3. أسفل القائمة المنسدلة لنقطة نهاية الاتصال، حدد الخيار إنشاء مجموعة جديدة...

  4. ومن مربع الحوار إنشاء مجموعة هيئ الإعدادات التالية:

    أ. حدد اسم المجموعة في الحقل اسم المجموعة بالإضافة إلى الاشتراك والموقع الذي تريد استخدامه. سجل اسم مجموعة موارد مجموعتك.

    ب. اختياري: يمكنك تعديل عدد العقد. افتراضياً، لديك ثلاث عقد، الحد الأدنى المطلوب لاختبار سيناريوهات "Service Fabric".

    ج. حدد علامة التبويب الشهادة. في علامة التبويب هذه، اكتب كلمة مرور لاستخدامها لتأمين شهادة نظام المجموعة. تساعد هذه الشهادة على جعل نظام المجموعة الخاص بك آمناً. يمكنك أيضاً تعديل المسار إلى المكان الذي تريد حفظ الشهادة فيه. يمكن أيضاً لـ Visual Studio استيراد الشهادة لك، لأن هذه خطوة مطلوبة لنشر التطبيق إلى المجموعة.

    ملاحظة

    احتفظ بملاحظة مسار المجلد حيث يتم استيراد هذه الشهادة. الخطوة التالية بعد إنشاء المجموعة هي استيراد هذه الشهادة.

    د. حدد علامة التبويب تفاصيل VM. حدد كلمة المرور التي ترغب في استخدامها للأجهزة الظاهرية (VM) التي تشكل المجموعة. يمكن استخدام اسم المستخدم وكلمة المرور للاتصال عن بعد بـ VMs. يجب عليك أيضاً تحديد حجم الجهاز VM ويمكن تغيير صورة VM إذا لزم الأمر.

    هام

    اختر SKU الذي يدعم تشغيل الحاويات. يجب أن يكون نظام التشغيل Windows Server على عقد نظام المجموعة متوافقاً مع نظام تشغيل خادم Windows للحاوية. لمعرفة المزيد، راجع نظام تشغيل حاوية Windows Server وتوافق نظام التشغيل المضيف. افتراضياً، ينشئ هذا البرنامج التعليمي صورة Docker استناداً إلى Windows SERVER 2016 LTSC. سيتم تشغيل الحاويات على أساس هذه الصورة على المجموعات التي تم إنشاؤها باستخدام Windows Server 2016 Datacenter مع حاويات. ومع ذلك، إذا قمت بإنشاء مجموعة أو استخدام مجموعة موجودة استناداً إلى إصدار مختلف من خادم Windows Server يجب تغيير صورة نظام التشغيل التي تستند إليه الحاوية. افتح ملف dockerfile في مشروع FabrikamFiber.Web، على أي بيان موجود FROM استناداً إلى إصدار سابق من خادم Windows Server وأضف FROM عبارة استناداً إلى علامة الإصدار المطلوب من صفحة Windows Server Core DockerHub. للحصول على معلومات إضافية حول إصدارات Windows Server Core والجداول الزمنية للدعم والإصدار، راجع معلومات الإصدار Windows Server Core.

    هـ. في علامة التبويب خيارات متقدمة، أدرج منفذ التطبيق لفتحه في موازن التحميل عند نشر المجموعة. هذا هو المنفذ الذي سجلته قبل بدء إنشاء المجموعة. يمكنك أيضاً إضافة مفتاح Application Insights الموجود لاستخدامه لتوجيه ملفات سجل التطبيقات إليه.

    و. عند الانتهاء من تعديل الإعدادات، حدد الزر إنشاء.

  5. يستغرق الإنشاء عدة دقائق لإتمامه، سوف تشير إلى إطار الإخراج عند إنشاء المجموعة بالكامل.

تثبيت الشهادة المستوردة

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

يمكنك تأكيد التثبيت عن طريق فتح إدارة شهادات المستخدم من لوحة التحكم والتأكد من أن الشهادة مثبتة تحت شهادات - المستخدم الحالي ->الشخصية ->الشهادات. يجب أن تكون الشهادة مثل [اسم المجموعة].[موقع المجموعة] .cloudapp.azure.com، على سبيل المثال fabrikamfibercallcenter.southcentralus.cloudapp.azure.com.

السماح للتطبيق الذي يعمل في Azure بالوصول إلى SQL Database

سابقاً، أنشأت قاعدة جدار حماية SQL لمنح إمكانية الوصول إلى تطبيقك الذي يُشغل محلياً. بعد ذلك، تحتاج إلى تمكين التطبيق الذي يعمل في Azure للوصول إلى SQL DB. أنشئ نقطة نهاية خدمة شبكة اتصال ظاهرية المجموعة " Service Fabric" ثم أنشئ قاعدة للسماح نقطة النهاية هذه للوصول إلى SQL DB. تأكد من تحديد متغير مجموعة موارد المجموعة التي سجلتها عند إنشاء المجموعة.

# Create a virtual network service endpoint
$clusterresourcegroup = "<cluster resource group>"
$resource = Get-AzResource -ResourceGroupName $clusterresourcegroup -ResourceType Microsoft.Network/virtualNetworks | Select-Object -first 1
$vnetName = $resource.Name

Write-Host 'Virtual network name: ' $vnetName

# Get the virtual network by name.
$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName $clusterresourcegroup `
  -Name              $vnetName

Write-Host "Get the subnet in the virtual network:"

# Get the subnet, assume the first subnet contains the Service Fabric cluster.
$subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet | Select-Object -first 1

$subnetName = $subnet.Name
$subnetID = $subnet.Id
$addressPrefix = $subnet.AddressPrefix

Write-Host "Subnet name: " $subnetName " Address prefix: " $addressPrefix " ID: " $subnetID

# Assign a Virtual Service endpoint 'Microsoft.Sql' to the subnet.
$vnet = Set-AzVirtualNetworkSubnetConfig `
  -Name            $subnetName `
  -AddressPrefix   $addressPrefix `
  -VirtualNetwork  $vnet `
  -ServiceEndpoint Microsoft.Sql | Set-AzVirtualNetwork

$vnet.Subnets[0].ServiceEndpoints;  # Display the first endpoint.

# Add a SQL DB firewall rule for the virtual network service endpoint
$subnet = Get-AzVirtualNetworkSubnetConfig `
  -Name           $subnetName `
  -VirtualNetwork $vnet;

$VNetRuleName="ServiceFabricClusterVNetRule"
$vnetRuleObject1 = New-AzSqlServerVirtualNetworkRule `
  -ResourceGroupName      $dbresourcegroupname `
  -ServerName             $servername `
  -VirtualNetworkRuleName $VNetRuleName `
  -VirtualNetworkSubnetId $subnetID;

نشر التطبيق على Azure

الآن بعد أن أصبح التطبيق جاهزاً، يمكنك نشره إلى المجموعة في Azure مباشرة من Visual Studio. في مستكشف الحلول، انقر بزر الماوس الأيمن فوق مشروع تطبيق FabrikamFiber.CallCenterApplication وحددنشر. في نقطة النهاية للاتصال، حدد نقطة النهاية للمجموعة التي أنشأتها مسبقاً. في Azure Container Registry، حدد سجل الحاوية الذي أنشأته مسبقاً. انقر فوق نشر لنشر التطبيق إلى المجموعة في Azure.

انشر تعريف التطبيق

اتبع تقدم التوزيع في نافذة الإخراج. عند نشر التطبيق، افتح مستعرض واكتب في عنوان المجموعة ومنفذ التطبيق. على سبيل المثال، ⁧http://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:8659/⁩.

لقطة شاشة للصفحة الرئيسية لتطبيق Fabrikam Fiber CallCenter يعمل على azure.com. تعرض الصفحة لوحة معلومات مع قائمة بمكالمات الدعم.

إذا فشلت الصفحة في التحميل، أو فشلت في المطالبة بالشهادة، حاول فتح مسار Explorer، على سبيل المثال، https://fabrikamfibercallcenter.southcentralus.cloudapp.azure.com:19080/Explorer وحدد الشهادة المثبتة حديثاً.

إعداد التكامل المستمر والنشر (CI/CD) مع مجموعة Service Fabric

لمعرفة كيفية استخدام Azure DevOps لتكوين نشر تطبيق CI/CD إلى مجموعة "Service Fabric"، راجع البرنامج التعليمي: نشر تطبيق مع CI/CD إلى مجموعة "Service Fabric ". العملية الموضحة في البرنامج التعليمي هي نفسها لهذا المشروع (FabrikamFiber)، فقط عليك تخطي تحميل عينة التصويت واستبدال FabrikamFiber كاسم مستودع بدلاً من التصويت.

تنظيف الموارد

إذا انتهيت، تأكد من إزالة جميع الموارد التي أنشأتها. أبسط طريقة لإزالة مجموعات الموارد التي تحتوي على المجموعة " Service Fabric" وAzure SQL DB وAzure Container Registry.

$dbresourcegroupname = "fabrikam-fiber-db-group"
$acrresourcegroupname = "fabrikam-acr-group"
$clusterresourcegroupname="fabrikamcallcentergroup"

# Remove the Azure SQL DB
Remove-AzResourceGroup -Name $dbresourcegroupname

# Remove the container registry
Remove-AzResourceGroup -Name $acrresourcegroupname

# Remove the Service Fabric cluster
Remove-AzResourceGroup -Name $clusterresourcegroupname

الخطوات التالية

لقد تعلمت في هذا البرنامج التعليمي كيفية:

  • وضع تطبيق حالي في حاوية باستخدام Visual Studio
  • إنشاء قاعدة بيانات في Azure SQL Database
  • إنشاء سجل حاويات Azure
  • نشر تطبيق " Service Fabric" إلى Azure

تتعلم في الجزء التالي من البرنامج التعليمي كيفية نشر تطبيق حاوية مع CI/CD إلى مجموعة نسيج الخدمة.