공유 IIS 서버를 실행하는 Python 초보자에게 Django / Python 설치를 설명하는 방법 [닫기]


9

내가 통제 할 수없는 이유로 당사 웹 사이트는 서버에 IIS를 사용하는 호스팅 제공 업체와 호스팅됩니다. 그들은 현재 cgi-scripts를 통해 PHP와 ASP, 그리고 Python과 Perl을 제공합니다.

웹 사이트를 다시 디자인하고 다시 작성하고 PHP에서 Python / Django 설정으로 변경하고 싶습니다. 호스팅 제공 업체는 제안을 할 수 있지만 "파이썬이 무엇인지, 어떻게 작동하는지는 알지 못하지만 설명 할 수 있으면 원하는대로 설정하도록 노력할 것입니다." .

그러나 아파치 / mod_python의 공유 호스팅 환경에서 Django를 설정하는 방법을 알고있을 수도 있지만 IIS에서 어떻게 설정되는지, 그리고 공유 호스팅 환경에 대해 어떻게 설정되는지는 알 수 없습니다. 나는 약간의 구글 검색을했지만, 내가 찾은 대부분의 리소스는 sysadmin 1)이 Python / Django를 알고 2) 자신의 사이트에 전용 IIS 호스팅을 사용한다고 가정합니다.

누군가 내 호스팅 제공 업체에 프로세스를 설명하는 방법을 설명하거나 호스팅 제공 업체에 전달할 수있는 상세하고 유용한 리소스를 알려줄 수 있습니까? 호스팅을 실행하는 사람들은 IIS에 대해 "모든 것"을 알고 있지만 파이썬을 다루는 방법을 모릅니다.

답변:


8

IIS 사용에 문제가있는 경우 가능하면 CGI 대신 PyISAPIe를 사용하십시오. PyISAPIe에 대한 지침 및 링크는 다음과 같습니다. 웹 호스트는 Python보다 IIS를 관리하는 ISAPI 확장에 대해 훨씬 더 많이 알고 있으며 PyISAPIe를 사용하여 Python에 대해 많이 알 필요가 없습니다.

이 작업을 수행하는 훨씬 더 좋은 방법은 ISAPI 확장 인 PyISAPIe를 사용하는 것 입니다. PyISAPIe는 IIS7의 CGI보다 훨씬 빠릅니다. 이것이하는 일은 Apache의 mod_python과 비슷합니다. PyISAPIe 프로젝트 홈페이지에는 PyISAPIe를 통해 WSGI를 사용하여 Django를 설정하기위한 지시 사항이 있습니다. 이렇게하면 퍼블릭 / 트래픽 웹 사이트의 성능을 합리적인 속도로 높일 수 있습니다.

CGI 환경을 통해 IIS + Python에서 Django를 설정하는 것은 프로덕션 환경에서 엄청나게 느릴 것입니다. 분당 소수 이상의 요청을 처리 할 것으로 예상되는 웹 사이트에는이 기능을 사용해서는 안됩니다. 또한 Django 앱의 프로세스가 각각의 새로운 요청으로 다시 시작되므로 Django의 캐싱 프레임 워크에서 메모리에 캐시 할 수있는 것을 심각하게 제한합니다.

mod_python을 사용하는 Apache, lighttpd 등의 제정신 웹 서버에서 Django 프로세스를 실행하는 Python 인터프리터는 메모리에 남아 있으며 시간이 지남에 따라 많은 요청을 처리하는 각각의 새로운 Apache 작업자 스레드로 초기화됩니다. 이는 Python + Django가 각각의 새로운 요청에 대해 종료 및 재시작되지 않음을 의미합니다. FastCGI 설정에서 웹 서버 (예 : Apache 또는 lighttpd)는 FastCGI 프로토콜을 통해 FastCGI 응용 프로그램 (Django 웹 응용 프로그램)과 통신하는 소켓 (UNIX 도메인 또는 TCP)을 작성합니다. HTTP 프록시 설정을위한 Ditto (FastCGI 대신 HTTP를 사용). CGI 환경에서 Django 응용 프로그램을 실행하는 Python 인터프리터가 호출되어 각 요청마다 완전히 새로워 지므로 응용 프로그램은 요청의 상태를 메모리의 상태로 유지할 수 없으며 데이터베이스의 어느 곳에서나 올바르게 캐시 할 수 없습니다.

: 당신이 IIS + CGI + 장고를 사용해야하는 경우 충분한 고함은, 여기이 끔찍한 끔찍한 일이 달성하는 방법 을 사용하여 다음 코드 장고 응용 프로그램을 (가 CGI와 WSGI간에 변환)를 실행 자신의 CGI 스크립트를 만들 수 있습니다. Django 앱과 코드를 가리 키도록 스크립트를 약간 편집해야합니다. 이것이 요청을 전달해야하는 CGI 스크립트입니다. 다음으로 모든 요청을 CGI 스크립트로 전달 / 다시 작성해야합니다 ...

IIS6에서는 IISRewrite와 같은 mod_rewrite가 필요합니다. 무료라고 생각하지 않으며 비공개입니다. IIS7에서 Microsoft는 마침내 URL 재 작성 모듈을 포함 시켰습니다. 이에 대한 설명서는 여기있습니다 . IIS7에서 다시 쓰기 규칙을 만드는 지침은 다음같습니다 . CGI 스크립트가 처리 할 대상 기본 URL의 모든 내용을 전달하려고합니다.


호스팅이 공유되기 때문에 주요 문제는 호스팅 공급자가 내 요구와 다른 고객의 다양한 요구에 맞게 PyISAPIe를 구성하는 방법입니다. 홈페이지에서 WSGI를 사용하여 Django를 설정하는 방법을 찾을 수 없었습니다. 다른 모든 방법이 실패하면 CGI 방식을 사용하겠습니다. 주당 400 회 미만의 요청으로 호스팅 전환을 결정할 때까지 CGI 솔루션을 사용할 수 있다고 생각합니다.
Epcylon 2016 년

1

IIS의 FastCGI에서 Python을 설정하는 방법

다음은 알맞은 DJango 설정을위한 FastCGI IIS 7+에서 Python을 설정하는 방법입니다.

... 그리고 프로세스에 디버거를 연결하여 Python 코드를 단계별로 실행할 수 있습니다.

이 예제는 IIS 관리 콘솔을 사용하지 않지만 결과 구성 파일의 내용을 나열합니다.

1 단계

파이썬 + 좋은 디버거를 설치하십시오 (이 예제는 훌륭한 도구를 찾은 WingIDE를 사용합니다)이 예제는 폴더 c : \ python27을 가정합니다

2 단계

예를 들어 localhost c : \ inetpub \ wwwroot \ mypythonfolder에 웹 폴더를 만들고 다음 web.config 파일을 넣습니다.

참고 | scriptProcessor 지시문의 파이프 문자 IIS에서 스크립트를 fastCgi 응용 프로그램에 매핑하는 데 사용됩니다 (3 단계). 아래 3 단계의 전체 경로 + 파이프 문자 + 인수 설정을 문자별로 일치시켜야합니다.

3 단계

c : \ windows \ system32 \ inetsrc \ config 폴더의 applicationHost.config 파일에서 다음 섹션에 배치하십시오.

    <fastCgi>
        <application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
    </fastCgi>

4 단계

c : \ python27 \ lib \ mylib \ myfcgi.py에 다음 코드를 입력하십시오.

import wingdbstub

os, io, sys ret = "environment : \ r \ n"을 os.environ.keys ()의 매개 변수로 가져 오기 : ret = ret + "% s = % s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs :"sys.argv의 arg에 대해 : ret = ret + arg handle = io.open ( "c : \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()

5 단계

IUSR에 c : \ temp 폴더에 쓸 수있는 권한이 있는지 확인하십시오.

6 단계

wingdbstub.py 및 wingdebugpw를 c : \ python27 \ lib \ mylib \ 폴더에 넣습니다. 이것은 wingide에서 디버깅을 가능하게합니다. 이러한 파일은 윙 설치와 함께 제공됩니다. 참고 : Python에서 코드를 wingstub.pyc로 컴파일해야하는 경우, IUSR은 IIS에 의해 해당 계정으로 파이썬 프로세스가 시작되므로 해당 폴더에 대한 쓰기 권한이 필요합니다.

6 단계

wingdb를 열고 'import os, io, sys'라인에 중단 점을 설정하십시오.

7 단계

브라우저에서 적중 http : // localhost / mypythonfolder

모든 것이 올바르게 작동하면 이제 중단 지점에 실행 코드를 표시하도록 wingide가 트리거되어야합니다. 그렇지 않은 경우 :-방화벽 문제가 있습니다. 파이썬 프로세스는 tcp 연결을 통해 WingIDE 인터페이스와 통신합니다. 그렇지 않으면 wingide의 보안에 문제가 있습니다. wingidebugpw 파일의 올바른 버전이 필요합니다.이 파일에는 기본적으로 wingide 설치에 대한 액세스를 확인하는 비밀번호 또는 토큰이 포함되어 있습니다. 그렇지 않은 경우 PC에 대한 tcp 액세스 권한이있는 사용자는 코드를 디버그 할 수 있습니다.

8 단계

c : \ temp에서 로그 파일이 작성되었는지 확인하십시오. 7 단계를 진행할 수없는 경우에도 작동합니다

9 단계

이 페이지는 디버거를 트리거하지만 웹 브라우저에 어떤 페이지도 반환하지 않습니다. 일부 배경 : 웹 서버는 소위 '레코드'를 통해 fastcgi와 통신합니다. 즉, 각 단일 사용자 요청은 여러 개의 개별 '레코드'로 압축되어 애플리케이션에 제공됩니다. 각 레코드는 요청의 시작, 쿼리 문자열, 사후 변수 등을 나타내는 데이터 구조입니다. 이러한 레코드를 단일 요청으로 압축 해제하는 것은 번거롭고 http : //www.fastcgi 의 fastcgi 사양을 따릅니다 . .com / devkit / doc / fcgi-spec.html # S1

c : \ python27 \ lib \ mylib \ myfcgi.py의 내용으로 helicontech에서 제공 한 zoofcgi.py 사본을 방금 삭제했습니다. 이 python 파일은 이러한 레코드를 디코딩하고 페이지를 제공 할 수 있으며 디버깅하기에 매우 흥미 롭습니다. 또한 helicontech는 IIS와 zoofcgi.py 사이에있는 dll을 선택적으로 제공하지만이 dll이 꼭 필요한 것은 아닙니다. msft가 제공하는 fastcgi 구현의 약간 개선되고 일반적인 버전을 구현한다고 생각합니다. 그러나 dll을 사용할 때 코드를 단계별로 실행하려고하면 프로세스가 다소 신속하게 종료되고 IIS / DLL은 1 초 또는 2 이내에 응답이 없다고 결론을 내면 Python 프로세스를 종료합니다.

그게 다야. 원칙적으로 IIS와 파이썬 코드 간의 통신은 명명 된 파이프를 사용하여 수행됩니다. tcp 소켓을 사용하여 설정할 수는 있지만 어떤 포트가 사용되는지 알아낼 수 없었습니다 (stdin을 포트로 변환해야한다고 생각합니다. 모든 시도)


0

나는 이것을 파이썬으로 시도하지 않았지만 Perl의 CGI로 훌륭하게 작동했습니다. ActiveState의 제품은 IIS와 거의 통합되지 않습니다. ActivePerl로 큰 성공을 거두었습니다. 또한 ActivePython 을 가지고 있으며 아마도 아마도 거기에서 트릭을 할 것입니다. 그런 다음 Django를 설치하면 됩니다.

편집 : 좋아, IIS와의 겉보기 통합을 긁어보십시오 ... 그러나 IIS 에 통합하는 방법에 대한 기사가 있습니다. Iron Python 을 Windows 상자의 배포판으로 간주 할 수도 있습니다 .

공급자에게는 ASP / ASP.NET과 같은 웹 개발 플랫폼보다 파이썬이 그 언어로 개발하는 데 사용되는 언어 이상을 알아야한다는 것을 의심합니다.

위에서 언급 한 설치에 대해서는 시도해보고 어떻게 진행되는지 살펴 보겠습니다. 제대로 작동하면 메모를 게시하겠습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.