Cómo explicar la instalación de Django / Python a Python-newbie ejecutando un servidor IIS compartido [cerrado]

9

Por razones que escapan a mi control, nuestro sitio web está alojado con un proveedor de alojamiento que utiliza IIS para sus servidores. Actualmente ofrecen PHP y ASP, y también Python y Perl a través de scripts cgi.

Quiero hacer un rediseño, reescribir nuestro sitio web y cambiar de PHP a una configuración de Python / Django. El proveedor de alojamiento está abierto a sugerencias, pero tiene claro que "Realmente no sabemos qué es Python o cómo funciona, pero si puede explicárnoslo, intentaremos configurarlo con lo que necesite" .

Sin embargo, podría saber cómo configurar Django en un entorno de alojamiento compartido en apache / mod_python, pero no tengo idea de cómo se configuraría en IIS, y ciertamente no cómo se configuraría para un entorno de alojamiento compartido. Busqué en Google un poco, pero la mayoría de los recursos que encuentro suponen que el administrador de sistemas 1) conoce Python / Django y 2) está usando un alojamiento IIS dedicado para su sitio.

¿Podría alguien explicarme cómo puedo explicar el proceso a mi proveedor de alojamiento o darme consejos sobre recursos buenos y detallados que puedo enviar a mi proveedor de alojamiento? Tenga en cuenta que las personas que ejecutan el alojamiento pueden saber "todo" sobre IIS, pero no tienen idea de cómo lidiar con Python.

Epcylon
fuente

Respuestas:

8

Si no puede usar IIS, use PyISAPIe en lugar de CGI si puede. Las instrucciones y enlaces para PyISAPIe están a continuación. Su proveedor de alojamiento web sabrá mucho más sobre las extensiones ISAPI si administran IIS que sobre Python, y no necesita saber mucho sobre Python con PyISAPIe.

UNA FORMA MUCHO MEJOR DE HACER ESTO ES USAR PyISAPIe, UNA EXTENSIÓN ISAPI . PyISAPIe es mucho, mucho más rápido que CGI en IIS7. Lo que esto hace es similar a mod_python en Apache. La página de inicio del proyecto PyISAPIe tiene instrucciones para configurar Django con WSGI sobre PyISAPIe. Esto elevará su rendimiento a velocidades razonables para un sitio web público / de alto tráfico.

Configurar Django en un IIS + Python a través del entorno CGI va a ser terriblemente lento para cualquier uso de producción. Nunca debe usar esto para un sitio web en el que espera atender más de un puñado de solicitudes por minuto. También lo limita severamente en lo que puede almacenar en memoria caché en el marco de almacenamiento en caché de Django, ya que el proceso de la aplicación Django se reinicia con cada nueva solicitud.

En un servidor web cuerdo como Apache, lighttpd, etc., con mod_python, el intérprete de Python que ejecuta el proceso Django permanece en la memoria y se inicializa con cada nuevo hilo de trabajo de Apache que maneja muchas solicitudes a lo largo del tiempo. Esto significa que Python + Django no se sale y se reinicia para cada nueva solicitud. En una configuración FastCGI, el servidor web (Apache o lighttpd, por ejemplo) crea un socket (dominio UNIX o TCP) a través del cual se comunica con una aplicación FastCGI (su aplicación web Django) a través del protocolo FastCGI. Lo mismo ocurre con las configuraciones de proxy HTTP (hablan HTTP en lugar de FastCGI). En un entorno CGI, se llama al intérprete de Python que ejecuta la aplicación Django, completamente nueva para cada solicitud, por lo que la aplicación no puede mantener el estado entre las solicitudes en la memoria y no puede almacenar en caché correctamente en cualquier lugar que no sea en una base de datos.

Suficiente despotricar, si debe usar IIS + CGI + Django, aquí le mostramos cómo lograr esta horrible cosa horrible: Use el siguiente código para crear su propio script CGI que ejecute su aplicación Django (se traduce entre CGI y WSGI). Tendrá que editar un poco el script para que apunte a su aplicación y código de Django. Esa es la secuencia de comandos CGI a la que tendrías que pasar solicitudes. A continuación, debe reenviar / reescribir todas las solicitudes a su script CGI ...

Bajo IIS6, necesitará un equivalente mod_rewrite como IISRewrite, que creo que no es gratuito y es de código cerrado. Bajo IIS7, Microsoft finalmente incluyó un módulo de reescritura de URL. La documentación para ello se encuentra aquí . Las instrucciones para crear reglas de reescritura en IIS7 están aquí . Deberá reenviar todo en la URL base de destino para que lo maneje su script CGI.

usuario6281
fuente
Dado que el alojamiento es compartido, el problema principal es cómo el proveedor de alojamiento configuraría PyISAPIe para satisfacer mis necesidades, y también las diferentes necesidades de sus otros clientes. No pude encontrar las instrucciones para configurar Django con WSGI en la página de inicio ... Si todo lo demás falla, usaré el enfoque CGI. Con menos de 400 solicitudes por semana , creo que podemos vivir con la solución CGI hasta que decidamos cambiar de hosting.
Epcylon
1

Cómo configurar Python en FastCGI en IIS

Aquí se explica cómo configurar Python en FastCGI IIS 7+ con el camino abierto para una configuración decente de DJango

... y poder enganchar un depurador en el proceso que le permita avanzar a través de su código Python

Este ejemplo no usa la consola de administración de IIS pero enumera el contenido de los archivos de configuración resultantes

Paso 1

Instale Python + un buen depurador (este ejemplo usa WingIDE, que encontré una herramienta excelente) Este ejemplo asume la carpeta c: \ python27

Paso 2

Cree una carpeta web, por ejemplo, en localhost c: \ inetpub \ wwwroot \ mypythonfolder y coloque el siguiente archivo web.config en ella:

Tenga en cuenta el | carácter de canalización en la directiva scriptProcessor. IIS lo utiliza para asignar el script a una aplicación fastCgi (paso 3). Debe coincidir carácter por carácter con la configuración de ruta completa + carácter de tubería + argumentos del paso 3 a continuación.

Paso 3

En el archivo applicationHost.config en la carpeta c: \ windows \ system32 \ inetsrc \ config, coloque lo siguiente en la sección:

    <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>

Paso 4

En c: \ python27 \ lib \ mylib \ myfcgi.py ponga el siguiente código:

import wingdbstub

import os, io, sys ret = "ambiente: \ r \ n" para param en os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" para arg en sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()

Paso 5

Asegúrese de que IUSR tenga derechos para escribir en su carpeta c: \ temp

Paso 6

Coloque wingdbstub.py y wingdebugpw en su carpeta c: \ python27 \ lib \ mylib \. Esto permitirá la depuración en wingide. Estos archivos se proporcionan con la instalación de su ala. Nota: si Python también necesita compilar su código en wingstub.pyc, IUSR necesita derechos de escritura en esa carpeta ya que IIS lanzará el proceso de Python bajo esa cuenta

Paso 6

Abra wingdb y establezca un punto de interrupción en la línea 'import os, io, sys'

Paso 7

Presiona en tu navegador http: // localhost / mypythonfolder

Si todo funciona correctamente, ahora se debe activar wingide para mostrar el código de ejecución en su punto de interrupción. De lo contrario: hay un problema con el firewall. El proceso de python se comunica con la interfaz WingIDE a través de una conexión tcp, o hay un problema con la seguridad dentro de wingide. Necesita la versión adecuada del archivo wingdebugpw, que básicamente contiene una contraseña o token que valida el acceso contra su instalación de wingide. Si este no fuera el caso, cualquier persona con acceso tcp a su PC podría depurar su código.

Paso 8

Verifique que en c: \ temp se cree el archivo de registro. Esto también debería funcionar si no puede iniciar el paso 7

Paso 9

Tenga en cuenta que esta página activa el depurador pero no devuelve ninguna página al navegador web. Algunos antecedentes: el servidor web comunica fastcgi a través de los llamados 'registros'. Esto significa que cada solicitud de usuario entra en su aplicación empaquetada en múltiples 'registros' separados. Cada registro es una estructura de datos que indica el comienzo de una solicitud, la cadena de consulta, las variables de publicación, etc. El desempaquetado de estos registros en una sola solicitud es algo engorroso, sigue la especificación fastcgi de http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1

Como contenido de c: \ python27 \ lib \ mylib \ myfcgi.py, acabo de dejar caer una copia de zoofcgi.py proporcionada por helicontech. Este archivo de Python puede decodificar estos registros y servir una página y es bastante interesante para depurar. También tenga en cuenta que helicontech opcionalmente proporciona un dll que se encuentra entre IIS y zoofcgi.py, pero este dll no es estrictamente necesario. Creo que implementa una versión ligeramente mejorada y genérica de la implementación fastcgi que ofrece msft. Sin embargo, cuando usa su dll, cuando desea recorrer su código, el proceso finaliza bastante rápido e IIS / la DLL mata su proceso de Python cuando concluye que no hay respuesta en un segundo o segundo.

Eso es. En principio, la comunicación entre IIS y su código de Python se realiza con canalizaciones con nombre. Debería poder configurarlo usando sockets tcp pero no pude averiguar qué puerto se usa (creo que el stdin debe transformarse en el puerto que luego se puede seleccionar () ed pero no di eso cualquier intento)

Robert van Geel
fuente
0

No he intentado esto con Python, pero funcionó muy bien como CGI con Perl. Los productos de ActiveState se integran aparentemente con IIS. Tuve un gran éxito con ActivePerl. También tienen ActivePython que podría (probablemente) también hacer el truco allí. Entonces creo que simplemente descargarías Django para instalarlo .

EDITAR: Ok, así que descarta la integración sin sentido con IIS ... SIN EMBARGO, aquí hay un artículo sobre cómo integrarse en IIS . También puede considerar Iron Python como su distribución para un cuadro de Windows.

Para el proveedor, dudaría que necesiten saber más de lo que es una plataforma de desarrollo web como ASP / ASP.NET y que Python es el lenguaje utilizado para desarrollar con él.

En cuanto a la instalación que menciono anteriormente, voy a probar eso y ver cómo le va. Publicaré notas si lo hago funcionar bien!

squillman
fuente