j4nk3y: RasPi Apache/Node server

Guten Abend zusammen,

Ich habe heute Morgen etwa 2 Stunden damit verbracht mein Projekt auf mein RasPi zu laden und zum laufen zu bringen und wollte gerade weitermachen. Seit dem zerbreche ich mir den Kopf was schiefläuft aber ich finde keine Antwort.
Kurz vorweg, in der Komination XAMPP/Node.js und dem Projekt Ordner auf meinem PC läuft alles einwandfrei.
Wenn ich also im lokalen Netzwerk (Mein PC und RaspPi an meinem Router) per Browser auf den RasPi zugreife, bekomme ich wie erwartet die index.php zurück. Damit dann auch die CSS Datei(en) sowie Javascript Datei(en). In der CSS lade ich 2 Fonts, hier wird der erste (anscheinend) geladen, da kein Fehler in der Konsole auftaucht. Beim 2ten jedoch bekomme ich 404 Not Found zurück.
Weiterhin sollen dann Templates geladen werden, via AJAX. Hier bekomme ich aber leider nur ein 500 (Internal Server Error) zurück.

Mehrmaliges Apache/MySQL starten auf dem RasPi scheint nichts zu bewirken. Da ich absolut Ratlos bin hoffe ich, dass Jmd direkt ein rettenden Gedanken hat.

Vielen Dank und Gruß
Jo

  1. Hello,

    sind alle Pfade richtig?
    Stimmt die Groß-/Kleinschreibung? Die ist für den Raspbian(?) relevant, für deinen Windows(?)-Desktop aber nicht.

    Der 500er könnte falsche Zugriffsrechte bzw. Ownership als Ursache haben

    Liebe Grüße
    Tom S.

    --
    Die Krawatte ist das Kopftuch des Westens
    1. Guten Morgen,

      sind alle Pfade richtig?
      Stimmt die Groß-/Kleinschreibung? Die ist für den Raspbian(?) relevant, für deinen Windows(?)-Desktop aber nicht.

      Jup stimmt alles, daran liegts nicht.

      Der 500er könnte falsche Zugriffsrechte bzw. Ownership als Ursache haben

      Zugriffsrechte klingt gut. Ich bin gestern Abend noch auf die Glorreiche Idee gekommen die Log Datein auf dem RasPi durchzuschauen. (Darauf hätte ich echt früher kommen können)
      Aufjedenfall sieht es so aus, dass der Apache kein Zugriff auf den MySQL Server/Service (Bin mir über die Terminologie nicht ganz im klaren) hat. was dann etwa im Apache Log so aussieht:

      [Thu Mar 02 08:06:28.746703 2017] [:error] [pid 4126] [client 192.168.0.102:60289] PHP Warning:  mysqli::mysqli(): (28000/1045): Access denied for user 'root'@'localhost' (using password: NO) in /var/www/html/functions/server/php/db_connect_function.php on line 12, referer: http://192.168.0.222/
      [Thu Mar 02 08:06:29.256774 2017] [:error] [pid 4126] [client 192.168.0.102:60289] PHP Warning:  mysqli::mysqli(): (28000/1045): Access denied for user 'root'@'localhost' (using password: NO) in /var/www/html/functions/server/php/db_connect_function.php on line 12, referer: http://192.168.0.222/
      [Thu Mar 02 08:06:29.257009 2017] [:error] [pid 4126] [client 192.168.0.102:60289] PHP Warning:  mysqli::query(): Couldn't fetch mysqli in /var/www/html/templates/indexTemplates.php on line 7, referer: http://192.168.0.222/
      
      

      [ Jetzt werde ich also nachher/gleich erstmal versuchen, MySQL neu zu installieren, und dann dem Apache Rechte und Passwort für MySQL zu geben. ] (sollte eigentlich durchgestrichen sein, aber im Wiki steht nicht wie das geht.)

      Oder was mir grad auffällt, ich könnte auch probieren erstmal dem php script das Passwort für den MySQL Server/Service zu geben. Ha! und siehe da, es funktioniert!

      Danke schön!

      Gruß
      Jo

      1. Hallo j4nk3y,

        [ Jetzt werde ich also nachher/gleich erstmal versuchen, MySQL neu zu installieren, und dann dem Apache Rechte und Passwort für MySQL zu geben. ] (sollte eigentlich durchgestrichen sein, aber im Wiki steht nicht wie das geht.)

        Durchstreichungen sind bei Kramdown nicht vorgesehen. Aber der Trick ist dennoch im Wiki versteckt, bei den geordneten Listen. Er ist absichtlich nicht deutlicher formuliert.

        Bis demnächst
        Matthias

        --
        Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
        1. Aloha ;)

          Aber der Trick ist dennoch im Wiki versteckt, bei den geordneten Listen.

          Jetzt nicht mehr - ich war grad sowieso in der kramdown-Referenz und habe da den End-Of-Block Marker gefunden, der an der Stelle viel angebrachter ist als ein verstecktes Element.

          Grüße,

          RIDER

          --
          Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
          # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
          1. Hallo Camping_RIDER,

            Jetzt nicht mehr - ich war grad sowieso in der kramdown-Referenz und habe da den End-Of-Block Marker gefunden, der an der Stelle viel angebrachter ist als ein verstecktes Element.

            Der aber (visuell noch) nicht funktioniert:

            * foo
            * bar
            ^ 
            
            
            * foo
            * bar
            
            • foo

            • bar ^

            • foo

            • bar

            1. foo
            2. bar ^
            3. foo
            4. bar

            Es fehlt:

            .thread-message .posting-content ul,
            .thread-message .posting-content ol {
              margin-top: 1em;
              padding-left: 2em;
            }
            

            Bis demnächst
            Matthias

            --
            Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
            1. Aloha ;)

              .thread-message .posting-content ul,
              .thread-message .posting-content ol {
                margin-top: 1em;
                padding-left: 2em;
              }
              

              Übernimmst du das, dass das im Foren-CSS landet?

              Grüße,

              RIDER

              --
              Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
              # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
              1. Hallo Camping_RIDER,

                Übernimmst du das, dass das im Foren-CSS landet?

                Nein, aber ich habe schon die Vorarbeit geleistet.

                Bis demnächst
                Matthias

                --
                Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
                1. Aloha ;)

                  Übernimmst du das, dass das im Foren-CSS landet?

                  Nein, aber ich habe schon die Vorarbeit geleistet.

                  Ungefähr so meinte ich das 😉

                  Muchas gracias.

                  Mir mal das Forum zu Pullen um selber ein wenig beitragen zu können ist auch ein Punkt auf meiner viel zu langen ToDo-Liste 😟

                  Grüße,

                  RIDER

                  --
                  Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
                  # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
      2. Hello,

        [Thu Mar 02 08:06:28.746703 2017] [:error] [pid 4126] [client 192.168.0.102:60289] PHP Warning:  mysqli::mysqli(): (28000/1045): Access denied for user 'root'@'localhost' (using password: NO) in /var/www/html/functions/server/php/db_connect_function.php on line 12, referer: http://192.168.0.222/
        [Thu Mar 02 08:06:29.256774 2017] [:error] [pid 4126] [client 192.168.0.102:60289] PHP Warning:  mysqli::mysqli(): (28000/1045): Access denied for user 'root'@'localhost' (using password: NO) in /var/www/html/functions/server/php/db_connect_function.php on line 12, referer: http://192.168.0.222/
        [Thu Mar 02 08:06:29.257009 2017] [:error] [pid 4126] [client 192.168.0.102:60289] PHP Warning:  mysqli::query(): Couldn't fetch mysqli in /var/www/html/templates/indexTemplates.php on line 7, referer: http://192.168.0.222/
        
        

        [ Jetzt werde ich also nachher/gleich erstmal versuchen, MySQL neu zu installieren, und dann dem Apache Rechte und Passwort für MySQL zu geben. ] (sollte eigentlich durchgestrichen sein, aber im Wiki steht nicht wie das geht.)

        Oder was mir grad auffällt, ich könnte auch probieren erstmal dem php script das Passwort für den MySQL Server/Service zu geben. Ha! und siehe da, es funktioniert!

        Bovor Du etwas öffentlich stellst, richte Dir aber einen eigenen User ein für die PHP-Connection zu MySQL. Das geht einfach mit dem MySQL-Konsolen-Client und "Grant". Der User sollte nur auf die Datenbank Zugriff haben (Select, Insert, Update, Delete), die ihn angeht, normalerweise keine Tabellen oder gar Datenbanken droppen können, usw.

        Und wenn es um Webapps geht, bei denen es auch "Nur sehen"-Scripte gibt, solltest Du dafür auch einen eigenen User einrichten, der eben nur SELECT darf.

        Liebe Grüße
        Tom S.

        --
        Die Krawatte ist das Kopftuch des Westens
        1. Hey,

          Bovor Du etwas öffentlich stellst, richte Dir aber einen eigenen User ein für die PHP-Connection zu MySQL. Das geht einfach mit dem MySQL-Konsolen-Client und "Grant". Der User sollte nur auf die Datenbank Zugriff haben (Select, Insert, Update, Delete), die ihn angeht, normalerweise keine Tabellen oder gar Datenbanken droppen können, usw.

          Und wenn es um Webapps geht, bei denen es auch "Nur sehen"-Scripte gibt, solltest Du dafür auch einen eigenen User einrichten, der eben nur SELECT darf.

          Danke für den Hinweis. Aber soweit bin ich noch nicht. Erstmal möchte ich den Pi nur als dauerlaufenden Server nutzen um mit Cronjobs zu arbeiten und ein Gefühl von Performance/Auslastung zu bekommen. Also der Port nach außen bleibt erstmal geschlossen.

          Gruß
          Jo

          1. Hello,

            Und wenn es um Webapps geht, bei denen es auch "Nur sehen"-Scripte gibt, solltest Du dafür auch einen eigenen User einrichten, der eben nur SELECT darf.

            Danke für den Hinweis. Aber soweit bin ich noch nicht. Erstmal möchte ich den Pi nur als dauerlaufenden Server nutzen um mit Cronjobs zu arbeiten und ein Gefühl von Performance/Auslastung zu bekommen. Also der Port nach außen bleibt erstmal geschlossen.

            Dann kannst Du das mit den unterschiedlichen Usern ja trotzdem schon mal üben ;-)

            Andere Frage: was für ein Paket hast Du jetzt genau gebaut und was hat es gekostet?
            Könntest Du mal ein bisschen mehr erzählen darüber?

            Liebe Grüße
            Tom S.

            --
            Die Krawatte ist das Kopftuch des Westens
            1. Hey,

              Dann kannst Du das mit den unterschiedlichen Usern ja trotzdem schon mal üben ;-)

              Das werde ich tun, danke dir.

              Andere Frage: was für ein Paket hast Du jetzt genau gebaut und was hat es gekostet?
              Könntest Du mal ein bisschen mehr erzählen darüber?

              Paket? Der Pi? Das ist ein 2er B+ mit Gehäuse, hab den von meinem Chef gekauft, für "billig Geld" (etwa 50€), zum lernen reicht es auf jedenfall erstmal.

              Gruß
              Jo

            2. Hallo TS,

              Andere Frage: was für ein Paket hast Du jetzt genau gebaut und was hat es gekostet?
              Könntest Du mal ein bisschen mehr erzählen darüber?

              Ich bin zwar nicht Jo, aber ich würde folgendes Setup empfehlen:

              |Raspberry Pi 3B|37-40€| |Eine schnelle microSD-Karte (class 10), 16GB reicht|10€| |offizielles Netzteil|14€| |offizielles Gehäuse|7€|

              Summe: 70€

              Das offizielle Netzteil kannst du dir ggf. sparen, falls du noch eines hast, das dauerhaft 2,5A liefern kann[1] und ein ordentliches Kabel[2] bzw. Anschlussleitung hat – der Raspberry Pi meckert sonst. Das Gehäuse kannst du dir auch sparen, wenn du eins selbst bastelst (Pappe, Lego 😉).

              Falls es etwas weniger sein darf (Preislich und von der Leistung her), kannst du auch mal einen Blick auf den Raspberry Pi Zero bzw. den etwas neueren Zero W (mit WLAN und Bluetooth) werfen. Letzteren gibt es im „Kit“ für 25€ – alleine gibt es den momentan leider[3] selten, weil der Hersteller nicht genug herstellen kann...

              Konkurrenz-Produkten taugen leider oft nichts, weil der Software-Support für die Tonne ist.

              Gruß
              Julius



              1. Ich habe eines mit 2,1A im Einsatz, das reicht bei mir im Moment aus, vorhandene Netzteile kann man ja einfach mal ausprobieren. ↩︎

              2. oft reicht das Netzteil an sich aus, aber der Spannungsabfall am Kabel ist zu hoch... ↩︎

              3. Diese Kits sind m. M. n. ziemlich unnütz, USB-Adapter und Netzteil hat man oft schon (beides vom Handy). ↩︎

      3. Aloha ;)

        [ Jetzt werde ich also nachher/gleich erstmal versuchen, MySQL neu zu installieren, und dann dem Apache Rechte und Passwort für MySQL zu geben. ]

        *scnr*

        Grüße,

        RIDER

        --
        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
        # Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
        1. Moin,

          [ Jetzt werde ich also nachher/gleich erstmal versuchen, MySQL neu zu installieren, und dann dem Apache Rechte und Passwort für MySQL zu geben. ]

          Ahhh :)

          Gruß
          Jo

  2. Hallo alle,

    So nach etwas rumbasteln und Log lesen etc, funktioniert jetzt fast alles, jedenfalls komme ich schritt für Schritt vorwärts.

    Hier liegt nun das nächste Problem.

    Apache Log:

    1. [Thu Mar 02 16:46:49.959531 2017] [:error] [pid 5689] [client 192.168.0.102:55387] PHP Warning: mysqli::begin_transaction(): This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required in /var/www/html/functions/server/php/abc.php on line 25, referer: http://192.168.0.222/

    2. [Thu Mar 02 16:46:50.044265 2017] [:error] [pid 5689] [client 192.168.0.102:55387] PHP Fatal error: Call to undefined method mysqli_stmt::get_result() in /var/www/html/functions/server/php/xyz.php on line 5, referer: http://192.168.0.222/

    Ich habe grad nochmal fix mit sudo apt-get -y install php5 libapache2-mod-php5 PHP neu installiert um die aktuellste Version zu haben. Jedoch ohne erfolgreiche Behebung des Fehlers.
    Ein sudo apt-cache policy php5 gibt mir jedoch die Version von PHP zu 5.6.24 ( +dfsg-0+deb8u1 Was auch immer das heißen mag) aus.

    Danke euch.

    Gruß
    Jo

    1. Vermutlich hast Du da Versionskonflikte, Du installierst mit apt-get und guckst dann was der XAMPP macht -- das wird nüscht.

      MfG

      1. Hey,

        Vermutlich hast Du da Versionskonflikte, Du installierst mit apt-get und guckst dann was der XAMPP macht -- das wird nüscht.

        Wieso XAMPP? Ich schau in die Log Datei vom Apache2 auf dem Pi.

        Gruß
        Jo

    2. Hello,

      Hier liegt nun das nächste Problem.

      1. [Thu Mar 02 16:46:49.959531 2017] [:error] [pid 5689] [client 192.168.0.102:55387] PHP Warning: mysqli::begin_transaction(): This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required in /var/www/html/functions/server/php/abc.php on line 25, referer: http://192.168.0.222/

      Das sieht so aus, als hättest Du die Tabellen mit MyISAM gebaut und nicht mit innoDB. Kann das sein?

      1. [Thu Mar 02 16:46:50.044265 2017] [:error] [pid 5689] [client 192.168.0.102:55387] PHP Fatal error: Call to undefined method mysqli_stmt::get_result() in /var/www/html/functions/server/php/xyz.php on line 5, referer: http://192.168.0.222/

      Darf man die Methode überhaupt statisch aufrufen? Da weiß die doch gar nicht, wo ihre Daten liegen!

      Also mNm erst einmal ein Objekt ($meinObj) erzeugen lassen und dann mit $meinObj->get_result() darauf zugreifen.

      Liebe Grüße
      Tom S.

      --
      Die Krawatte ist das Kopftuch des Westens
      1. Heyho,

        1. [Thu Mar 02 16:46:49.959531 2017] [:error] [pid 5689] [client 192.168.0.102:55387] PHP Warning: mysqli::begin_transaction(): This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required in /var/www/html/functions/server/php/abc.php on line 25, referer: http://192.168.0.222/

        Das sieht so aus, als hättest Du die Tabellen mit MyISAM gebaut und nicht mit innoDB. Kann das sein?

        Ne ist InnoDB.

        1. [Thu Mar 02 16:46:50.044265 2017] [:error] [pid 5689] [client 192.168.0.102:55387] PHP Fatal error: Call to undefined method mysqli_stmt::get_result() in /var/www/html/functions/server/php/xyz.php on line 5, referer: http://192.168.0.222/

        Darf man die Methode überhaupt statisch aufrufen? Da weiß die doch gar nicht, wo ihre Daten liegen!

        Wast heißt statisch in deisem Zusammenhang? Das sieht im Script so aus:

        $select = $db->prepare(sprintf("SELECT a,b,c,d,e FROM tabelle WHERE id = %d", mysqli_real_escape_string($db, $_POST['id'])));
        $select->execute();
        $result = $select->get_result();
        

        Die letzte Zeile ist dann Line 5.

        Grad noch gefunden, dass es vllt ein Problem mit dem mysqli Treiber geben könnte und mit sudo apt-get install php5-mysqlnd nachinstalliert und alles neu gestartet aber leider auch kein Erfolg.
        Auch unter den 'available mods' von PHP ist die mysqli.ini vorhanden.

        Gruß
        Jo

        1. Hello,

          Darf man die Methode überhaupt statisch aufrufen? Da weiß die doch gar nicht, wo ihre Daten liegen!

          Wast heißt statisch in deisem Zusammenhang? Das sieht im Script so aus:

          $select = $db->prepare(sprintf("SELECT a,b,c,d,e FROM tabelle WHERE id = %d", mysqli_real_escape_string($db, $_POST['id'])));
          $select->execute();
          $result = $select->get_result();
          

          Könnte der Fehler schon in der Zeile $select = $db->prepare(sprintf("SELECT a,b,c,d,e FROM tabelle WHERE id = %d", mysqli_real_escape_string($db, $_POST['id']))); stecken?

          Wofür benutzt Du prepared Statements, wenn Du dann totzdem noch escapest?

          Liebe Grüße
          Tom S.

          --
          Die Krawatte ist das Kopftuch des Westens
          1. Hey,

            $select = $db->prepare(sprintf("SELECT a,b,c,d,e FROM tabelle WHERE id = %d", mysqli_real_escape_string($db, $_POST['id'])));
            $select->execute();
            $result = $select->get_result();
            

            Könnte der Fehler schon in der Zeile $select = $db->prepare(sprintf("SELECT a,b,c,d,e FROM tabelle WHERE id = %d", mysqli_real_escape_string($db, $_POST['id']))); stecken?

            Das läuft eigentlich ohne Problem mit XAMPP.

            Wofür benutzt Du prepared Statements, wenn Du dann totzdem noch escapest?

            Weil mir beigebracht wurde das ich alles escapen muss, ich hab mich einfach dran gewöhnt. Ist aber wohl einfach ein Überbleibsel aus der Abfrage wo das Stmt noch nicht prepared wurde.

            Ersten Fehler konnte ich übrigens lösen durch :

            $db->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
            

            zu :

            $db->begin_transaction();
            

            Obwohl ich mir nicht sicher bin ob das Sinn macht.

            Gruß
            Jo

          2. Tach!

            $select = $db->prepare(sprintf("SELECT a,b,c,d,e FROM tabelle WHERE id = %d", mysqli_real_escape_string($db, $_POST['id'])));
            $select->execute();
            $result = $select->get_result();
            

            Könnte der Fehler schon in der Zeile $select = $db->prepare(sprintf("SELECT a,b,c,d,e FROM tabelle WHERE id = %d", mysqli_real_escape_string($db, $_POST['id']))); stecken?

            Wofür benutzt Du prepared Statements, wenn Du dann totzdem noch escapest?

            So wie er das Statement hier nutzt, muss maskiert werden. Maskieren kann (und muss dann) man sich nur sparen, wenn man die Parameter per Binding übergibt.

            dedlfix.

            1. Hello,

              Könnte der Fehler schon in der Zeile $select = $db->prepare(sprintf("SELECT a,b,c,d,e FROM tabelle WHERE id = %d", mysqli_real_escape_string($db, $_POST['id']))); stecken?

              Wofür benutzt Du prepared Statements, wenn Du dann totzdem noch escapest?

              So wie er das Statement hier nutzt, muss maskiert werden. Maskieren kann (und muss dann) man sich nur sparen, wenn man die Parameter per Binding übergibt.

              Danke. Da muss ich meinen Holzweg auch nochmal überarbeiten :-O

              Liebe Grüße
              Tom S.

              --
              Die Krawatte ist das Kopftuch des Westens
    3. Hallo alle,

      Apache Log:

      1. [Thu Mar 02 16:46:49.959531 2017] [:error] [pid 5689] [client 192.168.0.102:55387] PHP Warning: mysqli::begin_transaction(): This server version doesn't support 'READ WRITE' and 'READ ONLY'. Minimum 5.6.5 is required in /var/www/html/functions/server/php/abc.php on line 25, referer: http://192.168.0.222/

      2. [Thu Mar 02 16:46:50.044265 2017] [:error] [pid 5689] [client 192.168.0.102:55387] PHP Fatal error: Call to undefined method mysqli_stmt::get_result() in /var/www/html/functions/server/php/xyz.php on line 5, referer: http://192.168.0.222/

      So, ich habe beides lösen können. Ich kann nicht genau sagen wie ich es gemacht habe aber das was ich getan habe hat geholfen.

      sudo apt-get update, sudo apt-get install php5-mysqlnd

      Nach einigen malen hin und her installieren, waren soviele neue dateien in dem apache2 Ordner die vorher nicht da waren, dass ich den überblick verloren hab. Jedenfalls nach einem Update und der Installation von php5-mysqlnd läuft jetzt beides.

      Wichtig: mysqli_stmt::get_result() funktioniert auch nur mit dem mysql native driver.

      Gruß
      Jo