험프리 12월 9일, 2021에 포스트됨 공유하기 12월 9일, 2021에 포스트됨 Durch Matthias Eissing이 작성한 Installation des „RAD Server“ auf Windows 2019 (oder Windows 10) mit IIS 10(독일어)를 번역했습니다. 2020년 11월 작성된 글로, 내용 중 일부 경로 및 버전이 변경 될 수 있습니다. 독일어로된 일부 이미지를 한글/영문 이미지로 교체되었습니다. 원본 비디오(독일어)를 통해 글에 담지 못한 과정을 자세히 확인할 수 있습니다.(54분) 이글은 윈도우 서버 2019버전을 대상으로 하지만, 내용을 참고해 Windows 10 등의 다른 윈도우 버전에도 설치할 수 있습니다. 얼마전 우리는 RAD 서버를 설치할 수 있는 설치파일을 최적화했다. 최신 윈도우 버전(IIS 10; Internet Information Server, Microsoft의 웹서버)에 원할하게 설치할 수 있지만, 몇가지 고려해야하는 사항이 있다. 엠바카데로는 공식적으로 IIS7 기준으로 RAD 서버를 지원한다.(참고: DocWiki) 하지만 그것은 과거의 관행이다.... 준비물 RAD 스튜디오(델파이 / C++빌더) IDE(겟잇 패키지 매니저를 사용하기 위함. 자세한 내용은 뒤에서 설명) IIS가 설치될 윈도우 시스템(여기서는 Windows Server 2019 사용) RAD 서버 시리얼 번호 운영환경(서버) 컴퓨터에서 인터넷 연결 지침 먼저 배포 대상 시스템에 IIS를 설치한다. Windows Server 2019의 서버 관리자를 통해 설치 중(웹서버(IIS) > 관리 도구 > IIS 관리 콘솔) ISAPI 확장도 설치해야 한다.(역할 및 기능 추가에서 찾을 수 있다.) IIS가 실행 중인지 확인하기 위해 간단히 테스트 할 수 있다. (역자 주: 웹브라우저에서 http://localhost/ 이동) 다음으로, RAD 스튜디오(델파이/C++빌더)에서 RAD 서버용 설치 패키지를 다운로드 받는다. 겟잇 패키지 매너저(Tools | Getit Package Manager...) 실행 후 "RAD Server" 키워드로 검색해 찾을 수 있다. 여기에서 설치 프로그램 패키지를 다운로드 할 수 있다. 이 설치 프로그램 패키지는 실제 RAD 서버 설치(IIS, Apache용 BPL을 포함해 설치를 위한 DLL)와 InterBase 2020(RAD 서버의 구성 데이터용) 두가지가 포함되어 있다. "RAD Server Installer for Windows 1.0" 패키지를 다운로드 후 윈도우 파일 탐색기가 열리고 다운로드된 파일이 표시된다.(경로: C:\Users\<사용자 이름>\Documents\Embarcadero\Studio\<버전>\CatalogRepository\RADServerInstallerforWindows-<버전>-1.0) 주의: 버전 번호 "1.0"을 걱정하지 않기바란다. 이 패키지는 최근 자주/정기적으로 업데이트 되고있다. 위 파일 중 다음 두 파일을 대상 시스템으로 복사한다.(FTP, 파일 공유, USB 메모리 등 이용) RADServer.exe InterBase_2020_Windows.zip 이 두 파일에는 윈도우 서버에 설치하기 위한 모든 것들이 포함되어 있으며, 대상 시스템의 공통 디렉토리에 복사한다. 여기서는 바탕화면에 복사했다. RADServer.exe를 실행한다. 이 설치는 비교적 쉬운 단계이나 몇가지 고려사항이 있다. "RAD 서버 DB(InterBase 2020)"과 "RAD 서버"는 반드시 설치해야 한다. 전체설치를 권장한다. 아키텍처(32/64 비트)는 64비트로 선택해야 한다.(IIS는 32비트 ISAPI DLL 실행도 지원하지만 구성 작업이 필요하다.) Web Server : IIS(이 글에서는) Site Configuration: radserver / radconsole(URL의 엔드포인트에 반영됨) 사이트 이름(IIS 관리내의 구성: RAD 서버 / 80) 물론 80번 포트는 IIS의 표준 사이트와 충돌하지만 나중에 자세히 다룬다. 이제 InterBase 2020 서버 설치를 활성화해야 한다. 이 작은 바로 수행해야 한다.(RADServer.exe는 EMSServer.ini, InterBase 서버 등 필요한 모든 설정을 구성한다. 이를 위해 InterBase 서버는 이미 실행 중이어야 한다.) 설치 중 RAD 서버를 활성화/라이선스 적용할 수 있는 Embarcadero License Manager가 표시된다. 여기에 RAD 서버 시리얼 번호를 입력한다.(RAD 스튜디오, 델파이, InterBase 시리얼 번호가 아니다.)(역자주: RAD 서버 시리얼 번호는 제품 구입 시 받은 ESD 메일에서 찾을 수 있다.) 우측 Registrer... 버튼 클릭 > Serial Number와 계정 입력 > Register 버튼 클릭 성공: 확인 후 라이선스 매니저 창을 닫는다. 성공 후 Continue 버튼을 누른다. 나머지 설치 동안 두개의 오류 메시지가 나타나지만 문제가되지 않는다. 여기가 InterBase 서버가 실행 중인지 확인할 수 있는 좋은 기회이다. 윈도우 시작 메뉴에서 "InterBase Server Manager"를 실행하고, "Running"으로 표시됨을 확인한다. 이후 "Yes to All" 버튼을 눌러 계속 진행한다. 관심이 있는 경우(선택사항): 설치가 완료되기 전 실행된 PowerShell 명령은 %TEMP% 디렉토리에서 찾을 수 있다.(예. C:\Users\Administrator\AppData\Local\Temp\I1604922298\InstallerData\Disk1\InstData\Resource1.zip\$IA_PROJECT_DIR$). 여기에서 RADServer_IIS_Config.ps1 및 RADConsole_IIS_Config.ps1을 확인할 수 있다. RADServer_IIS_Config.ps1 BAT에서 호출 PowerShell -NoProfile -ExecutionPolicy Bypass -Command „& {Start-Process %WINDIR%\sysnative\WindowsPowerShell\v1.0\powershell.exe -ArgumentList ‚-NoExit -NoProfile -ExecutionPolicy Bypass -File „“““%PowerShellScriptPath%““““ -SiteName „““%2″““ -Port „“““%3″“““ -RootPath „““%4″““ -SiteDirectory „““%5″““ -Architecture „““%6″““ -INIFilePath „““%7″““ -SelectedFeatures „““%8″““ ‚ -Verb RunAs}“; #Parameters from command line param ( [string]$SiteName, [string]$Port, [string]$RootPath, [string]$SiteDirectory, [string]$Architecture, [string]$INIFilePath, [string]$SelectedFeatures ) function Set-OrAddIniValue { Param( [string]$FilePath, [hashtable]$keyValueList ) $content = Get-Content $FilePath $keyValueList.GetEnumerator() | ForEach-Object { if ($content -match "^$($_.Key)=") { $content= $content -replace "^$($_.Key)=(.*)", "$($_.Key)=$($_.Value)" } else { $content += "$($_.Key)=$($_.Value)" } } $content | Set-Content $FilePath } #Variables used for creating iis modules $DriveSitePath = $SiteDirectory $AppPool = $RootPath $IISEMSPath = 'IIS:\sites\' + $SiteName + '\' + $RootPath $DriveEMSPath = $DriveSitePath + '\' + $RootPath $DLLPath = $DriveEMSPath + "\EMSServer.dll" $WebAppName = $RootPath $INIFile = $INIFilePath function Set-SwaggerValue { Param( [string]$FilePath ) $content = Get-Content $FilePath $replaceContent = 'url: "/'+$RootPath+'/EMSServer.dll/API/APIDoc.json",' $content= $content -replace 'url: "../API/APIDoc.json",', $replaceContent $content | Set-Content $FilePath } #needed for apppool check import-module webadministration #check if website exists with the same site name if(!(Test-Path IIS:\AppPools\$AppPool)) { #app pool doesn't exist if ((Test-Path $IISEMSPath) -and ($DriveSitePath.Contains('inetpub\wwwroot'))) { $AppPool = "DefaultAppPool" } else { #website doesn't exist #Create an application pool and website New-WebAppPool -Name $AppPool New-WebSite -Name $SiteName -Port $Port -PhysicalPath $DriveSitePath -ApplicationPool $AppPool } } # Allow EMS website to override server-wide handler configurations Set-WebConfiguration //System.webServer/handlers -metadata overrideMode -value Allow -PSPath IIS:/ -verbose # Allow execute permissions for the EMS handler Set-WebConfiguration -filter "/system.webServer/handlers/@AccessPolicy" -PSPath $IISEMSPath -value "Read, Script, Execute" -verbose # Set up the EMS handler Set-WebHandler -Name "ISAPI-dll" -Path "*.dll" -PSPath $IISEMSPath -RequiredAccess Execute -ScriptProcessor $DLLPath -ResourceType File -Modules IsapiModule -Verb '*' # Create the EMS web app New-WebApplication -Name $WebAppName -Site $SiteName -PhysicalPath $DriveEMSPath -ApplicationPool $AppPool -force # Add exception to ISAPI and CGI Restrictions Add-WebConfiguration -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/security/isapiCgiRestriction" -value @{description='EMSServerRestriction';path=$DLLPath;allowed='True'} #check if 32 bit mode was selected if ($Architecture -contains '32Bit') { # Enable 32-bit applications set-itemProperty IIS:\apppools\$AppPool -name "enable32BitAppOnWin64" -Value "true" } else { set-itemProperty IIS:\apppools\$AppPool -name "enable32BitAppOnWin64" -Value "false" } if ($SelectedFeatures -match 'SUI') { $SiteDirectory = $SiteDirectory.Replace('\', '\\') $SwaggeruiDir=$SiteDirectory+'\\swaggerui' $PublicPaths='{"path": "swaggerui", "directory": "' + $SwaggeruiDir + '", "default": "index.html", "extensions": ["js", "html", "css", "map", "png"], "charset": "utf-8"}' Set-OrAddIniValue -FilePath $INIFile -keyValueList @{ swaggerui=$PublicPaths } $SwaggeruiDir= $SwaggeruiDir.Replace("\\", "\") + "\index.html" Set-SwaggerValue -FilePath $SwaggeruiDir } RADConsole_IIS_Config.ps1 #Parameters from command line param ( [string]$SiteName, [string]$Port, [string]$RootPath, [string]$SiteDirectory, [string]$Architecture, [string]$INIFilePath, [string]$SelectedFeatures ) #This is used to search the ini file and update it to include the correct location for the resources folder function Set-OrAddIniValue { Param( [string]$FilePath, [hashtable]$keyValueList ) $content = Get-Content $FilePath $keyValueList.GetEnumerator() | ForEach-Object { if ($content -match "^$($_.Key)=") { $content= $content -replace "^$($_.Key)=(.*)", "$($_.Key)=$($_.Value)" } else { $content += "$($_.Key)=$($_.Value)" } } $content | Set-Content $FilePath } #Variables used for creating iis modules $DriveSitePath = $SiteDirectory $AppPool = $RootPath $IISEMSPath = 'IIS:\sites\' + $SiteName + '\' + $RootPath $DriveEMSPath = $DriveSitePath + '\' + $RootPath $DLLPath = $DriveEMSPath + "\EMSConsole.dll" $WebAppName = $RootPath $INIFile = $INIFilePath #needed for apppool check import-module webadministration #check if website exists with the same site name if(!(Test-Path IIS:\AppPools\$AppPool)) { #app pool doesn't exist if ((Test-Path $IISEMSPath) -and ($DriveSitePath.Contains('inetpub\wwwroot'))) { $AppPool = "DefaultAppPool" } else { #website doesn't exist #Create an application pool and website New-WebAppPool -Name $AppPool New-WebSite -Name $SiteName -Port $Port -PhysicalPath $DriveSitePath -ApplicationPool $AppPool } } # Allow EMS website to override server-wide handler configurations Set-WebConfiguration //System.webServer/handlers -metadata overrideMode -value Allow -PSPath IIS:/ -verbose # Allow execute permissions for the EMS handler Set-WebConfiguration -filter "/system.webServer/handlers/@AccessPolicy" -PSPath $IISEMSPath -value "Read, Script, Execute" -verbose # Set up the EMS handler Set-WebHandler -Name "ISAPI-dll" -Path "*.dll" -PSPath $IISEMSPath -RequiredAccess Execute -ScriptProcessor $DLLPath -ResourceType File -Modules IsapiModule -Verb '*' # Create the EMS web app New-WebApplication -Name $WebAppName -Site $SiteName -PhysicalPath $DriveEMSPath -ApplicationPool $AppPool -force # Add exception to ISAPI and CGI Restrictions Add-WebConfiguration -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webServer/security/isapiCgiRestriction" -value @{description='EMSConsoleRestriction';path=$DLLPath;allowed='True'} #check if 32 bit mode was selected if ($Architecture -contains '32Bit') { # Enable 32-bit applications set-itemProperty IIS:\apppools\$AppPool -name "enable32BitAppOnWin64" -Value "true" } else { set-itemProperty IIS:\apppools\$AppPool -name "enable32BitAppOnWin64" -Value "false" } # Optional: Allow CORS Add-WebConfigurationProperty //system.webServer/httpProtocol/customHeaders $IISEMSPath -AtIndex 0 -Name collection -Value @{name='Access-Control-Allow-Origin';value='*'} #Modify emserver.ini to include resources directory Set-OrAddIniValue -FilePath $INIFile -keyValueList @{ ResourcesFiles=$DriveEMSPath } if ($SelectedFeatures -match 'SUI') { if ($SelectedFeatures -match 'RS') { $SiteDirectory = $SiteDirectory.Replace('\', '\\') $SwaggeruiDir=$SiteDirectory+'\\swaggerui' $PublicPaths='{"path": "swaggerui", "directory": "' + $SwaggeruiDir + '", "default": "index.html", "extensions": ["js", "html", "css", "map", "png"], "charset": "utf-8"}' Set-OrAddIniValue -FilePath $INIFile -keyValueList @{ swaggerui=$PublicPaths } } } #Copy the ini file from the public documents directory to the radconsole directory #Copy-Item $INIFile -Destination $DriveEMSPath 설치가 완료되면 서버가 이미 실행되어야 한다. 🙂 그러면 다음 호출이 정상 작동해야 한다.(대상 시스템의 Internet Explorer 에서) http://localhost/radserver/emsserver.dll 또는 http://localhost/radserver/emsserver.dll/버전 Internet Explorer에서 JSON 파일을 인식하지 못할수도 있다. (선택사항)IE에서 JSON 파일을 인식하려면 다음 코드를 *.reg 확장자 파일을 만들어 실행하면 된다. ; ; Tell IE to open JSON documents in the browser. ; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" . ; [HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json] "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}" "Encoding"=hex:08,00,00,00 [HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json] "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}" "Encoding"=hex:08,00,00,00 그러면, IE에서도 작동한다. 비고, RADServer.exe 설치에는 EMSServer.ini(C:\Users\Public\Documents\Embarcadero\EMS\emsserver.ini) 파일 구성이 포함되며, 중요한 매개변수들이 설정되어 있다. 파일의 위치는 다음 레지스트리에 저장된다. HKEY_LOCAL_MACHINE\SOFTWARE\Embarcadero\EMS 개발한 BPL 파일은 파일 시스템 어느 곳에나 있을 수 있지만, EMSServer.ini의 [Server.Packages] 섹션에 등록해야 한다. 만약, RAD 서버 콘솔(http://localhost/radconsole/emsconsole.dll)이 LOADING만 제공하는 경우가 있을 수 있다. 해결책: "C:\inetpub\RADServer\radconsole\EMSDevConsole.exe"를 실행하고 로그인(consoleuser / consolepass)하면 정상 작동한다.(8081 포트 접속 후 80번 포트 접속) 로그인 이후 80번 포트로 접속 참고자료 [docwiki] Installing the RAD Server or the RAD Server Console on a Production Environment on Windows(영문) 윈도우 IIS ISAPI와 Apache 모듈 환경에 (RAD 서버 인스톨러를 사용하지 않고)배포하는 과정을 안내합니다. 설치 과정을 자세하게 확인할 수 있습니다. 1 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.