- PVSM.RU - https://www.pvsm.ru -
Представляем первую из пяти статей, посвященных работе с ASP.NET Core: руководство по развертыванию приложения ASP.NET Core на Nano Server со службами IIS.
Nano Server — это вариант установки Windows Server 2016, который имеет более компактный размер и более широкие возможности обслуживания и обеспечения безопасности по сравнению с Server Core и полным вариантом установки. Более подробная информация приведена в официальной документации [1] по варианту установки Nano Server. Существует три способа начать с ним работу:
1. Загрузить ISO-файл Windows Server 2016 Technical Preview 5 и создать образ Nano Server.
2. Загрузить Nano Server VHD для разработчиков.
3. Создать виртуальную машину в Azure, используя образ Nano Server из Azure Gallery. Если у вас нет учетной записи Azure, вы можете создать бесплатную учетную запись с 30-дневным пробным периодом.
В данном материале используется заранее созданный Nano Server VHD для разработчиков [2] из Windows Server Technical Preview 5.
Далее вам понадобится созданное и опубликованное [3] 64-битное приложение ASP.NET Core.
Создайте [4] новую виртуальную машину Hyper-V, используя предварительно загруженный файл VHD. Прежде чем войти в систему, необходимо задать пароль администратора. Для этого нужно нажать клавишу F11 в консоли виртуальной машины.
После создания пароля Nano Server может управляться удаленно при помощи PowerShell.
Откройте окно PowerShell с повышенными привилегиями, чтобы добавить удаленный экземпляр Nano Server в список TrustedHosts
.
$nanoServerIpAddress = "10.83.181.14"
Set-Item WSMan:localhostClientTrustedHosts "$nanoServerIpAddress" -Concatenate -Force
Примечание: замените переменную $nanoServerIpAddress
на используемый IP-адрес.
После добавления экземпляра Nano Server в список TrustedHosts
выполните удаленное подключение к нему при помощи PowerShell.
$nanoServerSession = New-PSSession -ComputerName $nanoServerIpAddress -Credential ~Administrator
Enter-PSSession $nanoServerSession
В случае успешного подключения появится командная строка следующего вида:
[10.83.181.14]: PS C:UsersAdministratorDocuments>
Создайте каталог общего доступа в экземпляре Nano Server, чтобы скопировать в него опубликованное приложение. В удаленном сеансе выполните следующие команды:
mkdir C:PublishedAppsAspNetCoreSampleForNano
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes
net share AspNetCoreSampleForNano=c:PublishedAppsAspNetCoreSampleForNano /GRANT:EVERYONE`,FULL
После выполнения указанных команд вы сможете открыть каталог общего доступа, введя адрес \<nanoserver-ip-address>AspNetCoreSampleForNano
в проводнике на хост-компьютере.
Выполните следующие команды в удаленном сеансе, чтобы открыть порт в брандмауэре:
New-NetFirewallRule -Name "AspNet5 IIS" -DisplayName "Allow HTTP on TCP/8000" -Protocol TCP -LocalPort 8000 -Action Allow -Enabled True
Добавьте поставщика NanoServerPackage
, выбрав его в коллекции PowerShell. После установки и импорта поставщика появится возможность устанавливать пакеты Windows.
Выполните следующие команды в PowerShell:
Install-PackageProvider NanoServerPackage
Import-PackageProvider NanoServerPackage
Install-NanoServerPackage -Name Microsoft-NanoServer-Storage-Package
Install-NanoServerPackage -Name Microsoft-NanoServer-IIS-Package
После установки компонента >Microsoft-NanoServer-Storage-Package
требуется перезагрузка. Это временная процедура и она не будет нужна в будущем.
Чтобы быстро проверить, корректно ли установлены службы IIS, перейдите по адресу http://<nanoserver-ip-address>/
— должна отобразиться стартовая страница. При установке служб IIS создается веб-сайт по умолчанию под названием Default Web Site
, для которого используется порт 80.
Модуль ASP.NET Core — это модуль IIS 7.5+, который отвечает за управление работой прослушивателей (listeners) ASP.NET Core HTTP и передачу запросов к процессам, которыми он управляет. На данный момент установка модуля ASP.NET Core для IIS осуществляется вручную. Потребуется установить пакет .NET Core Windows Server Hosting [5] на устройство с обычной операционной системой (не Nano Server). После установки пакета на компьютер с обычной операционной системой необходимо скопировать следующие файлы в каталог общего доступа, который был создан ранее.
На компьютере с обычной операционной системой (не Nano Server) выполните следующие команды копирования:
copy C:windowssystem32inetsrvaspnetcore.dll ``\<nanoserver-ip-address>AspNetCoreSampleForNano``
copy C:windowssystem32inetsrvconfigschemaaspnetcore_schema.xml ``\<nanoserver-ip-address>AspNetCoreSampleForNano``
На виртуальной машине Nano Server необходимо скопировать следующие файлы из каталога общего доступа, который был создан ранее, в соответствующее расположение. Выполните следующие команды копирования:
copy C:PublishedAppsAspNetCoreSampleForNanoaspnetcore.dll C:windowssystem32inetsrv
copy C:PublishedAppsAspNetCoreSampleForNanoaspnetcore_schema.xml C:windowssystem32inetsrvconfigschema
Выполните следующий скрипт в удаленном сеансе:
# Backup existing applicationHost.config
copy C:WindowsSystem32inetsrvconfigapplicationHost.config C:WindowsSystem32inetsrvconfigapplicationHost_BeforeInstallingANCM.config
Import-Module IISAdministration
# Initialize variables
$aspNetCoreHandlerFilePath="C:windowssystem32inetsrvaspnetcore.dll"
Reset-IISServerManager -confirm:$false
$sm = Get-IISServerManager
# Add AppSettings section
$sm.GetApplicationHostConfiguration().RootSectionGroup.Sections.Add("appSettings")
# Set Allow for handlers section
$appHostconfig = $sm.GetApplicationHostConfiguration()
$section = $appHostconfig.GetSection("system.webServer/handlers")
$section.OverrideMode="Allow"
# Add aspNetCore section to system.webServer
$sectionaspNetCore = $appHostConfig.RootSectionGroup.SectionGroups["system.webServer"].Sections.Add("aspNetCore")
$sectionaspNetCore.OverrideModeDefault = "Allow"
$sm.CommitChanges()
# Configure globalModule
Reset-IISServerManager -confirm:$false
$globalModules = Get-IISConfigSection "system.webServer/globalModules" | Get-IISConfigCollection
New-IISConfigCollectionElement $globalModules -ConfigAttribute @{"name"="AspNetCoreModule";"image"=$aspNetCoreHandlerFilePath}
# Configure module
$modules = Get-IISConfigSection "system.webServer/modules" | Get-IISConfigCollection
New-IISConfigCollectionElement $modules -ConfigAttribute @{"name"="AspNetCoreModule"}
# Backup existing applicationHost.config
copy C:WindowsSystem32inetsrvconfigapplicationHost.config C:WindowsSystem32inetsrvconfigapplicationHost_AfterInstallingANCM.config
Примечание: удалите файлы aspnetcore.dll
и aspnetcore_schema.xml
из каталога общего доступа после завершения предыдущего шага.
Если вы опубликовали переносимое приложение, платформа .NET Core должна быть установлена на целевом компьютере. Выполните следующие скрипты в удаленном сеансе Powershell, чтобы установить .NET Framework на виртуальной машине Nano Server:
$SourcePath = "https://go.microsoft.com/fwlink/?LinkID=809115"
$DestinationPath = "C:dotnet"
$EditionId = (Get-ItemProperty -Path 'HKLM:SOFTWAREMicrosoftWindows NTCurrentVersion' -Name 'EditionID').EditionId
if (($EditionId -eq "ServerStandardNano") -or
($EditionId -eq "ServerDataCenterNano") -or
($EditionId -eq "NanoServer") -or
($EditionId -eq "ServerTuva")) {
$TempPath = [System.IO.Path]::GetTempFileName()
if (($SourcePath -as [System.URI]).AbsoluteURI -ne $null)
{
$handler = New-Object System.Net.Http.HttpClientHandler
$client = New-Object System.Net.Http.HttpClient($handler)
$client.Timeout = New-Object System.TimeSpan(0, 30, 0)
$cancelTokenSource = [System.Threading.CancellationTokenSource]::new()
$responseMsg = $client.GetAsync([System.Uri]::new($SourcePath), $cancelTokenSource.Token)
$responseMsg.Wait()
if (!$responseMsg.IsCanceled)
{
$response = $responseMsg.Result
if ($response.IsSuccessStatusCode)
{
$downloadedFileStream = [System.IO.FileStream]::new($TempPath, [System.IO.FileMode]::Create, [System.IO.FileAccess]::Write)
$copyStreamOp = $response.Content.CopyToAsync($downloadedFileStream)
$copyStreamOp.Wait()
$downloadedFileStream.Close()
if ($copyStreamOp.Exception -ne $null)
{
throw $copyStreamOp.Exception
}
}
}
}
else
{
throw "Cannot copy from $SourcePath"
}
[System.IO.Compression.ZipFile]::ExtractToDirectory($TempPath, $DestinationPath)
Remove-Item $Temp</code>
Path
}
Скопируйте опубликованное приложение в каталог общего доступа.
Возможно, потребуется внести изменения в файл web.config
, чтобы указать каталог, в который извлечен файл dotnet.exe
. Другой способ — скопировать файл dotnet.exe
в тот же каталог.
Пример файла web.config
в ситуации, когда файл dotnet.exe
не скопирован в тот же каталог:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="C:dotnetdotnet.exe" arguments=".AspNetCoreSampleForNano.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" forwardWindowsAuthToken="true" />
</system.webServer>
</configuration>
Выполните следующие команды в удаленной сессии, чтобы создать новый веб-сайт в IIS для опубликованного приложения. В этом скрипте для упрощения используется DefaultAppPool
. Более подробная информация о работе с пулом приложений приведена в статье Application Pools [6].
Import-module IISAdministration
New-IISSite -Name "AspNetCore" -PhysicalPath c:PublishedAppsAspNetCoreSampleForNano -BindingInformation "*:8000:"
Если используется Nano Server Technical Preview 5 c .NET Core CLI, необходимо скопировать файлы DLL из каталога c:windowssystem32forwarders
в каталог c:Program FilesdotnetsharedMicrosoft.NETCore.App1.0.0
и в каталог двоичных файлов .NET Core c:dotnet
(в данном примере). Это вызвано ошибкой, которая устранена в более новых версиях.
Если используется команда dotnet publish
, скопируйте также файлы DLL из каталога c:windowssystem32forwarders
в каталог публикации.
Если система Nano Server Technical Preview 5 была обновлена или изменена, повторите данную процедуру, так как файлы DLL также могли быть обновлены.
Опубликованное веб-приложение должно быть доступно в браузере по адресу http://<nanoserver-ip-address>:8000
. Если ведение журнала сконфигурировано так, как указано в разделе Создание и перенаправление логов [7], все журналы доступны в каталоге C:PublishedAppsAspNetCoreSampleForNanologs
.
В данном материале используется предварительный выпуск варианта установки Nano Server, который доступен в Windows Server Technical Preview 5. Программное обеспечение на виртуальном образе жесткого диска может использоваться только для целей внутренней демонстрации и тестирования. Данное программное обеспечение не предназначено для использования в производственной среде. Дату окончания действия ознакомительной версии можно узнать здесь [8].
Автор: Microsoft
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/microsoft/192500
Ссылки в тексте:
[1] документации: https://technet.microsoft.com/en-us/library/mt126167.aspx
[2] Nano Server VHD для разработчиков: https://msdn.microsoft.com/en-us/virtualization/windowscontainers/nano_eula
[3] опубликованное: https://docs.asp.net/en/latest/publishing/index.html
[4] Создайте: https://technet.microsoft.com/en-us/library/hh846766.aspx
[5] .NET Core Windows Server Hosting: https://dot.net/
[6] Application Pools: https://docs.asp.net/en/latest/hosting/apppool.html#apppool
[7] Создание и перенаправление логов: https://docs.asp.net/en/latest/hosting/aspnet-core-module.html#log-redirection
[8] здесь: https://go.microsoft.com/fwlink/?LinkId=624232
[9] Источник: https://habrahabr.ru/post/310996/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.