Wie bringt man Python dazu, mit Lighttpd zu arbeiten?


25

Ich habe ein Lighttpd-Setup auf meinem Raspberry Pi, möchte aber, dass der serverseitige Code jetzt funktioniert. Ich bin mit PHP vertraut, aber ich denke, ich sollte Python ausprobieren, da es die "Gehe zu" -Sprache für den Raspberry Pi sein soll. Wie kann ich erreichen, dass Python serverseitigen Code über Lighttpd verarbeitet?


penzilla.net/tutorials/python/cgi link ist kaputt aber danke für das tolle schreiben. Mein Pi kommt morgen an!

Antworten:


16

Was Sie brauchen, ist CGI-Unterstützung für lighttpd.

Öffnen Sie die lighttpd-Konfigurationsdatei ( /etc/lighttpd/lighttpd.conf ) und kommentieren Sie die Zeile "mod_cgi" aus (entfernen Sie das # am Zeilenanfang, falls vorhanden), oder fügen Sie diese Zeile hinzu, falls sie nicht vorhanden ist.

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

Fügen Sie am Ende der Datei Folgendes hinzu:

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

Starten Sie den lighttpd-Daemon neu:

sudo service lighttpd force-reload

Erstellen Sie dann ein cgi-bin- Verzeichnis im Stammverzeichnis Ihres Webservers. Alle Dateien, die in diesem Verzeichnis mit .py enden, werden von Python verarbeitet.

Sie können jetzt Python-Skripte schreiben, um Webanforderungen zu verarbeiten. Vielleicht möchten Sie dieses Tutorial zum Schreiben von CGI-Programmen mit Python lesen .

Wenn Sie andererseits lieber ein Framework verwenden möchten, um einige der Details auf niedriger Ebene zu verarbeiten und die Entwicklerproduktivität zu verbessern, empfehle ich, web.py zu überprüfen . Sie können es mit apt installieren:

sudo apt-get install python-webpy

Lucas vom Cloud 101-Blog hat ein großartiges Tutorial zum Schreiben von Webseiten mit dem Webpy-Framework veröffentlicht.


Ist das FastCGI oder CGI?
Mark Ingram

Beachten Sie, dass für einfaches CGI das Starten des Python-Interpreters für jede Anforderung erforderlich ist, sodass es nur für gelegentliche Anforderungen geeignet ist.
Thorbjørn Ravn Andersen

Leider funktionierte dies nur teilweise. Ich kann jetzt Python ausführen, indem ich "http: // (IP) /cgi-bin/test.py?parameter=xxx", aber nicht "http: // (IP) /cgi-bin/test.cgi?parameter=xxx" aufrufe "- der spätere gibt einen Fehler 404 ...
576i

@ 576i Ändern Sie diese Zeile in cgi.assign = (".py" => "/ usr / bin / python") in cgi.assign = (".cgi" => "/ usr / bin / python")
Steve Robillard

1
@ 576i Anstatt diese Diskussion in den Kommentaren einer anderen Frage fortzusetzen, öffnen Sie eine neue Frage und geben Sie an, was funktioniert und was Sie versucht haben. Ich werde diese Kommentare dann löschen. Übrigens, warum können Sie nicht einfach mit der Erweiterung .py arbeiten, von der Sie sagten, dass sie funktioniert?
Steve Robillard

3

Die akzeptierte Antwort hat bei mir nicht funktioniert und ignoriert auch die vorkonfigurierten Pakete, die für Lighttpd verfügbar sind.

Der richtige Weg, um Python auf Lighttpd für die Himbeere zu installieren, ist:

Aktivieren Sie zuerst cgi by

sudo lighttpd-enable-mod cgi

Dies erstellt eine neue Konfigurationsdatei für Lighttpd:

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

Bearbeiten Sie die Konfigurationsdatei so nano /etc/lighttpd/conf-enabled/10-cgi.conf, dass sie ungefähr so ​​aussieht

server.modules += ( "mod_cgi" )

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

Stellen Sie sicher, dass Python 2 installiert ist, indem Sie Folgendes ausführen:

/usr/bin/python --version

Starten Sie jetzt neu

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

Viel Glück!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.