Jak zmusić Pythona do współpracy z Lighttpd?

25

Mam konfigurację Lighttpd na moim Raspberry Pi, ale chciałbym, aby kod po stronie serwera działał teraz. Znam PHP, ale myślę, że powinienem wypróbować Python, ponieważ powinien to być język „idź do” dla Raspberry Pi. Jak mogę uzyskać Python obsługujący kod po stronie serwera za pośrednictwem Lighttpd?

Mark Ingram
źródło
link penzilla.net/tutorials/python/cgi jest uszkodzony, ale dziękuję za świetny napis. Moje Pi przybywa jutro!

Odpowiedzi:

16

Potrzebujesz wsparcia CGI dla lighttpd.

Otwórz plik konfiguracyjny lighttpd ( /etc/lighttpd/lighttpd.conf ) i usuń komentarz z wiersza „mod_cgi” (usuń # z początku wiersza, jeśli taki istnieje) lub dodaj ten wiersz, jeśli nie jest obecny.

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

Dodaj następujący tekst na dole pliku:

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

Uruchom ponownie demona lighttpd:

sudo service lighttpd force-reload

Następnie utwórz katalog cgi-bin w katalogu głównym serwera. Wszelkie pliki z rozszerzeniem .py w tym katalogu będą przetwarzane przez Python.

Możesz teraz pisać skrypty Pythona do obsługi żądań internetowych. Możesz przeczytać ten samouczek na temat pisania programów CGI w Pythonie .

Jeśli natomiast wolisz używać ramy obsługiwać niektóre z niskimi poziomie szczegółów i zwiększyć produktywność programistów, proponuję sprawdzanie web.py . Możesz go zainstalować za pomocą apt:

sudo apt-get install python-webpy

Lucas na blogu Cloud 101 opublikował świetny samouczek na temat pisania stron internetowych przy użyciu frameworka webpy.

Steve Robillard
źródło
Czy to FastCGI czy CGI?
Mark Ingram
Zauważ, że zwykły interfejs CGI wymaga uruchomienia interpretera Pythona dla każdego żądania, więc jest on odpowiedni tylko dla okazjonalnego żądania.
Thorbjørn Ravn Andersen
Niestety działało to tylko częściowo. Mogę teraz uruchomić python, dzwoniąc „http: // (IP) /cgi-bin/test.py?parameter=xxx”, ale nie „http: // (IP) /cgi-bin/test.cgi?parameter=xxx „- później podaje błąd 404 ...
576i
@ 576i Spróbuj zmienić tę linię cgi.assign = (".py" => "/ usr / bin / python") na cgi.assign = (".cgi" => "/ usr / bin / python")
Steve Robillard
1
@ 576i Zamiast kontynuować dyskusję w komentarzach do innego pytania, proszę otworzyć nowe pytanie i podać, co działa i co próbowałeś. Następnie usunę te komentarze. BTW z jakiegokolwiek powodu, dla którego nie możesz po prostu skorzystać z rozszerzenia .py, które, jak mówiłeś, działa?
Steve Robillard
3

Przyjęta odpowiedź nie działała dla mnie i ignoruje również wstępnie skonfigurowane pakiety dostępne dla Lighttpd.

Prawidłowy sposób instalacji Pythona na Lighttpd dla Raspberry to:

Najpierw włącz cgi przez

sudo lighttpd-enable-mod cgi

Spowoduje to utworzenie nowego pliku konfiguracyjnego dla Lighttpd:

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

Edytuj plik konfiguracyjny nano /etc/lighttpd/conf-enabled/10-cgi.conf, aby wyglądał podobnie do tego

server.modules += ( "mod_cgi" )

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

Upewnij się, że Python 2 jest zainstalowany, wykonując:

/usr/bin/python --version

Teraz uruchom ponownie

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

Powodzenia!

NDB
źródło