راه اندازی ASP.Net Core به وسیله IIS در Nano Server
نصب Reverse Forwarder :
Reverse Forwarders هم به صورت آنلاین (ماشین روشن و در حال کار) و هم به صورت آفلاین (ماشین خاموش) قابل نصب می باشد.
در حالت آفلاین، Reverse Forwarders با اضافه کردن پارامتر –ReverseForwarders به هنگام خواندن دستور New-NanoServerImage از طریق cmdlet قابل نصب می باشد مانند :
New-NanoServerImage -MediaPath f:\ -BasePath .\Base -TargetPath .\Nano1.vhd -GuestDrivers -Packages Microsoft-NanoServer-IIS-Package –ReverseForwarders
در حالت آنلاین، می توان با فراخوانی پکیج مربوطه به همراه دستور dism آن را نصب نمود.
dism /online /add-package /packagepath:c:\packages\Microsoft-OneCore-ReverseForwarders-Package.cab
dism /online /add-package /packagepath:c:\packages\en-us\Microsoft-OneCore-ReverseForwarders-Package.cab
<reboot>
- دستور اول پکیج مربوط به Reverse Forwarders را نصب خواهد کرد.
- دستور دوم زبان های مربوط به پکیج را نصب خواهد کرد.
در این مورد، c:\packages مسیر لوکالی می باشدکه برای مسیری که پکیچ مربوطه را از نانو سرور کپی شده است ایجاد کرده ایم.
بعد از نصب Reverse Forwarders چه به صورت آنلایت یا آفلاین، از طریق اجرای دستور زیر می توانید مطمئن شوید که IIS و Reverse Forwarders به درستی نصب شده اند
dism /online /get-packages
پس از اجرای فرمان شما می بایست Language packs for Microsoft-NanoServer-IIS-Package و Microsoft-OneCore-ReverseForwarders-Package را مشاهده کنید
نصب HttpPlatformHandler
در حال حاضر نصب HttpPlatformHandler در نانو فقط به صورت دستی امکان پذیر می باشد .
با توجه به اینکه نانو فقط در ورژن ۶۴ بیت وجود دارد بنابرین شما می بایست آخرین ورژن ۶۴ بیت HttpPlatformHandler را در یک ماشین عادی( غیر Nano ) نصب کنید که از لینک زیر می توانید دانلود نمائید:
http://www.iis.net/downloads/microsoft/httpplatformhandler
پس از اینکه ورژن x64 از HttpPlatformHandler بر روی ماشین عادی ( غیر Nano ) شما نصب شد، ۲ فایل وجود دارد که می بایست در ماشین نانو کپی کنیم :
- %windir%\System32\inetsrv\httpPlatformHandler.dll
- %windir%\System32\inetsrv\config\schema\httpplatform_schema.xml
در ماشین نانو شما نیاز دارید که آن دو فایل را در مکان مرتبط به خودشان کپی نمائید.( dll->inetsrv, schema file->inetsrv\config\schema )
- copy .\httpPlatformHandler.dll c:\Windows\System32\inetsrv
- copy .\httpplatform_schema.xml c:\Windows\System32\inetsrv\config\schema
فعال نمودن HttpPlatformHandler ( PowerShell )
شما می توانید مراحل زیر را از طریق ارتباط ریموت PowerShell به ماشین نانو سرور اجرا نمائید.
توجه نمائید که مراحل زیر در سیستمی که برای اولین بار این کار را انجام می دهید عمل خواهد کرد، در صورتی که شما این عملیات را چندین بار تکرار نمائید باعث ایجاد چندین ورودی خواهد شد و به مشکل برخورد خواهید کرد. در صورتی که در چنین وضعیتی قرار گرفته اید می توانید از بک آپ applicationhost.config استفاده نمائید که در مسیر %systemdrive%\inetpub\history قرار دارد.
Import-Module IISAdministration
$sm = Get-IISServerManager
# Add AppSettings section (for Asp.Net Core)
$sm.GetApplicationHostConfiguration().RootSectionGroup.Sections.Add(“appSettings”)
# Unlock handlers section
$appHostconfig = $sm.GetApplicationHostConfiguration()
$section = $appHostconfig.GetSection(“system.webServer/handlers”)
$section.OverrideMode=”Allow”
# Add httpPlatform section to system.webServer
$sectionHttpPlatform = $appHostConfig.RootSectionGroup.SectionGroups[“system.webServer”].Sections.Add(“httpPlatform”)
$sectionHttpPlatform.OverrideModeDefault = “Allow”
# Add to globalModules
$globalModules = Get-IISConfigSection “system.webServer/globalModules” | Get-IISConfigCollection
New-IISConfigCollectionElement $globalModules -ConfigAttribute @{“name”=”httpPlatformHandler”;”image”=”%SystemRoot%\system32\inetsrv\httpPlatformHandler.dll”}
# Add to modules
$modules = Get-IISConfigSection “system.webServer/modules” | Get-IISConfigCollection
New-IISConfigCollectionElement $modules -ConfigAttribute @{“name”=”httpPlatformHandler”}
$sm.CommitChanges()
فعال نمودن HttpPlatformHandler ( به صورت دستی و از طریق ویرایش applicationhost.config )
در صورتی که مراحل بالا را برای فعال نمودن HttpPlatformHandler دنبال نموده اید نیازی به انجام این مرحله نمی باشد.
پیشنهاد می شود که مرحله PowerShell را برای فعال نمودن دنبال نمائید اما در صورتی که به هر دلیل باید applicationhost.config را ویرایش نمائید طبق مراحل زیر می بایست انجام دهید :
مسیر زیر را باز نمائید :
c:\windows\system32\inetsrv\applicationHost.config
زیر تگ <configSections> مقدار زیر را وارد نمائید :
<configSections>
<section name=”appSettings” />
در قسمت system.webServer مقدار handlers را از Deny به Allow تغییر دهید:
<section name=”handlers” overrideModeDefault=”Allow” />
در قسمت system.webServer بخش جدیدی را برای httpPlatform ایجاد نمائید :
<section name=”httpPlatform” overrideModeDefault=”Allow” />
</sectionGroup>
مقدار زیر را برای globalModules اضافه نمائید :
<add name=”httpPlatformHandler” image=”%SystemRoot%\system32\inetsrv\httpPlatformHandler.dll” />
</globalModules>
مقدار زیر را برای modules اضافه نمایئد :
<add name=”httpPlatformHandler” />
</modules>
نصب اپلیکیشن Asp.Net Core
در ابتدا، اطمینان حاصل نمائید که اپلیکیشنAsp.Net Core ورژن coreclr و x64 باشد.
این مورد از این جهت بسیار مهم می باشد که دیگر ترکیبات بر روی نانو عمل نخواهد کرد.
پس از ایجاد coreclr/x64 باید تمام اپلیکیشن را به ماشین نانو کپی نمائید. در این مثال از دایرکتوری c:\HelloAspNetCore استفاده می کنیم.
در مرحله بعد وب سایتی ایجاد می کنیم و آن را به آدرسc:\HelloAspNetCore\wwwroot پوینت می نمائیم، پورت ۸۰۰۰ را برای این وب سایت استفاده می کنیم ( برای سادگی کار با Default App Pool کار می کنیم )
استفاده کردن از پورت پیش فرض ۸۰ هم مشکلی برای راه اندازی Asp.Net Core ایجاد نمی کند. اما با این وجود در محیط تست ما ترجیح دادیم که اپلیکیشن Asp.Net Core را از Default Website جدا کنیم تا در زمان وقوع مشکل عیب یابی آن سریعتر صورت گیرد.( شما می توانید مطمئن شوید که default IIS site به درستی کار می کند )
با استفاده از PowerShell :
Import-module IISAdministration
New-IISSite -Name “AspNetCoreSite” -PhysicalPath c:\HelloAspNetcore\wwwroot -BindingInformation “*:۸۰۰۰:”
ایجاد سایت به صورت دستی ( در صورتی که از روش بالا از PowerShell استفاده نکرده اید ) از طریق ویرایش فایل c:\windows\system32\inetsrv\applicationHost.config :
<sites>
<site name=”Default Web Site” id=”۱″>
<application path=”/”>
<virtualDirectory path=”/” physicalPath=”%SystemDrive%\inetpub\wwwroot” />
</application>
<bindings>
<binding protocol=”http” bindingInformation=”*:۸۰:” />
</bindings>
</site>
<site name=”AspNetCoreSite” id=”۲″>
<application path=”/”>
<virtualDirectory path=”/” physicalPath=”C:\HelloAspNetCore\wwwroot” />
</application>
<bindings>
<binding protocol=”http” bindingInformation=”*:۸۰۰۰:” />
</bindings>
</site>
… rest of xml…
</sites>
قدم بعدی این است که پورت ۸۰۰۰ را باز کنیم:
New-NetFirewallRule -Name “AspNetCore” -DisplayName “HTTP on TCP/8000” -Protocol tcp -LocalPort 8000 -Action Allow -Enabled True
رفع عیب
ابتدا اطمینان حاصل نمائید که خود IIS به درستی نصب شده است. http://<ipaddress> می بایست صفحه پیش فرض را باز نماید ( صفحه آبی IIS ) در غیر این صورت یک یا چند مورد ابتدایی را به درستی کانفیگ نکرده اید.
ثانیا چک نمائید که اپلیکیشن شما می تواند به صورت Standalone اجرا گردد. به عنوان مثال : c:\HelloAspNetCore\approot\web.cmd
سوما چک نمائید که لاگ هایی که توسط HttpPlatformHandler در حال ایجاد شدن می باشد را می توانید مشاهده کنید: c:\HelloAspNetCore\logs