다음을 통해 공유


IIS용 Python 웹앱 구성

Windows 컴퓨터에서 IIS(인터넷 정보 서비스)를 웹 서버로 사용하는 경우(Azure Windows 가상 머신 포함) PYTHON 웹 애플리케이션을 구성하여 IIS가 Python 코드를 제대로 처리할 수 있도록 해야 합니다. 구성은 Python 웹앱에 대한 web.config 파일의 설정을 통해 수행됩니다. 이 문서에서는 필요한 설정을 구성하는 방법을 설명합니다.

필수 구성 요소

  • Windows에 Python이 설치되었습니다. 웹앱을 실행하려면 먼저 Python 인터프리터 설치 설명한 대로 Windows 호스트 컴퓨터에 직접 필요한 버전의 Python을 설치합니다.

    • python.exe 인터프리터의 위치를 식별합니다. 편의를 위해 해당 위치를 PATH 환경 변수에 추가할 수 있습니다.
  • 필수 패키지가 설치되어 있습니다. 전용 호스트의 경우 전역 Python 환경을 사용하여 가상 환경이 아닌 앱을 실행할 수 있습니다. 따라서 pip install -r requirements.txt 명령을 실행하여 모든 앱 요구 사항을 전역 환경에 설치할 수 있습니다.

Python 인터프리터를 가리키도록 web.config 설정

Python 애플리케이션에 대한 web.config 파일은 HttpPlatformHandler(권장) 또는 FastCGI를 통해 Python 요청을 처리하는 방법에 대해 Windows에서 실행되는 IIS 웹 서버(버전 7 이상)에 지시합니다. Visual Studio 버전 2015 및 이전 버전에서 이러한 수정을 자동으로 수행합니다. Visual Studio 2017 이상의 경우 web.config 파일을 수동으로 수정해야 합니다.

프로젝트에 web.config 파일이 아직 없는 경우 프로젝트 디렉터리를 마우스 오른쪽 단추로 클릭하고 추가 > 새 항목 선택하고 web.config 검색하거나 빈 web.config XML 파일을 만들어 추가할 수 있습니다.

옵션 1: HttpPlatformHandler 구성

HttpPlatform 모듈은 소켓 연결을 독립 실행형 Python 프로세스에 직접 전달합니다. 이 통과를 사용하면 원하는 웹 서버를 실행할 수 있지만 로컬 웹 서버를 실행하는 시작 스크립트가 필요합니다. 이 방법은 일반적으로 Flask 또는 Django와 같은 Python 웹 프레임워크를 사용하여 수행됩니다. web.config 파일의 <httpPlatform> 요소에 스크립트를 지정합니다. processPath 특성은 사이트 확장의 Python 인터프리터를 가리킵니다. arguments 특성은 로컬 웹 서버를 실행하는 시작 스크립트(이 경우 runserver.py) 및 제공하려는 인수를 가리킵니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="c:\python36-32\python.exe"
                  arguments="c:\home\site\wwwroot\runserver.py --port %HTTP_PLATFORM_PORT%"
                  stdoutLogEnabled="true"
                  stdoutLogFile="c:\home\LogFiles\python.log"
                  startupTimeLimit="60"
                  processesPerApplication="16">
      <environmentVariables>
        <environmentVariable name="SERVER_PORT" value="%HTTP_PLATFORM_PORT%" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

이 예제에서 HTTP_PLATFORM_PORT 환경 변수에는 로컬 서버가 localhost연결을 수신 대기해야 하는 포트가 포함됩니다. 이 예제에서는 SERVER_PORT다른 환경 변수를 만드는 방법도 보여 줍니다. 필요에 따라 환경 변수를 만들고 할당할 수 있습니다.

옵션 2: FastCGI 처리기 구성

또는 FastCGI를 사용하여 앱을 구성할 수 있습니다. FastCGI는 요청 수준에서 작동하는 인터페이스입니다. IIS는 들어오는 연결을 수신하고 하나 이상의 영구 Python 프로세스에서 실행되는 WSGI 앱에 각 요청을 전달합니다.

메모

FastCGI를 사용하여 프로젝트를 설정할 수 있지만 WFastCGI 프로젝트가 더 이상 유지 관리되지 않고 버그가 발생할 수 있으므로 HttpPlatformHandler 사용하여 앱을 구성하는 것이 좋습니다.

FastCGI를 사용하려면 먼저 pypi.org/project/wfastcgi/설명된 대로 wfastcgi 패키지를 설치하고 구성합니다.

다음으로, python.exe 실행 파일의 전체 경로와 PythonHandler 키에 wfastcgi.py 파일을 포함하도록 애플리케이션의 web.config 파일을 수정합니다. 다음 단계에서는 Python이 c:\python36-32 폴더에 설치되고 앱 코드가 c:\home\site\wwwroot 폴더에 있다고 가정합니다. 경로에 맞게 이러한 값을 조정합니다.

  1. 경로가 Python 설치 위치와 일치하게 web.config 파일의 PythonHandler 항목을 수정합니다. 자세한 내용은 IIS 구성 참조(iis.net)를 참조하세요.

    <system.webServer>
       <handlers>
         <add name="PythonHandler" path="*" verb="*" modules="FastCgiModule"
             scriptProcessor="c:\python36-32\python.exe|c:\python36-32\wfastcgi.py"
             resourceType="Unspecified" requireAccess="Script"/>
       </handlers>
    </system.webServer>
    
  2. web.config 파일의 <appSettings> 섹션에서 WSGI_HANDLER, WSGI_LOG(선택 사항) 및 PYTHONPATH키를 추가합니다.

    <appSettings>
       <add key="PYTHONPATH" value="c:\home\site\wwwroot"/>
       <!-- The handler here is specific to Bottle; see the next section. -->
       <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
       <add key="WSGI_LOG" value="c:\home\LogFiles\wfastcgi.log"/>
    </appSettings>
    

    이러한 <appSettings> 값은 앱에서 환경 변수로 사용할 수 있습니다.

    • PYTHONPATH 키의 값은 자유롭게 확장할 수 있지만 앱의 루트를 포함해야 합니다.
    • WSGI_HANDLER 키는 앱에서 가져올 수 있는 WSGI 앱을 가리킵니다.
    • WSGI_LOG 키는 선택 사항이지만 키는 앱 디버깅에 권장됩니다.
  3. 사용 중인 프레임워크에 맞게 web.config 파일의 WSGI_HANDLER 항목을 설정합니다.

    • Bottle: 이 예제와 같이 app.wsgi_app 값 뒤의 괄호를 추가합니다. 개체가 변수가 아닌 함수이기 때문에 괄호가 필요합니다. app.py 파일에서 구문을 볼 수 있습니다.

      <!-- Bottle apps only -->
      <add key="WSGI_HANDLER" value="app.wsgi_app()"/>
      
    • Flask: <project_name> 프로젝트의 이름과 일치하는 경우 WSGI_HANDLER 값을 <project_name>.app로 변경하세요. runserver.py 파일에서 from <project_name> import app 문을 보면 정확한 식별자를 찾을 수 있습니다. 예를 들어 프로젝트 이름이 FlaskAzurePublishExample경우 항목은 다음과 같이 표시됩니다.

      <!-- Flask apps only: Change the project name to match your app -->
      <add key="WSGI_HANDLER" value="FlaskAzurePublishExample.app"/>
      
    • Django: Django 프로젝트의 web.config 파일에 두 가지 변경이 필요합니다.

      • WSGI_HANDLER 값을 django.core.wsgi.get_wsgi_application()변경합니다. 개체가 wsgi.py 파일에 있습니다.

        <!-- Django apps only -->
        <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()"/>
        
      • WSGI_HANDLER 키에 대한 항목 바로 다음에 다음 항목을 추가합니다. DjangoAzurePublishExample 값을 프로젝트의 이름으로 바꿉합니다.

        <add key="DJANGO_SETTINGS_MODULE" value="django_iis_example.settings" />
        
  4. Django 앱은: Django 프로젝트의 settings.py 파일에서 ALLOWED_HOSTS 항목에 사이트 URL 도메인 또는 IP 주소를 추가합니다. '1.2.3.4'를 URL 또는 IP 주소로 대체합니다.

    # Change the URL or IP address to your specific site
    ALLOWED_HOSTS = ['1.2.3.4']
    

    배열 결과에 URL을 추가하지 않으면 다음 오류가 표시됩니다.

    DisallowedHost at / Invalid HTTP_HOST header: '\<site URL\>'. You might need to add '\<site URL\>' to ALLOWED_HOSTS.
    

배열이 비어 있으면 Django는 자동으로 'localhost''127.0.0.1'을 호스트로 허용합니다. 프로덕션 URL을 추가하는 경우 이러한 호스트 사이트는 자동으로 허용되지 않습니다. 이러한 이유로 settings.py 파일의 별도의 개발 및 프로덕션 복사본을 유지 관리하거나 환경 변수를 사용하여 런타임 값을 제어할 수 있습니다.

IIS 또는 Windows 가상 머신에 배포

프로젝트에 올바른 web.config 파일이 있는 경우 솔루션 탐색기IIS를 실행하는 컴퓨터에 게시할 수 있습니다. 프로젝트 위에 마우스 오른쪽 버튼을 클릭하고 게시을 선택한 다음, IIS, FTP 등을 선택합니다.. 이 경우 Visual Studio는 프로젝트 파일만 서버에 복사합니다. 모든 서버 쪽 구성을 담당합니다.