.NET Core 3.0 - IIS 배포 방법
ASP.NET Core 3.0 - IIS에 배포하는 방법
.NET Core 3.0으로 ASP.NET Core 프로그램을 작성한 후, 이를 IIS의 웹사이트로 배포하는 방법에 대해 알아보자.
.NET Core 3.0으로 작성된 웹 프로젝트는 실제 콘솔 프로젝트(Console Project)로서 빌드시 EXE 파일을 생성한다.
(1) .NET Core Windows Hosting 설치
IIS에서 .NET Core 3.0 웹프로그램을 사용하기 위해서는 "ASP.NET Core/.NET Core: Runtime & Hosting Bundle"을
설치해야 한다. 이 번들에는 IIS에서 .NET Core 프로그램을 위해 사용하는 HTTP Handler인 AspNetCoreModuleV2 모듈이
포함되어 있다. IIS는 AspNetCoreModuleV2 모듈을 통해 .NET Core 웹프로그램과 통신하게 된다.
.NET Core 3.0 Hosting Bundle은 https://dotnet.microsoft.com/download/dotnet-core/3.0 에서 아래 그림에서와 같이
다운받아 설치하면 된다.
만약 AspNetCoreModuleV2 모듈이 설치되어 있지 않으면, IIS는 .NET Core 3.0 웹프로그램을 인식하지 못하고,
web.config 에 오류가 있는 것으로 표시할 것이다. 즉, VS Publish (혹은 dotnet publish)에서 자동 생성하는
web.config는 AspNetCoreModuleV2 모듈을 지정하고 있는데, AspNetCoreModuleV2 모듈이 없으므로, web.config 에
문제가 있는 것으로 표시하는 것이다.
.NET Core Windows Hosting Bundle이 설치된 후에는 다음 명령을 실행하여 IIS에서 Windows Hosting을 인식하도록 한다.
C> net stop was
C> net start w3svc
한가지 주의할 점은 Windows Hosting Bundle을 설치한 이후에 IIS를 설치했다면, Windows Hosting Bundle를 재설치 혹은 Repair
해야 한다.
(2) 웹프로그램 Publish
Visual Studio의 Solution Explorer에서 프로젝트를 선택하고 오른쪽 마우스 버튼을 눌러 Publish 메뉴를 선택하면,
웹 프로그램을 IIS로 옮길 수 있도록 한 Publish 기능을 사용할 수 있다.
아래는 64비트/Self-Contained 모드로 폴더에 Publish하는 것을 예시 한 것이다.
Self-Contained 모드로 하면 머신에 .NET Core 3가 설치되어 있지 않더라도 해당 폴더만 그대로 복사하면 프로그램이
동작하도록 필요한 모든 파일들을 폴더에 가지게 된다.
VS에서 Publish 하는 방법이외에 dotnet 콘솔 명령을 사용하여 간단하게 Publish 할 수도 있다.
즉, 아래 dotnet publish 명령을 프로젝트 폴더에서 수행하면 Publish 파일들이 생성된다.
C> dotnet publish -c Release -r win-x64
Publish 폴더의 파일들을 IIS가 있는 머신으로 복사한다.
(3) IIS에서 웹사이트 생성
IIS에서 새 Website를 생성하고, publish 폴더를 지정한다. 이때의 웹사이트 폴더는
웹프로젝트가 생성한 EXE 파일이 있는 폴더로 지정한다. 이 폴더 안에는 web.config 파일이 있으며,
이 web.config 파일은 통상 아래와 같이 handlers와 aspNetCore 노드를 가지고 있다.
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\WebApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
IIS에서 .NET Core를 사용하는 Website의 Application Pool은 아래와 같이 CLR Version 부분에서 "No Managed Code"를 사용해야 한다.