¿Cómo hacer que Python funcione con Lighttpd?

25

Tengo la configuración de Lighttpd en mi Raspberry Pi, pero me gustaría que el código del lado del servidor funcione ahora. Estoy familiarizado con PHP, pero creo que debería probar Python ya que se supone que es el lenguaje "ir a" para Raspberry Pi. ¿Cómo puedo hacer que Python maneje el código del lado del servidor a través de Lighttpd?

Mark Ingram
fuente
El enlace penzilla.net/tutorials/python/cgi está roto, pero gracias por la excelente reseña. ¡Mi Pi llega mañana!

Respuestas:

16

Lo que necesita es soporte CGI para lighttpd.

Abra el archivo de configuración lighttpd ( /etc/lighttpd/lighttpd.conf ) y elimine el comentario de la línea "mod_cgi" (elimine el # del comienzo de la línea si existe) o agregue esta línea si no está presente.

server.modules = (
            "mod_access",
            "mod_alias",
            "mod_accesslog",
            "mod_auth",
            "mod_ssi",
            "mod_cgi",
            "mod_compress",
            "mod_fastcgi",
            "mod_rewrite",
            "mod_magnet",
)

Agregue lo siguiente al final del archivo:

$HTTP["url"] =~ "^/cgi-bin/" {
        cgi.assign = ( ".py" => "/usr/bin/python" )
}

Reinicia el demonio lighttpd:

sudo service lighttpd force-reload

Luego, cree un directorio cgi-bin debajo del directorio raíz de su servidor web. Python procesará los archivos que terminen con .py en este directorio.

Ahora puede escribir scripts de Python para manejar solicitudes web. Es posible que desee leer este tutorial sobre cómo escribir programas CGI con Python .

Si por el contrario prefiere utilizar un marco para manejar algunos de los detalles de bajo nivel y mejorar la productividad del desarrollador, yo sugiero revisar web.py . Puedes instalarlo usando apt:

sudo apt-get install python-webpy

Lucas en el Blog Cloud 101 ha publicado un gran tutorial sobre cómo escribir páginas web usando el marco webpy.

Steve Robillard
fuente
¿Es esto FastCGI o CGI?
Mark Ingram
Tenga en cuenta que CGI simple requiere iniciar el intérprete de Python para cada solicitud, por lo que solo es adecuado para solicitudes ocasionales.
Thorbjørn Ravn Andersen
Por desgracia, esto solo funcionó parcialmente. Ahora puedo ejecutar python llamando a "http: // (IP) /cgi-bin/test.py?parameter=xxx" pero no a "http: // (IP) /cgi-bin/test.cgi?parameter=xxx "- el último da un error 404 ...
576i
@ 576i Intente cambiar esta línea cgi.assign = (".py" => "/ usr / bin / python") a cgi.assign = (".cgi" => "/ usr / bin / python")
Steve Robillard
1
@ 576i En lugar de continuar esta discusión en los comentarios de otra pregunta, abra una nueva pregunta e incluya lo que funciona y lo que ha intentado. Luego eliminaré estos comentarios. Por cierto, ¿por qué no puedes simplemente usar la extensión .py, que dijiste que funciona?
Steve Robillard
3

La respuesta aceptada no funcionó para mí y también ignora los paquetes preconfigurados que están disponibles para Lighttpd.

La forma correcta de instalar Python en Lighttpd para Raspberry es:

Primero habilite cgi por

sudo lighttpd-enable-mod cgi

Esto crea un nuevo archivo de configuración para Lighttpd:

/etc/lighttpd/conf-enabled/10-cgi.conf

Edite el archivo de configuración nano /etc/lighttpd/conf-enabled/10-cgi.confpara que sea similar a este

server.modules += ( "mod_cgi" )

$HTTP["url"] =~ "^/cgi-bin/" {
        alias.url += ( "/cgi-bin/" => "/var/www/cgi-bin" )
        cgi.assign = (
                ".py"  => "/usr/bin/python",
        )
}

Asegúrese de que python 2 esté instalado ejecutando:

/usr/bin/python --version

Ahora reinicia

sudo /etc/init.d/lighttpd force-reload

¡Buena suerte!

NDB
fuente