استفاده کردن از Container ها و Blazor در پروژه عملی

پرووید

دسته های مقالات

با یکی دیگر از مقالات وب سایت پرووید در رابطه با توسعه
وب اپلیکیشن ها با استفاده از Blazor در خدمت شما هستیم. همان طور که احتمالاً می‌دانید فریمورک Blazor امروز توسط
مایکروسافت به عنوان یک فریمورک Interactive برای ساختن Front-End اپلیکیشن های تحت وب با استفاده از سی شارپ مورد
استفاده قرار می گیرد، در این مقاله قصد داریم نحوه قرار دادن اپلیکیشن‌های Blazor در Container ها را به منظور
Development و Deployment به شما آموزش بدهیم. ما در این مقاله از .NET Core CLI استفاده خواهیم کرد بنابراین دستوراتی
که دریافت خواهید کرد می‌توانند در پلتفرم های مختلف مورد استفاده قرار بگیرد. در ابتدا توصیه می‌کنیم در صورت تمایل به
به یادگیری فریمورک Blazor حتماً از آموزش
شروع به کار با بلیزیر Blazor در ASP.NET Core
و آموزش
بلیزر Blazor پیشرفته برای اپلیکیشن های تجاری
و آموزش
Authentication و Authorization در بلیزر Blazor
استفاده کنید.

در ابتدا به بررسی مدل‌های میزبانی و یا اصطلاحاً Hosting Model ها در فریمورک Blazor
خواهیم پرداخت.

بررسی Hosting Model ها در فریمورک Blazor

به طور کلی در فریمورک Blazor دو مدل میزبانی و یا Hosting Model برای اپلیکیشن تعریف
می‌شوند. نیازمندیهای هر دوی این Hosting Model ها با یکدیگر متفاوت است، بنابراین در ابتدا در رابطه با این دو Hosting
Model صحبت خواهیم کرد.

  •  مدل میزبانی Blazor WebAssembly: مدل میزبانی و یا Hosting Modelی که تحت عنوان
    Blazor WebAssembly شناخته می شود یک web framework می باشد که بر روی client-side و درون مرورگر کاربر با استفاده
    از وب اسمبلی اجرا می گردد.
  •  مدل میزبانی Blazor Server: این مدل میزبانی یک web framework می باشد که بر روی
    server-side اجرا می شود و سپس با استفاده از یک اتصال از نوع SignalR با مرورگر ارتباط برقرار می کند. در صورت
    تمایل به یادگیری SignalR در یک پروژه واقعی می توانید از لینک وزش ویدیویی سیگنال استفاده کنید. ضمنا سعی می‌کنیم
    در ادامه مقاله دیگری در رابطه با Hosting Modelهای Blazor به طور مفصل بر روی وبسایت منتشر کنیم.

بررسی مفصل WebAssembly Hosting Model

در این قسمت قصد داریم به طور دقیق در رابطه با مدل میزبانی WebAssembly در فریمورک Blazor
صحبت کنیم، هدف این مدل میزبانی در واقع Host کردن و یا میزبانی برنامه به صورت کامل به درون مرورگر کاربر می باشد.
مصنوعات یک اپلیکیشن Blazor با این مدل میزبانی در واقع محتویات html و جاوا اسکریپت و البته یک نسخه از .NET Runtime به
همراه فایل های باینری می باشند بنابراین شما می توانید تمامی این مصنوعات را در قالب یک وب سایت استاتیک در مرورگر
کاربر میزبانی کنید. در این نوع از مدل میزبانی هیچ Server Runtime و یا مفسر خاصی مورد نیاز نیست، البته در زمان انتشار
این آموزش بر روی وبسایت پرویید مدل میزبانی Blazor WebAssembly هنوز در حالت پیش نمایش و یا Preview قرار دارد و به
همین دلیل نیاز است که Template ایجاد کردن یک Blazor WebAssembly را به صورت دستی نصب کنید. البته ممکن است در زمانی که
شما این مقاله را میخوانید این روال متفاوت باشد به هر حال اگر این مدل میزبانی از اپلیکیشن‌های Blazor هنوز هم در حالت
پیش نمایش و یا Preview قرار دارند می‌توانید با استفاده از دستور زیر نسخه پیش نمایش را به دست بیاورید:

dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.1.0-preview4.19579.2

حال که این Template را نصب کردید به سادگی می توانید یک اپلیکیشن وب اسمبلی جدید را با
استفاده از دستور .NET CLI زیر ایجاد کنید:

dotnet new blazorwasm -o wasmtest

این دستور باعث می‌شود که یک اپلیکیشن از نوع Blazor WebAssembly با نام “wasmtest” ایجاد
شود. البته می توانید نام پروژه را به هر نام دیگری تغییر بدهید زمانی که پروژه را build و سپس تست کردید می توانید آن
را به راحتی Publish کنید برای Publish کردن پروژه از دستور زیر استفاده می کنید:

dotnet publish -c Release

و پس از انجام این کار پنجره زیر را خواهید دید:

blazor-container

در این قسمت ما می توانیم مسیر مصنوعات و یا اصطلاحاً Artifact هایی که می خواهیم به عنوان
یک اپلیکیشن .NET Core آنها را اجرا کنیم مشخص کنیم، این کار با استفاده از دستور dotnet run انجام می‌شود. قسمت زیر را
مشاهده کنید:

/home/jeremy/Projects/wasmtest/bin/Debug/netstandard2.1/publish/

حال در رابطه با یکی از قابلیت های جذاب Blazor WebAssembly صحبت خواهیم کرد و آن هم
استفاده کردن از فایل های استاتیک به عنوان مصنوعات پروژه می باشد علاوه بر این ما یک Output Folder برای Blazor داریم،
این فولدر جایی است که همین فایل های استاتیک در آن منتشر می‌شوند. در مورد پروژه ما چون نام آن “wasmtest” می باشد،
فولدر در مسیر زیر قرار دارد:

bin/Release/netstandard2.1/publish/wasmtest/dist

این موضوع ممکن است بر روی دستگاه و یا کامپیوتر شما متفاوت باشند دقت کنید که فولدر dist
فقط شامل فایل های استاتیک میباشد این موضوع در تصویر زیر نیز نشان داده شده است:

blazor-container

حال می توانید این فایل را از درون هر Web Host استاتیکی اجرا کنید من یک فولدر جدید را
برای Container ایجاد می کنم و البته در کنار آن نیز یک فولدر به نام artifacts قرار می‌دهم و تمامی محتویات فولدر dist
را به درون فولدر artifacts کپی می‌کننم کد زیر این موضوع نشان می‌دهد:

mkdir -p ~/Projects/wasmcontainer/artifacts

cp -r ~/Projects/wasmtest/bin/Release/netstandard2.1/publish/wasmtest/dist/* ~/Projects/wasmcontainer/artifacts/

حال در فولدر wasmcontainer می‌بایستی یک فایل داکتر جدید ایجاد کنیم این موضوع در کد زیر
نشان داده شده است:

FROM nginx COPY artifacts /usr/share/nginx/html

این فایل nginx image را دریافت کرده و سپس فایل ها را از درون فولدر artifacts  در ماشین
شما به فولدر /usr/share/nginx/html که فولدر پیش فرض nginx  می باشد کپی می کند، این فولدر فایل سیستم Container شما
قرار دارد. درواقع این کار هر زمان که می خواهید image مورد نظر را Build کنیم و یا تغییراتی بر روی artifact ها لحاظ
کرده‌ایم، اتفاق خواهد افتاد و در این رابطه نیاز است که image  مورد نظر   دوباره Build شود. تمام کاری که نیاز به
انجام دادن آن داشتیم که بتوانیم فایل های استاتیک پروژه Blazor WebAssembly را اجرا کنیم همین بود. حال می توانید با
دستور زیر یک image را ایجاد نمایید

docker build -t jeremy/wasmtest:latest .

blazor-container

و پس از انجام این کار با استفاده از دستور زیر آن را اجرا کنیم :

docker run –name wasm1 -p 80:80 -d jeremy/wasmtest:latest

این موضوع باعث می‌شود که Container  به عنوان یک Daemon اجرا بگردد و تا زمانی که آن را
متوقف نکرده اید به اجرا شدن ادامه خواهد داد. پس تا به اینجای کار ما یک nginx server داریم که اپلیکیشن ما را بر روی
پورت ۸۰ اجرا می کند. می توانید با مرورگر تان به این صفحه رفته و خروجی زیر را مشاهده کنید:

blazor-container

حال در Production Environment باید بدانید که نیاز است پیکربندی های بیشتری را برای NGINX
انجام بدهید، با این وجود این مراحل اپلیکیشن Blazor WebAssembly ما را در یک Container برای انجام Development میزبانی
خواهد کرد.

 بررسی Blazor Server Hosting Model

در ادامه می خواهیم در رابطه با مدل میزبانی سرور صحبت کنیم. برای استفاده کردن از این مدل
میزبانی می‌بایست .NET Core runtime 3.0 و یا ورژن های بالاتر را نصب کنید. یک اپلیکیشن که با این مدل میزبانی ایجاد شده
است با یک Template به نام blazorserver  ساخته شده است. در این مثال من نام پروژه را servertest گذاشته ام. این موضوع
در کد زیر نشان داده شده است:

dotnet new blazorserver -o servertest

پس از این که کار شما در تغییر برنامه کامل شد و آماده Deploy  کردن آن هستید دستور زیر را
اجرا کنید:

dotnet publish -c Release

و خروجی شبیه به تصویر زیر خواهد بود:

blazor-container

حال مصنوعات و یا artifact ها در فولدر زیر قرار داده خواهد شد:

/app/bin/Release/netcoreapp3.1/publish/

به علاوه ما یک فولدر دیگر شبیه به کاری که در قسمت قبلی انجام دادیم، ایجاد خواهیم کرد این
موضوع در کد زیر نشان داده شده است:

mkdir -p ~/Projects/servercontainer/artifacts

cp -r bin/Release/netcoreapp3.1/publish/* ~/Projects/servercontainer/artifacts/

و لیست مربوط به مصنوعات و artifact ها شبیه به تصویر زیر خواهد بود:

blazor-container

حال یک فایل داکر دیگر در فولدر servercontainer را ایجاد خواهیم کرد که شبیه به قسمت زیر
خواهد بود:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

COPY artifacts/ app/

ENTRYPOINT ["dotnet", "app/servertest.dll"]

این فایل فقط دارای کد یک خط بیشتر نسبت به فایل قبلی می باشد، این خط مربوط به لحاظ کردن
ایمیج مربوط به aspnet runtime می باشد. علاوه بر این تمامی artifact ها کپی شده و پس از آن یک نقطه ورود و یا Entry
Point برای اپلیکیشن لحاظ می گردد. در این مثال این نقطه ورود servertest.dll است چرا که نام پروژه ما servertest می
باشد. حال می‌توانیم image  مورد نظر را build  کرده و این کار را با دستور زیر انجام دهیم:

docker build -t jeremy/servertest:latest .

این دستور شبیه به قسمت زیر خواهد بود:

blazor-container

که می‌توانیم با استفاده از دستور زیر اقدام به اجرا کردن کنیم:

docker run –name server1 -p 80:80 -d jeremy/servertest:latest

باری دیگر این image  به عنوان یک daemon  اجرا خواهد شد و تا زمانی که آن را متوقف نکرده
ایم به اجرا شدن ادامه خواهد داد. در ادامه می توانید اپلیکیشن Blazor Server خود را بر روی پورت ۸۰ شبیه به تصویر زیر
مشاهده کنید:

blazor-container

 جمع بندی

همانطور که در این مقاله از وب سایت پرووید مشاهده کردید، فرآیند Build  کردن تعدادی
Container برای Deploy  کردن اپلیکیشن های Blazor کاری بسیار ساده است، فقط باید دقت کنید که Hosting Modelهای مختلف
Blazor کمی با یکدیگر متفاوت هستند و می بایست image های  منحصر به فرد هر کدام را به صورت جداگانه ایجاد کنید. image
های که در این مقاله ایجاد کردیم برای فرآیند Deployment و البته Testing مناسب هستند اما اگر میخواهید این ها را در
Production Environment قرار بدهید باید به موارد زیر دقت کنید:

  •  از SSL به جای استفاده کردن از پورت ۸۰ استفاده کنید.
  • سعی کنید NGINX را برای Blazor WASM پیکربندی کنید تا بتوانید حداقل بهینه سازی‌های مربوط به سیستم کشف کردن را به
    دست بیاورید.
  •  حتماً NGINX و یا یک Reverse Proxy دیگر را برای اپلیکیشن های Blazor Server   سرور پیکربندی کنید.

در پایان امیدوارم که این مقاله از وبسایت پرووید در مورد
توجه تمامی عزیزان قرار گرفته باشد. یک بار دیگر توصیه می‌کنیم که در صورت تمایل به یادگیری Blazor حتماً از آموزش
شروع به کار با بلیزیر Blazor در ASP.NET Core
و آموزش
بلیزر Blazor پیشرفته برای اپلیکیشن های تجاری
و آموزش
Authentication و Authorization در بلیزر Blazor
استفاده بفرمایید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *