Raspberry Pi Webserver

Raspberry Pi

In diesem Artikel zeige ich euch wie ihr einen Webserver auf eurem Raspberry Pi einrichtet und konfiguriert.
Im Anschluss daran stelle ich euch noch eine Möglichkeit vor, wie ihr Dateien über das Web auf euer Raspberry Pi hochladen könnt und wie ihr den Webzugriff auf euer Raspberry Pi vor unerwünschten Zugriffen schützen könnt.

-> Vorbereiten des Raspberry Pi:

Als Webserver verwende ich lighttpd, welcher sich wie folgt installieren lässt:

Und nun noch das Modul um PHP-Datei ausführen zu können:

Wenn diese Zeilen ausgeführt worden sind, müsst ihr noch die Konfiguration des Webservers anpassen.
Die fertige Konfigurationsdatei (lighttpd.conf) findet ihr am Ende der Seite. Den Inhalt dieser Datei müsst ihr einfach in die bereits Vorhandene Datei /etc/lighttpd/lighttpd.conf kopieren.
Anschließend erzwingt ihr mit

einen Neustart des Webservers. Dadurch wird die Config-Datei neu eingelesen.
Der Webserver ist nun über die Adresse IP-Adresse/index.lighttpd.html erreichbar. Beim Aufruf wird eine bereits abgelegte Seite angezeigt, welche als Platzhalter dient:

Raspberry Webserver(1)

Der Server ist nun bereit um PHP und HTML Seiten zu verarbeiten. Alle Seiten, die ihr erstellt habt, müsst ihr unter /var/www ablegen.
Sobald ihr das gemacht habt, sind die Seiten mittels Browser über die Adresse IP-Adresse/Seitenname + Endung zu erreichen.
Wie ich festgestellt habe läuft PHP im Safe-Mode läuft. Das bereitet z.B. bei dem Dateiupload Probleme. Wenn ihr den Benutzer und die Gruppenzugehörigkeit eurer Uploadseite nicht auf www-data ändert, blockt PHP die Ausführung dieser Seite.
Um den Benutzer zu ändern, nutzt ihr folgenden Befehl:

Sobald ihr dies gemacht habt, werden auch PHP Files, welche ihr z.B. mit FileZilla unter dem Loginnamen xyz hochgeladen habt, ausgeführt.

-> Erstellen der Websites:

Die Uploadseite sieht wie folgt aus. Wichtig ist, dass ihr euch in dem Pfad /var/www einen Ordner Namens Uploads macht (oder ein anderer Name aber dann müsst ihr das in dem PHP-File anpassen).
Einmal die HTML-Seite:

Und einmal das dazugehörige PHP-File, welches gleich genannt werden muss wie der rot markierte Bereich:

Umgang mit der Seite ist ganz einfach…..
Browser öffnen, IP-Adresse/Namen von dem HTML-File eingeben, Datei über „Durchsuchen“ auswählen, Upload drücken, im Ordner /var/www/Euer Uploadordner nachschauen, über den erfolgreichen Upload freuen ;).

-> Verwenden eines USB Sticks als zusätzlichen Speicher:

Als zusätzliche Alternative bietet es sich an eine Speichererweiterung via USB-Stick durchzuführen.
Dies hat den Vorteil, dass die Daten durch den Upload nicht auf der SD-Karte landen, sondern auf einem externen Stick und man ist nicht an die Größe der Speicherkarte gebunden.
Ein Nachteil ist, dass der Stick durch diese Methode auch über das Internet erreichbar ist (sofern euer Raspberry Pi an das Internet angebunden ist). In dem Fall solltet ihr schauen das ihr nichts sensibles auf den Stick ladet.
Als erstes erstellt ihr euch im Verzeichnis /var/www/ einen Ordner. Ich habe den Ordner z.B. USB-Stick genannt. Als nächstes steckt ihr den USB-Stick an einen der beiden USB-Anschlüsse vom Raspberry Pi und rebootet es.
Nach dem reboot gebt ihr in die Konsole

ein. Anschließend erscheint eine lange Liste mit allen Devices die installiert sind.
Irgendwo sollte sda in der Liste stehen. Dies ist euer USB-Stick.
Der nächste Schritt besteht darin den USB-Stick mit einem Linux Dateisystem zu formatieren.
Dies geschieht so:

Dadurch wird der USB-Stick mit dem ext3 Dateisystem formatiert.

Wichtig: Bei diesem Vorgang verschwinden alle Daten auf dem Stick! Macht euch also Sicherungskopien! Ebenso stellt sicher das „sda“ wirklich euer Stick ist und nicht irgend ein anderer mobiler Datenträger.

Nach dem Formatieren gebt ihr

in die Konsole ein. Dadurch wird der USB-Stick gemountet und mit dem Ordner /var/www/USB-Stick verbunden.
Nun werden alle Daten die ihr in dem Ordner speichert direkt auf dem USB-Stick gespeichert. Diese Zeile solltet ihr auch in eure rc.local-Datei eintragen, da dieser Vorgang nur bis zum nächsten reboot hält.
Damit euer Webserver Daten auf den Stick speichern kann müsst ihr den Besitzer vom USB-Stick in den Besitzer vom Webserver, also www-data, umändern.
Auch hier ist wieder wichtig….

Nur Linux Dateisysteme verfügen über eine Benutzerverwaltung. Wenn ihr einen Stick mit eine FAT Dateisystem verwendet funktioniert es nicht!

Das ändern des Besitzers erfolgt so:

Der letzte Schritt ist das umändern der PHP-Datei. Ihr müsst diese Zeile:

in diese hier umändern:

Nach dem Speichern müsst ihr u.U. den Besitzer der PHP-Datei wieder auf www-data  ändern.
Als letzten Schritt müsst ihr die Schreibrechte noch mittels

anpassen.
Sobald dies erfolgt ist könnt ihr den Upload mal testen. Wenn keine Fehler ausgegeben werden funktioniert es und eure Dateien werden auf dem Stick gespeichert.

-> Passwortschutz:

Nun kann der Zugriff noch mit einem Passwort geschützt werden.
Hierfür habe ich mir unter /home/pi/Desktop einen Ordner mit Namen Sicherheit“ angelegt.
In diesem Ordner erstellt ihr eine Datei Passwort.txt.
Nun müsst ihr die Datei noch den Besitzer www-data zuweisen:

In die Datei tragt ihr nun folgendes ein und speichert die Datei ab:

Benutzername:Passwort

Anschließend müsst ihr in der Datei /etc/lighttpd/lighttpd.conf unter server.modules das Modul mod_auth hinzufügen:

Am Ende der Datei fügt ihr dann noch

ein, wobei die Angabe plain.userfile =  den Pfad zu eurer Passwortdatei darstellt.
Danach fügt ihr noch

ein. Falls ihr die komplette Webpräsenz schützen wollt, lasst ihr den Teil /Pfad der geschützt werden soll/ weg. Ansonsten tragt ihr dort den zu schützenden Ordner ein.
Unter „user“ wird der Benutzername angegeben den ihr in der Passwortdatei hinterlegt habt.
Der Text der unter realm gespeichert ist, wird nachher als Meldung in dem Eingabefenster für das Passwort erscheinen.
In meinem Beispiel ist es Password protected area, aber er kann auch beliebig verändert werden.
Jetzt startet ihr den Webserver neu:

Nun ist eure Webpräsenz vor Zugriffen von außerhalb geschützt.

 

Dokumentation:

 

-> Zurück zu den Basteleien mit dem Raspberry Pi

117 thoughts on “Raspberry Pi Webserver
  1. Hi,
    vielen Dank für die kleine Anleitung :-) Ich hab mir auch einen Raspberry Pi bestellt und erwarte ihn schon^^ Ich möchte wahrscheinlich auch einen kleinen Webserver damit betreiben und die I O Schalten. Leider habe ich davon noch nicht wirkloch Erfahrung. Du hast es auf deinem Webserver aufgeführt. Kannst du mir vielleicht dabei weiterhelfen?

    Mit freundlichen Grü0en

    Christoph

    • Hey,
      ja wenn du Fragen hast, schreib mir einfach eine E-Mail :)
      Im Moment stehen meine Experimente mit dem Raspberry zwar etwas still aber sobald ich wieder Zeit habe kommt auch was neues ^.^

  2. Hallo,
    zu:“Wie die Anbindung an das Internet geschieht kann ich auch gerne erklären (falls Interesse besteht).“! Ich hätte da Interesse wie so etwas geht! Können Sie mir dabei behilflich sein (bin nicht so visiert)! Im voraus vielen Dank. Günther

      • Hallo Kampi,
        das würde mich auch sehr interessieren. Kannst Du mir das auch per Email weitergeben. (rolfsulzberger@t-online.de).
        Vielen Dank
        Gruß
        Rolf

  3. Hi Kampi,

    super Seite die Du da hast. Hab mir letzte Woche den RPI zugelegt und dann erst nach tools usw gesucht. Dabei bin ich über Deine absolut hilfreiche und interessante Seite gestolpert. Ein kleines Problem hab ich allerdings mit der GPIOsteuerung per PHP.
    Ich benutze den Apache2 als Webserver und irgendwie funktioniert das nicht so ganz.
    Ich hab die IO.php von dieser Seite geladen. Liegt es vielleicht an der Berechtigung bzw an der Gruppenzugehörigkeit von /var/www ??? Die GPIOs kann ich per Konsole ansprechen, das funktioniert.

    Vielen Dank im Voraus

    Chrissy

    • Hallo Chrissy,

      was für ein Fehler zeichnet sich den ab?
      Erscheint gar keine Website? Oder erscheint eine Website aber sie reagiert nicht auf Eingaben, sprich die schaltet die GPIOs nicht?

      Gruß
      Daniel

  4. ach ja ganz unten steht noch….

    „/sys/class/gpio/gpio$x/value“); } } } #GPIO abschalten if (isset($_REQUEST[‚IO-loeschen‘])) { for($x = 0; $x /sys/class/gpio/gpio$x/value“); } } } #GPIO freischalten if (isset($_REQUEST[‚Löschen‘])) { for($x = 0; $x “

    Gruß

    Chrissy

  5. Hallo Kampi,

    Deine Anleitung hat mir sehr geholfen. Ich hatte nach einer anderen (weitgehend identischen) Lösung, die auch sonst recht oft im Netz auftaucht, folgenden Befehl *nicht* beim Setup ausgeführt:

    sudo lighty-enable-mod fastcgi-php

    Prompt bekam ich einen 503-Fehler. Nachdem ich dann obigen Befehl benutzt habe, bekam ich beim Neustart des Server eine Fehlermeldung, die einen doppelten Eintrag in der .conf-Datei bemängelte. Ich habe dann die Zeile

    fastcgi.server = ( „.php“ => ((
    „bin-path“ => „/usr/bin/php5-cgi“,
    „socket“ => „/tmp/php.socket“
    )))

    entfernt, dann lief alles wie gewünscht.

    Nette Seiten, b.t.w.!

    Corwin

  6. Hallo,
    zu:”Wie die Anbindung an das Internet geschieht kann ich auch gerne erklären (falls Interesse besteht).”! Ich hätte da Interesse wie so etwas geht! Können Sie mir dabei behilflich sein?

    gs

  7. Hallo..
    sehr nützliche Anleitung ..
    Ich würde nun aber gerne den USB-Stick als zusätzlichen Speicher so verwenden, dass ich Ihn auch an einem Win32 System verwenden kann .. v.a. im mobilen Einsatz Kontent zu erstellen.
    Geht die Verwendung mit AT/NTFS.Formatierung wirklich nicht ? … wer kann einen Workaround anbieten ? … danke

    • Hey,

      von sich aus kann das Raspberry Pi nur Linux Dateisysteme lesen und Windows nur Windows Dateisysteme.
      Ohne zusätzliche Software etc. wird sich da nicht viel machen lassen.

      Gruß
      Daniel

  8. Hallo großes Lob für die ausführlichen Tutorials :) Da macht das Nachmachen Spaß. Ich habe zwar von Linux noch so gut wie keine Ahnung aber durch so ein Praxis Beispiel kommt man gut ran an die Materie. Ich hatte grad eine ellenlange Fehlerbeschreibung geschrieben, weil ich beim reload der lighttpd.conf nicht weiterkam… aber über dem Schreiben hat sich alles geklärt :) Daher bleibt der Eintrag einfach ein Lob! Danke!

  9. Hallo,

    das mit dem passwort funktioniert so nicht wirklich bei mir.
    habe alles so gemacht wie beschrieben. mehr mals :(
    nur leider erreiche ich dann den raspberry nicht mehr über port 80.
    bin nicht so ein fachman in sachen linux. Vielleicht gibt es irgend wo debugging funktionen wie ich feststellen kann wo es hängt. weiß einer was?

        • Und genau so habe ich es mehrmals gemacht ;)

          mann sollte schon wirklich 1zu1 kopieren.

          auth.debug = 2
          auth.backend = „plain“
          auth.backend.plain.userfile =“/home/pi/userlist“
          auth.require = („“ => (
          „method“ => „basic“,
          „realm“ => „Password protected area“,
          „require“ => „user=xxx“
          )
          )

          so sollte es sein:
          auth.debug = 2
          auth.backend = „plain“
          auth.backend.plain.userfile =“/home/pi/userlist“
          auth.require = („“ =>
          (
          „method“ => „basic“,
          „realm“ => „Password protected area“,
          „require“ => „user=xxx“
          )

          was so blöde klammern bzw. postionen derer ausmachen kann ;)

  10. Hi,
    nette Anleitung, wirklich hilfreich alle Infos so kompakt vorzufinden ohne sich mittels Google durch x Seiten durchzuhangeln.

    Wo ich allerdings stutze:
    Wie ich festgestellt habe läuft PHP im Safe-Mode läuft. Das bereitet z.B. bei dem Dateiupload Probleme.
    Was spricht dagegeneinfach in der php.ini den safe-mode auszuschalten? Zumal dieser sowieso ab PHP 5.3 deprecated ist.

    Grüßle Bernd

    • Hallo Bernd,

      da spricht natürlich nichts gegen, nur ich habe es deswegen gemacht, damit jeder selbst entscheiden kann ob er es tut oder nicht :)

      Gruß
      Daniel

      • Hallo,
        ich bastel hier schon ewig an der upload-Geschichte herum. Will einfach nur meine htm – oder php-Dateien hochladen, um nicht immer Tastatur und Bildschirm am Raspi haben zu müssen.
        aber e s g e h t n i c h t!!
        Kann es vielleicht auch an Firefox oder Safari liegen?
        Ich habe die Scripte so reinkopiert, wie es angegeben war (s.o.) und es tut sich gar nichts. Die Datei kann ich noch auswählen, aber dann ist Ruhe und es ist keine Datei hochgeladen worden.
        H i l f e e e e !

        • Hallo Klaus,

          wenn du die Dateien einfach aus dem Text kopiert hast, kann es sein das sich verbotene Zeichen eingeschlichen haben. Downloade das File mal vom Ende der Seite oder schreib es ab. Das sollte helfen :-)

          Gruß
          Daniel

          • Hey,

            ist PHP auf dem apache aktiv? Wenn ja, sollte sich da nicht viel ändern.
            Sind die Rechte angepasst?

            Gruß
            Daniel

          • Ja, php5 ist aktiv mit allen Zusatzpaketen.
            Bin als pi angemeldet. Was muss ich für eine group anmelden? Mit den Rechten ist es doch so, dass ich das Verzeichnis uploads mit Schreibrechten ausstatten muss? Zum Test 777. oder noch was anderes?

  11. mal zur info um CGI scripte zu bearbeiten:

    lighttpd.conf anpassen:
    „mod_cgi“ unter ’server.modules‘ eintragen.

    folgendes zusätzlich eintragen:
    #### CGI module
    cgi.assign = ( „.pl“ => „/usr/bin/perl“,
    „.cgi“ => „/usr/bin/perl“)
    #### CGI module end

    cgi.conf enablen:
    $ sudo /usr/sbin/lighty-enable-mod

    in der anfrage „cgi“ eintippen.

    und server config neuladen
    $ sudo /etc/init.d/lighttpd force-reload

    und testen ;)

  12. Hi Kampi,
    danke für das HowTo.

    Eine Frage ist mir später noch aufgekommen:

    Wenn ich im PHP Bereich eine mySQL Abfrage starte, wird die Seite einfach nicht weiter aufgebaut.
    Die Abfrage an sich ist richtig, bei meinem Hoster geht es, es scheint sich auch auf alle mySQL Abfragen zu beziehen.
    PHP an sich geht, andere PHP Befehle funktionieren.

    Hast Du da eine Idee?

    LG
    CybotDNA

    • Hey,

      ne so aus dem Stehgreif nicht…
      PHP funktioniert, und den SQL Teil kannst du bei deinem Hoster anwenden aber bei einer Datenbank auf deinem Pi funktioniert er nicht.
      Ist das so richtig?

      Gruß
      Daniel

      • Hi Daniel,

        die Datenbank befindet sich bei meinem Hoster.
        Ich rufe sie hiermit ab:

        DaTeN“;
        }
        ?>

        Wenn ich die Abfrage, oder andere mySQL Abfragen weiter unten in der .php Datei einfüge, bricht die Seite an diesem Punkt ab zu laden.
        Vorher war die identische .php Datei bei dem Hoster drauf und hat so funktioniert.

        Als xxx.xx (Domain) habe ich die Domain eingetragen und nicht localhost (auch vorher schon).

        Habe die Installation vom lighttpd genau nach Deiner Beschreibung durchgeführ und nix geändert.
        Habe nur erst die lighttpd.conf erstellt und dann installiert.
        Er hat das erkannt und gefragt wie ich vorgehen möchte, ich habe N für vorhandene Datein behalten gewählt.

        Habe bereits den Server neu gestartet und mit:
        /etc/init.d/lighttpd start
        ein grünes [ok] erhalten.
        im www befindet sich nur die index.php und keine .htaccess Datei wie beim Hoster.
        Und eine Robots.txt ist mit dort drin.

        Hoffe Du hast eine Idee.

        Gruß
        CybotDNA

          • Jetzt hat er den code nicht richtig gepostet:

            $verbindung = mysql_connect („xxx.xx“,“UsErNaMe“, „PaSsWoRt“)
            or die („keine Verbindung möglich.
            Benutzername oder Passwort sind falsch“);
            mysql_select_db(„DaTeNbAnK“)
            or die („Die Datenbank existiert nicht.“);

            $abfrage = „SELECT DaTeN FROM TaBeLlE“;
            $ergebnis = mysql_query($abfrage);
            while($row = mysql_fetch_object($ergebnis))
            {
            echo „$row->DaTeN“;
            }

          • Ich habe den Fehler gefunden.

            Für die Nutzung mit mySQL fehlt der Anleitung noch:
            apt-get install php5-mysql
            und dann:
            /etc/init.d/lighttpd restart

            LG
            CybotDNA

  13. Super Anleitung, vielen Dank dafür!
    Beim Abschnitt Passwortschutz könnte man im Zusammenhng mit dieser Zeile
    auth.require = ( "/Pfad der geschützt werden soll/" =>
    noch erwähnen das hier der Pfad relativ zum Document Root gemeint ist, nicht der Pfad im Dateisystem wie ich irrtümlich angenommen hatte.

    • Hallo Guido,

      freut mich das dir die Themen zum Raspberry gefallen :)
      Ich werde mal schauen ob ich noch ein paar Dinge finde.

      Gruß
      Daniel

  14. Hallo Daniel.
    Du hast wirklich eine tolle Webseite.
    Ich habe die Software für GPIO schalten und PI Webseite von deiner Seite heruntergeladen. Nach dem installieren keine Fehlermeldungen. Das Programm
    gpio.php wurde über IP-Adr aufgerufen und richtig angezeigt. Wenn ich eine Taste
    betätige läuft das Programm auch an, aber es wird keine LED gesetzt, auch keine
    Fehlermeldung erscheint. Verwende gpio.sh(von deiner Seite) und lighttpd.
    Habe Raspberry Pi v2, benutze LAN und HDMI/VGA Konverteranschluss.
    Würde mich über eine Info von dir freuen.
    Gruß Peter

  15. Hallo Daniel,
    Danke für die Antwort. ich habe alle Rechte so gesetzt wie in deiner Anleitung angegeben. Lighttpd ist auch ok, auch die config.Manuell lassen sich alle GPIO’s setzen.
    Gruß Peter

    • Hey,

      und die PHP-Datei gehört auch dem Besitzer / Gruppe „www-data“?
      Weil was anderes als irgendwo ein Rechteproblem kann ich mir nicht vorstellen….das spricht gerade alles dafür.

      Gruß
      Daniel

  16. Hallo Daniel,
    ich bin absolut begeistert von deiner Seite und habe mir, da ich mit meinem Raspberry eine Heizungssteuerung bauen wollte, mir deine Anleitung zum Betrieb eines Webservers zum Vorbild genommen. Die Heizungssteuerug soll nämlich auch sozusagen „from all over the world“ für mich erreichbar sein. Mein größtes Problem ist meine Nichterfahrung mit Linux, bin sozusagen ein Embryo auf diesem Gebiet und habe erst einmal tage- und nächtelang im Netz gewütet und gesucht, um meinen Horizont ein wenig zu erweitern. Mein Schulenglisch liegt auch schon fast fünfzig Jahre zurück, demnach war ich, wenn es ins Detail ging, auf deutschsprachige Seiten angewiesen.
    Bis ich erst einmal verinnerlicht hatte, dass Linux äusserst stark nach User und Groups differenziert, hatte Ewigkeiten gedauert. Ich hatte immer gedacht, ich habe mich bei der Erstkonfiguration als pi angemeldet, noch keinen weiteren User eingerichtet, also habe ich jedes Recht der Welt auf dem guten Stück, bin also sozusagen der Admin.
    Nachdem ich das also kapiert hatte, war ich dann auch auf deiner Seite gelandet und ich war happy, denn hier wurde endlich auch detailgerecht beschrieben, was ich suchte: Installation eines Webservers und php. Hier fühlte ich mich dann auch sofort zu Hause. Installiert, installiert und installiert, dann getestet mit phpinfo(), klappt, klasse. GPIO hatte ich schon vobereitet, meine .sh-Dateien getestet, die crontab mit Schaltzeiten gefüllt, ein kleines php-Script zur Abfrage und zum Abändern der Pinwerte geschrieben (vor Übereifer hatte ich später erst gesehen, dass du alles schon für deine Besucher erledigt hattest), naja hab ich das Rad halt noch einmal erfunden. Und Test, und nix, das Fenster blieb einfach nur leer.
    Katastrophe.
    Alles noch einmal überprüft, keine Fehler gefunden. Was tun?
    Wider bessere Ahnung tighttpd deinstalliert und mit apache versucht, den hatte ich unter Windows schon auf etlichen Rechnern installiert. und einige Erfahrungen gesammelt, das Ergebnis war erwartungsgemäss gleich.
    Nichts.
    Ein paar Tage frustriert mich anderen Dingen gewidmet, zwischendurch mal über das Problem nachgedacht und auf einmal der große Blitz in meinem Kopf.
    Wie gesagt, ich bin immer noch Linux-DAU, aber der Gedanke an die unterschiedlichen User und Groups hat sich doch schon ein wenig manifestiert. Ich hab mir dann die Dateien unter gpio mal näher angesehen. Besitzer: root, okay, Gruppe: gpio, stop. Grübel, grübel.
    Test: User pi darf die Dateien ausführen, User www-data nicht!
    Folglich: füge User www-data zur Gruppe pi hinzu. Gesagt, getan, ausprobiert, wieder nix, Verzweiflung kommt hoch, zwei Taseen Kaffee rein, nochmal davon überzeugt, dass auch alles so angekommen war, wie ich es geplant hatte: ja.
    Das Ding ausgeschaltet und am liebsten weggeschmissen. Totaler Frust war angesagt.
    In der nächsten Nacht noch ein Geistesblitz. Ich springe aus dem Bett. Meine Frau fragt mich, ob irgend etwas mit mir wäre, ob ich mich nicht wohl fühle.
    Bei einem Mann in meinem Alter eine durchaus berechtigte Frage.
    Aber nein, ich fühlte mich plötzlich sauwohl, rein in meine Bastelecke, Raspberry an, Laptop an und los. ich habe dann diesem dusseligen User www-data einfach die zusätzliche Gruppe gpio verpasst. Und?
    Jubel und Freude auf der ganzen Linie.
    Tiefbefriedigt wieder ins Bett und hervorragend geschlafen. Am nächsten Tag das Platinchen gelötet, die notwendigen Teile hatte ich mindestens schon zwei Wochen vorher separiert in einer Schublade liegen, das ganze auf die Sockelleiste gesetzt. Seit zwei Tagen läuft die zeitabhängige Ein- Ausschaltung der Heizung problemlos und ich kann zusätzlich z.B. mit meinem Androiden korrigierend manuell eingreifen.
    Demnächst sollen noch für die einzelnen Räume Temperaturfühler zugeschaltet werden. Wäre doch gelacht, wenn die Heizkosten nicht senkbar wären.
    Ich hatte in deiner Beschreibung zur Einrichtung eines Webservers keinen Hinweis auf das Problem der Gruppenzugehörigkeit des www-data gefunden, oder hatte ich es einfach nur überlesen, dann sieh meinen Kommentar einfach nur als Erfahrungsbericht eines Linux-Newcomers mit dem Raspberry an, ansonsten könntest du es ja nachpflegen?
    Viele liebe Grüße
    Hans Lüttig

    1. PS. Deine Seite ist wirklich klasse, sowohl vom Inhalt als auch der Gestaltung.
    2. PS: könnte jemand die Frage stellen: warum will jemand seine Heizung mittels Scheckkartencomputerchen steuern? Zu diesem Zweck soll es mittlerweile Schaltuhren geben.
    Ich antworte im Stile Radio Eriwan: Im Prinzip ja, aber …..
    Alle 3 – 5 Jahre versagen diese Uhren ihren Dienst, weil der Pufferakku platt ist und das ganze ist so genial konstruiert ist, dass man den Akku nicht austauschen kann, ohne das Gehäuse zu zerstören. Und eine neue Uhr ist mehr als doppelt so teuer wie ein Raspberry. Außerdem habe ich ganz einfach nur Spaß an elektronischen Basteleien.

    • Hey Hans,

      wow vielen Dank für deinen langen Erfahrungsbericht. Den Punkt den du da aufgeführt hast habe ich nicht in meiner Anleitung stehen. Vielen Dank für den Tipp, ich schreibe ihn heute Abend dazu (kannte diese Lösung des Problems noch gar nicht….aber man lernt ja nie aus :) ).
      Finde so einen langen Erfahrungsbericht immer schön zu lesen und bedanke mich herzlich für dein Lob zu der Seite. Klar kann man sich fragen wofür man eine Steuerung bauen will, die es schon fertig gibt…..aber so eine Frage ist auch leicht zu beantworten….weil man Erfahrungen im Lösen von Problemen sammeln will. Durch das Realisieren einer größeren Aufgabe lernt man unheimlich viel. Und durch das hartnäckige suchen des Fehlers auch (ich denke das kannst du nun bestätigen :) ).
      Wünsche dir viel Spaß mit deiner Heizung und bei Problemen kannst du dich immer melden!

      Gruß & nochmals vielen Dank
      Daniel

      • Hallo Daniel,
        mich würde interessieren, wie du das Problem gelöst hattest, dass der User www-data auf die gpio mittels php zugreifen kann.
        Viele Grüße
        Hans

          • Hallo Daniel,
            ich war doch der, der endeffektlich den User www-data der Gruppe gpio zugefügt hatte und damit seine Probleme endeffektlich lösen konnte. Was mich einfach nur interessiert, ist, wie du es geschafft hattest, die php-Scripte auf die gpio zugreifen lassen konntest. Aber ich glaube auf deiner Seite die Antwort darauf gefunden zu haben. Du hast jede einzelne php-Datei der Gruppe www-data mittels „$ sudo chown pi.www-data /var/www-data/xyz.php“ zugefügt? Jedenfalls habe ich das gerade deiner Beschreibung „GPIO schalten“ entnommen. Damit müsstest du allerdings jede einzelne Datei behandeln. Mein Lösungsvorschlag hatte den Charme nur einmal www-data zur gruppe gpio zu zufügen. Sollte meine Annahme zu deiner Lösung richtig sein, hätte sich meine Frage jetzt erübrigt. Ich würde mich trotzdem über ein kurzes Feedback von dir freuen.
            Gruß
            Hans

          • Hey Hans,

            ja genau. Die Dateien, bei denen es notwendig war, habe ich der Gruppe www-data hinzugefügt (war auch nur die GPIO Datei). Der Aufwand ist faktisch der selbe, nur das deine Lösung etwas schöner ist, da man dabei nicht auf die Gruppenzugehörigkeit der Datei achten muss.
            Die Anleitung ist auch schon recht alt und zu dem Zeitpunkt wusste ich noch nicht das es diese Gruppe gibt (hab den Versuch ja zwei Wochen nach dem Release des Pi gemacht und seitdem nicht viel geändert :) ).
            Finde es aber klasse, dass du mir die Lösung gesagt hast. Wie gesagt ich wusste selber nichts von dieser Gruppe (bzw. bei mir ist sie gar nicht existent. Warum?) und ich lerne gerne dazu.

            Gruß
            Daniel

  17. Hallo noch einmal,
    wie, bei dir ist die Gruppe nicht vorhanden? Du hast doch sicher auch Raspbian wheezy 2013-09-25 installiert? Oder hast du eventuell eine andere Raspberryversion als ich? Ich habes den mit den 512 MB, aber logisch betrachtet kann es nur am Betriebssystem liegen.
    Gruß
    Hans

    • Hey,

      ja ich habe die Gruppe nicht gefunden.
      Die Betriebssystemversion ist die aktuelle….sicher das die Gruppe nicht von wo anders her kommt?

      Gruß
      Daniel

      • Hi,
        also, wenn ich mich über Putty an meiner Himbeere anmelde und groups eingebe, erhalte ich in dieser Reihenfolge folgende Gruppen: pi, adm, dialout, cdrom, sudo, audio, video, plugdev, games, users, netdev, input, spi und gpio. Melde ich mich über vnc am Gerät an und gehe über den Dateimanager ins Verzeichnis /sys/class/gpio und mir dort die Eigenschaften irgend einer Datei oder eines Ordners im Reiter Berechtigungen ansehe, steht bei allen Besitzer: root und Gruppe: gpio.
        Ich habe bei der Installation auch ein Protokoll darüber erstellt, was ich so alles installiert habe bzw. in den Einstellungen verändert habe, damit ich irgendwann später alles nachvollziehen kann. Ich habe aber nichts gefunden, was die Gruppe gpio erzeugt haben könnte. Ich werde morgen aber mal Raspbian auf ner frischen SD-Karte installieren, um zu sehen, ob die Gruppe von Anfang an existiert. Du hast mich jetzt doch neugierig gemacht.
        Gruß
        Hans

          • Hallo Daniel,
            leider bin ich erst jetzt dazu gekommen, eine frische Installation auf eine neuen SD-Karte zu schieben. Aber was soll ich dir sagen: die Gruppe gpio ist existent.
            Viele Grüße
            Hans

    • Hey,

      was genau meinst du?
      Und eine Downloadseite habe ich bisher noch nicht gemacht….aber da gibt es recht gute Anleitungen im Netz wie man das in PHP realisierne kann.
      Ich weiß auch gerade nicht ob du überhaupt was an der conf ändern musst, wenn du mehrere Benutzer nehmen willst.

      Gruß
      Daniel

      • Also ich möchte z.B, für Familie so machen eins für Fotos eins für Musik und für allgemeines … und das sie diese unterschiedliche Ordner ..

  18. Hallo Kampi,
    ein Alter mit 68 versucht sich mit raspi. Ich konnte den Weg bis lighttpd.config gut bestehen aber jetzt kommt :
    $ sudo /etc/init.d/lighttpd force-reload
    Reloading web server configuration: lighttpd failed!
    was mach ich da falsch ?
    Gruß Peter aus Calw

    • Hallo Peter,

      was für eine Fehlermeldung kommt da genau raus?
      Kannst du mir per Mail einen Screenshot davon schicken?

      Gruß
      Daniel

  19. Hallo,
    zu:”Wie die Anbindung an das Internet geschieht kann ich auch gerne erklären (falls Interesse besteht).”! Ich hätte da Interesse wie so etwas geht! Können Sie mir dabei behilflich sein?
    Vielen Dank
    Rolf

  20. Hat alles super geklappt bis auf das mit den Passwort, da meldet er mir immer wenn ich mich einloggen will das mein Passwort falsch ist.
    Ne Idee?

      • Natürlich nur halt nicht mit Benutzername:Passwort sonder. „test:123456“
        Die Datei heißt Passwort.txt und hat auch lese und schreibe Rechte bekommen.

        In der Config Datei steht dann halt
        auth.require = („“ =>
        (
        „method“ => „basic“,
        „realm“ => „Password protected area“,
        „require“ => „user=test“
        )

        Der Pfad ist natürlich auch korrekt.

  21. Hallo, jetzt bin ich auf dem Raspberry ein echter Neunutzer und habe gleich eine Frage: die Dateien, welche ich downloaden kann, kommen alle in var/www die bis auf die conf Datei. Allerdings verstehe ich das Script nicht unter „Erstellen einer Webseite“, wie muss ich denn das Script einbinden? Danke für deine Antwort. Gruß Günter

    • Hallo,

      deine späteren Websites musst du einfach nur mit der Endung .php oder .html in dem Verzeichnis /var/www speichern.
      Reicht dir das als Antwort? Sonst schreib einfach eine E-Mail :)

      Gruß
      Daniel

  22. DANKE! für diese tolle Anleitung! ich habe jedoch ein Problem mit dem Passwortschutz.
    Ich hab mir jetzt nicht alle Kommentare durch gelesen viell. hatte dieses Problem schon jemand…..
    leider kommt bei mir nach der Passworteingabe:

    403 – Forbidden

    Ich hab jetzt schon ziemlich viel probiert.
    Bin mit meinem Latein jetzt etwas am Ende…. Ich denke, dass da irgendwas mit den Rechten nicht passt.
    Achja -> Ich hab meinen RPi völlig neu Aufgesetzt mit Raspberry Pi minimal und dieser Anleitung:
    http://www.forum-raspberrypi.de/Thread-raspbian-minimal

    Vielen DANK!

  23. Hi Kampi,
    da hast du ne super Seite aufgebaut vielen dank dafür.
    Doch wie du dir sicher schon denken kannst hab auch ich ein Problem.
    wenn ich die IP Adresse eingebe kommt nur die Fehlermeldung „404 Not Found“.
    Die IP Adresse stimmt und SSH geht auch.
    Kannst du mir da helfen?
    MfG Micha

  24. Danke für diesen ausführlichen Atikel, war bei der konfiguration von meinem Pi Webserver sehr hilfreich!
    Bin schon gespannt wielange der ohne Absturz läuft!

  25. Hallo Kampi,

    danke für Deinen ausführlichen Artikel. Solche detaillierten Beschreibungen gibt’s ja nicht oft im I-net.

    Ich habe alles wie angegeben gemacht, jedoch komme ich nicht aus dem I-Net auf den RasPi, mit der lokale IP funktioniert es. Portweiterschaltung (Port80) in der Fritz.Box ist aktiv und DynDns funktioniert auch (getestet mit meinen WEB-Cams).
    Was muss noch konfiguriert werden ?

    Und dann habe ich noch ein Problem mit Deiner Probe-Html: von der lokalen IP aus kann ich die Seite mit 192.168.178.54/Upload.html starten. funktioniert auch, nur bringt die Fehlermeldung
    Was ist da noch falsch ? Bestimmt irgendwelche Rechte ? Nur, wie stellt man das ein ?
    Leider bin ich Linux-Neuling und stelle mich wohl noch zu doof an.

    Ich würde mich freuen, wenn Du mir hier helfen könntest. Aus den bisherigen Beiträgen konnte ich bisher nicht eine Lösung für mich ableiten.

    Vielen Dank im voraus.
    Gruß Rainer

    • Hallo Reiner,

      vielen Dank für das Kompliment :)
      Wie willst du den auf das Pi über das Internet zugreifen? HTML oder SSH? Für SSH musst du den Port 22 freigeben. Port 80 ist nur HTTP. PuTTY Zugriffe funktionieren dann nicht.
      Was hast du den für Fehlermeldungen bei der anderen Seite? Kannst du mir da einen Screenshot schicken?

      Gruß
      Daniel

  26. Vielen Dank für das tolle Tutorial, hat auf meinem Pi B+ mit Raspbian fast sofort funktioniert.

    2 Problem mit Lösungsvorschlag möchte ich hier ergänzen:

    1.
    Beim ersten Versuch lighttpd zu starten kam die Fehlermeldung:
    Duplicate config variable in conditional 0 global: fastcgi.server
    ……. source: /etc/lighttpd/lighttpd.conf line: 37 pos: 1 parser failed somehow near here

    Erst als ich in Deiner Vorlage für lighttpd.conf den letzten Abschnitt gelöscht habe,
    war die Fehlermeldung beim Reload weg:

    fastcgi.server = ( „.php“ => ((
    „bin-path“ => „/usr/bin/php5-cgi“,
    „socket“ => „/tmp/php.socket“
    )))

    Wahrscheinlich liegt das daran, dass bereits durch den Befehl
    sudo lighty-enable-mod fastcgi
    diese Einstellungen erledigt wurden (?)

    2.
    php innerhalb html wird zunächst ignoriert. (gemischte html-Seite),
    Erst durch folgende Änderungen werden auch htm(l)-Dateien nach php-Befehlen geparst:

    Folgende Zeile in lighttpd.conf einfügen:
    fastcgi.map-extensions = ( „.html“ => „.php“, „.htm“ => „.php“ )

    Aus dieser Zeile „text/html“, entfernen
    compress.filetype = ( „application/x-javascript“, „text/css“, „text/html“, „text/plain“ )

    • Hallo Ralf,

      dank dir für die Korrekturen!
      Ich werde am Wochenende mal ein korrigiertes Config-File hochladen. :)

      Gruß
      Daniel

  27. Hallo Kampi,

    danke erstmal für die tolle Anleitung.
    Ich bekomme jedoch immer eine Fehlermeldung, wenn ich eine Datei mit der Uploadseite hochladen möchte:


    Warning: move_uploaded_file(/var/www/Uploads/Testseite.txt): failed to open stream: Permission denied in /var/www/Uploadpfad.php on line 31

    Warning: move_uploaded_file(): Unable to move '/tmp/phpqc3tEh' to '/var/www/Uploads/Testseite.txt' in /var/www/Uploadpfad.php on line 31

    Ich habe die HTML-Datei Upload.html genannt und die PHP-Datei Uploadpfad.php. Beide Dateien sind im Verzeichnis /var/www/ und am Code habe ich nichts geändert.
    Danach habe ich noch die Befehle
    sudo chown www-data.www-data /var/www/Upload.html
    sudo chown www-data.www-data /var/www/Uploadpfad.php

    eingegeben (ohne „sudo“ bekam ich die Meldung „chown: ▒ndern des Eigent▒mers von ▒/var/www/Upload.html▒: Die Operation ist nicht erlaubt“)

    Liegt es vielleicht an dem Safe-Mode? Wenn ja, wie kann ich den beenden? (eine php.ini konnte ich bisher nicht finden)

    • Hallo André,

      du hast den Dateien die Endung .php gegeben und beim chown-Befehl nennst du Dateien die die Endung .html haben.
      Das kann so nicht funktionieren ;)
      Deswegen bekommst du ohne sudo auch einen Fehler ausgegeben.
      Versuch es mal mit der richtigen Endung. Dann wird es bestimmt klappen. Ansonsten meldest du dich einfach noch mal :)

      Gruß
      Daniel

      • Danke für die Antwort!

        Ich habe das Problem gefunden:
        Ich hatte den chown-Befehl nicht auf den Upload-Ordner angewendet, sondern nur auf die HTML und die PHP Dateien.
        Ohne sudo hat das aber trotzdem nicht geklappt.

        Gruß
        André

  28. Hi Kampi,

    auch von mir ein großes Lob. Super Sache.
    Bei mir funktioniert alles bis auf eine Sache.
    Ich kann den Benutzernamen nicht ändern.

    Ich habe in der „Passwort.txt“ Datei
    Benutzername:Passwort
    in
    neuername:neuespasswort

    und in der „lightthpd.conf“.
    „require“ => „user=Benutzername“,
    in
    „require“ => „user=neuername“,

    geändert.

    Wo ist der Fehler?

    Vielen Dank!

  29. Pingback: Dynamische IP mit Bordmitteln | Rustimation

  30. Hi Kampi,
    erstmal großes Lob für die tolle Arbeit und deine super Anleitung.
    Ich hätte da noch eine Frage. Wenn ich jetzt Dateien hochlade,
    funktioniert das nur bis zu einer bestimmten Dateigröße.
    An was könnte das liegen bzw. kann man das beheben.

    Vielen Dank.

    Gruß
    André

  31. Hallo Rami,
    ich habe Probleme mit dem Passwort schutz.

    Im Teil :

    auth.require = (
    „/relativer Pfad zum Document root (/var/www) der geschützt werden soll/;
    (
    „method“ => „basic“,
    „realm“ => Password protected area“,
    „require“ => „user=>Benutzername“
    )
    )

    sind ein paar Fehler soweit ich feststellen konnte. bei realm fehlt das “

    und das Verzeichnis müsste so in etwa aussehen auth.require = ( „/“ =>

    leider haut es auch mit den Änderungen von mir nicht hin. Es wird der User uns Passwort abgefragt aber das hinterlegte funktioniert nicht..

    Grüße

    Jörg

    • Hallo Jörg,

      danke für die Anmerkung. Ich habe es bereits korrigiert.
      Das Password-File hast du erzeugt?

      Gruß
      Daniel

  32. Sorry Sollte natürlich Kampi heißen.

    Ja die datei habe ich angelegt.
    In der datei soll doch nur

    name:passwd

    stehen oder?

    Ich glaube es muss so aussehen:

    auth.require = ( „/“ =>
    (
    „method“ => „basic“,
    „realm“ => „Password protected area“,
    „require“ => „user=>Benutzername“
    )
    )

    ansonsten wird bei mir zumindest kein Benutzer abgefragt

    • Hallo,

      ja, stimmt. Ich hatte den „=>“ vergessen!
      Ist nun aber drin.
      Genau, die Formatierung ist Benutzername:Passwort

      Gruß
      Daniel

  33. Oh man…. Benutzername muss durch den namen ersetzt werden… ganz schön blöd :D

    ich glaube davor gehört aber kein => sondern nur =

  34. Hallo
    Ich habe das Problem das ich die Ausgänge als User PI setzen und auslesen kann. aber keine Funktionen über die Webseite gipio.php funktionieren. Bin der Meineung das ich alles nach den Vorgaben hier installiert habe.

    • Hallo Uwe,

      das hört sich für mich nach fehlenden Rechten an.
      Sicher, dass die GPIO Webseite die entsprechenden Zugriffsrechte etc. hat?

      Gruß
      Daniel

  35. Hi,

    VIELEN Dank für das script. Hat bei mir auch beinahe gleich funktioniert.

    Ich habe nur das Problem, dass ich bei Dateien die größer als etwa 1.5 MB sind den error1 als Antwort bekomme bekomme.
    http://quanttrader.ddns.net/upload.html

    bei 10MB bekomme ich dann jede menge Fehler:
    Notice: Undefined index: file in /var/www/up.php on line 20

    Notice: Undefined index: file in /var/www/up.php on line 26
    Upload:

    Notice: Undefined index: file in /var/www/up.php on line 27
    Type:

    Notice: Undefined index: file in /var/www/up.php on line 28
    Size: 0 Kb

    Notice: Undefined index: file in /var/www/up.php on line 30

    Notice: Undefined index: file in /var/www/up.php on line 31

    Notice: Undefined index: file in /var/www/up.php on line 32

    ist da irgendeine Beschränkung eingebaut?

    Philipp

  36. Hallo,
    ich habe eine weitere Frage:
    Kann man ein mit Python geschriebenes Programm auch per z.B. Doppelklick direkt starten?
    Ich hatte schon unter „Dateieigenschaften“ ausführen mit Python2 eingestellt. Dann öffnet sich das Programm in der IDLE und ich könnte es über Run starten. Aber das geht nicht, da ich ja (s.o.) root-Rechte benötige.

    Gruß

  37. Hallo,
    ich habe eine Frage zu meinem ersten etwas größeren Projekt „Wetterstation“. Ich lese vom DHT22 Temp und Feuchte aus und mit dem BMP085 den Luftdruck. Darstellung auf einem LCD 16×2 und in einer Log-Datei auf USB-Stick. Zusätzlich noch in drei Textdateien temp.txt, hum.txt und pres.txt. Diese möchte ich nutzen, um mit einem weiteren Programm diese Daten auf dem Firefox-Browser (bzw. Smartphone) auszugeben und so auch außerhalb de Homenetzes zu kontrollieren.
    Dazu habe ich schon lighttpd installiert und getestet. Funktioniert.
    Leider bekomme ich das mit der Browser-Ausgabe noch nicht hin. Ich erhalte nur Fehlermeldungen im Browser wenn ich das Python-Programm im Browser aufrufe.

    Gruß Ulli
    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    #LESEN
    import sys
    import time
    import cgi

    while True:
    try:
    DateiTemp = open(‚/media/usb/temp.txt‘, ‚r‘)
    zeile = DateiTemp.readline()
    temp = zeile
    DateiTemp.close()

    DateiHum = open(‚/media/usb/hum.txt‘, ‚r‘)
    zeile = DateiHum.readline()
    hum = zeile
    DateiHum.close()

    DateiPres = open(‚/media/usb/pres.txt‘, ‚r‘)
    zeile = DateiPres.readline()
    pres = zeile
    DateiPres.close()

    print temp, hum, pres

    time.sleep(5)

    # Web-Ausgabe

    seite = „““

    Messwerte-Ausgabe

    Messwerte:

    „““

    print(„Content-type: text/html\n\n“)

    print(seite)

    except KeyboardInterrupt:
    DateiTemp.close()
    DateiHum.close()
    DateiPres.close()
    sys.exit()

    • Hallo,

      was für eine Fehlermeldung bekommst du?
      Eventuell kann der Webserver da einfach nur nicht drauf zugreifen.
      Kopier mal ein paar Dateien nach /var/www und probier es erneut.

      Gruß
      Daniel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *