Como fazer o Python funcionar com o Lighttpd?

25

Eu tenho a configuração Lighttpd no meu Raspberry Pi, mas gostaria de obter o código do servidor funcionando agora. Eu estou familiarizado com o PHP, mas acho que devo tentar o Python, pois deveria ser a linguagem "ir para" do Raspberry Pi. Como posso obter o Python manipulando código do lado do servidor via Lighttpd?

Mark Ingram
fonte
O link penzilla.net/tutorials/python/cgi está quebrado, mas obrigado pela excelente descrição. Meu Pi chega amanhã!

Respostas:

16

O que você precisa é de suporte CGI para o lighttpd.

Abra o arquivo de configuração lighttpd ( /etc/lighttpd/lighttpd.conf ) e remova o comentário da linha "mod_cgi" (remova o # do início da linha, se houver) ou adicione essa linha se não estiver presente.

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

Adicione o seguinte na parte inferior do arquivo:

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

Reinicie o daemon lighttpd:

sudo service lighttpd force-reload

Em seguida, crie um diretório cgi-bin no diretório raiz do servidor da web. Quaisquer arquivos que terminem com .py neste diretório serão processados ​​pelo Python.

Agora você pode escrever scripts Python para lidar com solicitações da web. Você pode ler este tutorial sobre como escrever programas CGI com Python .

Se por outro lado você preferir usar uma estrutura para lidar com alguns dos detalhes de baixo nível e melhorar a produtividade do desenvolvedor, eu sugiro que procure no web.py . Você pode instalá-lo usando o apt:

sudo apt-get install python-webpy

Lucas no Blog Cloud 101 publicou um ótimo tutorial sobre como escrever páginas da Web usando a estrutura da Webpy.

Steve Robillard
fonte
Isso é FastCGI ou CGI?
Mark Ingram
Observe que o CGI comum requer a inicialização do interpretador python para cada solicitação, portanto, é adequado apenas para solicitações ocasionais.
Thorbjørn Ravn Andersen
Infelizmente, isso só funcionou parcialmente. Agora posso executar python chamando "http: // (IP) /cgi-bin/test.py?parameter=xxx", mas não "http: // (IP) /cgi-bin/test.cgi?parameter=xxx "- o último dá um erro 404 ...
576i 05/02
@ 576i Tente alterar esta linha cgi.assign = (".py" => "/ usr / bin / python") para cgi.assign = (".cgi" => "/ usr / bin / python")
Steve Robillard
1
@ 576i Em vez de continuar esta discussão nos comentários de outra pergunta, abra uma nova pergunta e inclua o que funciona e o que você tentou. Vou então excluir esses comentários. BTW, qualquer razão para você não poder simplesmente usar a extensão .py, que você disse que funciona?
21414 Steve Robillard
3

A resposta aceita não funcionou para mim e também ignora os pacotes pré-configurados disponíveis para o Lighttpd.

A maneira correta de instalar o Python no Lighttpd para o Raspberry é:

Primeiro ative o cgi

sudo lighttpd-enable-mod cgi

Isso cria um novo arquivo de configuração para o Lighttpd:

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

Edite o arquivo de configuração nano /etc/lighttpd/conf-enabled/10-cgi.conf, para se parecer com este

server.modules += ( "mod_cgi" )

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

Verifique se o python 2 está instalado executando:

/usr/bin/python --version

Agora reinicie

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

Boa sorte!

NDB
fonte