본문 바로가기

C#/C# FullStack

ASP.NET core 웹앱, Blazor IIS 배포

서버 관리자 실행 
 

역할 및 기능 추가
 

IIS 배포를 위해 필요한 기능 추가
WebDAV 게시는 설치하지 말것. 설치하게 되면 API의 PUT, DELETE를 구분하지 못하게 된다.
 
 

추가적으로 설치할 것들 

 
https://dotnet.microsoft.com/ko-kr/
dotnet framework 버전에 따른 hosting bundle


당연히 dotnet sdk는 설치해야함
추가적으로 윈도우 플랫폼 인스톨러(윈도우 기능 켜기 끄기에서 다운받을 수 있음), URL 재작성 도구를 설치해준다. 
 
*URL 재작성 도구: 외부에서 test/333/kkk 를 호출하게 되면
제 서버에서는 test.asp?id=333&str=kkk 로 재작성해준다. 블레이저 페이지 경로를 /{name}/{age:int}/{id} 와 같은 형식으로 작성할 때가 많은데 그것 때문에 필요한 듯 하다. 
참고: https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=mandolle7&logNo=221740051811

WebPlatformInstaller_x64_en-US.zip
1.62MB
rewrite_amd64_ko-KR.zip
5.24MB

 
이거 설치하지 않으면 web.config 구성이 잘못되었습니다 500에러가 뜬다. 
 
 

배포하기

비주얼 스튜디오에서 배포파일 만든다. 프로젝트 폴더 우클릭 > 게시 > 폴더 > 다음 > 마침

api, client, shared 프로젝트가 있을 경우, shared 프로젝트는 제외하고 api와 clinet 프로젝트 각각 배포파일을 만든다. 

비주얼 스튜디오 2022 기준

 

 

비주얼 스튜디오 배포 설정. 라이더로 배포할 일 있을 때 참고하기

 

명령어로 배포하는 법

dotnet publish --configuration release

 

 

배포 폴더 권한 설정 

배포 폴더 전체에 IIS_IUSRS 읽기, 실행 권한을 추가한다. 추가하지 않으면 배포 시 권한없음 401 에러가 뜬다. 
 

응용 프로그램 풀 설정

IIS 관리자 > 어플리케이션 풀 우클릭 > 어플리케이션 풀 추가

.net clr 버전을 관리코드 없음으로 변경 
 

응용프로그램 풀 > 고급 설정
ID가 현재 로그인한 윈도우 사용자 계정이 아니라면, ...버튼을 누른다.

현재 로그인한 윈도우 사용자계정 아이디와 비밀번호를 입력한다.

어플리케이션 풀은 api, client 각각 생성하여야 오류가 나지 않는다. 
 

사이트 생성하기

IIS 관리자 > 사이트 우클릭 > 웹 사이트 추가

 

번외

 
나중에 포트번호 변경하고 싶을 때

 
상대 경로가 같은 여러 출력 파일을 발견했습니다 에러
.NET Core 6 Found multiple publish output files with the same relative path
프로젝트 파일에서 PropertyGroup에 ErrorOnDuplicatePublishOutputFiles 속성을 false로 준다. 

<PropertyGroup>
  ...
  <ErrorOnDuplicatePublishOutputFiles>false</ErrorOnDuplicatePublishOutputFiles>
</PropertyGroup>

 

 

배포하고 페이지 접속했는데 500에러 뜰때

지금 이 페이지가 작동하지 않습니다.localhost이(가) 현재 해당 요청을 처리할 수 없습니다.

해결방법1: 디버깅 폴더(Debug/bin/.net[버전])에는 있는데 배포폴더에는 없는 파일을 확인하고 없으면 배포폴더에 복사한다. 

나의 경우 배포 폴더에 스웨거 문서 xml파일을 포함하지 않았다. 

 

해결방법2: 디버깅 폴더에는 있는데 배포 폴더에는 없는 폴더 포함시키는 법

예를 들어 배포 시에 누락되는 폴더가 Settings 인 경우, 프로젝트이름.csproj 파일을 열고  

<ItemGroup> 태그 안에 다음과 같이 적는다. 

 

 <ItemGroup>
    <Content Include="Settings\**">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
</ItemGroup>

 

 

 

 

디버깅

1. logs 폴더의 로그를 본다. 

2. 이벤트 뷰어 > 윈도우 로그 > 응용프로그램에 들어가서 IIS 관련 로그를 본다. 

 

 

이때까지 한번도 배포를 안해봤다가 출장가서 처음 IIS 배포해봤다. 혼자서도 할 수 있게 가상머신에 윈도우  서버 설치한 다음에 혼자서 배포해봐야겠다.