web deploy 이용 IIS 서버 간 마이그레이션 각


작업시 오타주의필요



1. Source Server에  Web Deploy 3.6 설치

https://www.iis.net/downloads/microsoft/web-deploy 


2. Appcmd 명령어 이용 Site 및 pool xml export


%windir%\system32\inetsrv\appcmd list apppool /config /xml > c:\apppools.xml

%windir%\system32\inetsrv\appcmd list site /config /xml > c:\sites.xml


3. Xml열어서 확인

4. Appcmd 명령어 이용 Site 및 pool xml import

%windir%\system32\inetsrv\appcmd add apppool /in < c:\temp\web\apppools.xml

%windir%\system32\inetsrv\appcmd add site /in < c:\temp\web\sites.xml


5. Msdeploy export(각 사이트별)

msdeploy -verb:getDependencies -source:metakey=lm/w3svc/1

msdeploy -verb:getDependencies -source:metakey=lm/w3svc/2

msdeploy -verb:getDependencies -source:metakey=lm/w3svc/3

msdeploy -verb:sync  -source:metakey=lm/w3svc/1 -dest:package=c:\Site1.zip > WebDeployPackage1.log

msdeploy -verb:sync  -source:metakey=lm/w3svc/2 -dest:package=c:\Site2.zip > WebDeployPackage2.log

msdeploy -verb:sync  -source:metakey=lm/w3svc/3 -dest:package=c:\Site3.zip > WebDeployPackage3.log

6. Target Server 파일 복사

a. 사이트 및 pool xml파일 : 사이트/pool 일괄

b. msdeploy zip파일 복사 

c. 웹사이트 실제소스 복사(경로확인)


7. Msdeploy import(각 사이트별)

msdeploy -verb:sync -source:package=C:\temp\web\Site1.zip -dest:metakey=lm/w3svc/1 -whatif > WebDeploySync1.log

msdeploy -verb:sync -source:package=C:\temp\web\Site2.zip -dest:metakey=lm/w3svc/2 -whatif > WebDeploySync2.log

msdeploy -verb:sync -source:package=C:\temp\web\Site3.zip -dest:metakey=lm/w3svc/3 -whatif > WebDeploySync3.log




트러블슈팅

오류코드 예시

Error Code: ERROR_EXCEPTION_WHILE_CREATING_OBJECT

[14:09:33][Step 6/6] More Information: Object of type 'package' and path 'Artifacts\ProjectName.csproj.zip' cannot be created.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_EXCEPTION_WHILE_CREATING_OBJECT.

[14:09:33][Step 6/6] Error: The Zip package 'Artifacts\ProjectName.csproj.zip' could not be loaded.

[14:09:33][Step 6/6] Error: Could not find a part of the path 'Artifacts\ProjectName.csproj.zip'.

[14:09:33][Step 6/6] Error count: 1. 

-> 원인 : msdeploy export zip파일명을 잘못 지정했음.

 

 

msdeploy export  limit 존재함, 4GB 이상 이면 오류
ERROR_PACKAGE_TOO_LARGE

Diagnosis: The package or backup being created exceeds the maximum size of 4GB.

Resolution: Use the archiveDir provider when creating a package instead. Currently there is no solution for this limit with respect to automatic backups.

 

출처: <https://docs.microsoft.com/en-us/iis/publish/troubleshooting-web-deploy/web-deploy-error-codes#errorpackagetoolarge>

 

 

msdeploy -verb:sync -source:apphostconfig="Site1" -dest:archivedir=c:\archive

 

msdeploy -verb:sync -source:archivedir=c:\archive -dest:appHostConfig="Site1",computerName=NewServer

 

 

ERROR_FRAMEWORK_VERSIONS_DO_NOT_MATCH 

아래와 같이 import 닷넷프레임워크 버전을 전부 지정해주면 실행성공함.

msdeploy -verb:sync -source:apphostconfig="WebSite1",machineconfig32.netfxversion=2,machineconfig64.netfxversion=2,

rootwebconfig32.netfxversion=2,rootwebconfig64.netfxversion=2 -dest:apphostconfig="WebSite1",machineconfig32.netfxversion=2,machineconfig64.netfxversion=2,

rootwebconfig32.netfxversion=2,rootwebconfig64.netfxversion=2, 

computername=10.1.1.19 -enablelink:AppPoolExtension -verbose –whatif

 

출처: <https://blogs.msdn.microsoft.com/ericparvin/2015/04/03/error_framework_versions_do_not_match/>

 

 

 

 

그외

Troubleshooting Common Problems with Web Deploy

 

출처: <https://docs.microsoft.com/en-us/iis/publish/troubleshooting-web-deploy/troubleshooting-common-problems-with-web-deploy>





   

   

웹서버, 사이트에서 개별 디렉토리나 파일에서 클라이언트 인증서를 사용하도록 설정한 경우

   

클라이언트가 MS IIS가 구동중인 웹서버로 긴 요청을 하게 된다면

IIS worker프로세스는 Request body(본문)전체를 다 받지 않고, 요청헤더를 분석하는데 필요한 데이터만 받을 것이다.

   

IIS worker프로세스가 클라이언트와의 연결에 대해서 재협상 혹은 데이터 리턴을 위해

클라이언트 인증서가 필요하다는 것을 알게 되어 , 다시 협상하려고 시도하나

클라이언트는 나머지 데이터를 보내려고 대기하고 있는 상태이기 때문에 클라이언트는 재연결을 없게 된다,

, 둘다 기다리게 되는 데드락 상태가 발생한다.

   

   

클라이언트 재협상연결이 요청되게 되면, 요청 엔티티 본문을 SSL preload에 미리 실려야 된다.

SSL Preload여기서 이용하는 IIS metabase 설정값이 바로 UploadReadAheadSize 이다.

   

Content 길이보다 UploadReadAheadSize  작게 설정되어 있다면 웹서버는 HTTP 413 에러를 리턴해준다.

   

   

cscript adsutil.vbs set w3svc/1/uploadreadaheadsize 65536 요건 64KB

   


클라이언트가 entity body 전체를 보내는 것이 block되지 않게 보장하려면

UploadReadAheadSize  값을 content길이보다 크게 설정해놔야 된다.

   

서버 디도스 공격의 위험때문에 클라이언트 인증서 인증을 이용하지 않는 사이트의 경우에는 64KB이상 설정은 권장하지 않는다.

   

UploadReadAheadSize를 64KB보다 높은 값으로 설정해야 하는 경우 SSLAlwaysNegoClientCert 속성을 True로 설정하여 클라이언트에 유효한 클라이언트 인증서가 설치되도록 할 것을 권장합니다.

   

   

   

   

   

기본 형용사를 수식할때

enough to V : ~하기에 충분하다

She was kind enough to show me the way. Kind하다, 충분할정도로 kind하다

   

명사를 수식하는 형용사

enough 명사 to V :   ~하기에 충분한 명사 ,

enough time to go home(집에가기에 충분한 시간)

enough money to spend (쓰기에 충분한 돈)

   

   

   




+ Recent posts