Datenbankserver zur zentralen Verwaltung von Daten

  • Einleitung

    Also was möchten wir machen. Nun wir wollen zunächst einmal einen Datenbankserver mit Datenbank aufbauen in den wir Datensätze eintragen können. Klingt erstmal simpel aber da können einige Fehler passieren.

    Warum schreibe ich wir? Naja ich möchte erstmal auf das Projekt von Niki1803 aufgreifen. Hier findet ihr das Projekt

    Da ich nicht so viel Zeit habe derzeit, aber eine zentrale Verwaltung für meine Daten haben möchte bevor ich weitere ESPs verbaue, beginne ich dieses Projekt.

    Die Möglichkeiten sind nahezu unbegrenzt.


    Vorteile & Nutzen

    Viele werden sich jetzt natürlich fragen wofür man sowas braucht. Naja eigentlich braucht ihr es ja auch nicht. Ihr habt die Homebridge und könnt darüber Licht ein oder aus schalten.

    Diese Projekt ist für Leute wie mich die sich gerne selbst analysieren. Wir sammeln so viele Daten wie möglich und bringen dem System bei mit den Daten zu arbeiten.

    Das kann unterschiedlich aussehen. Denkbare Anwendung der Daten wären zum Beispiel:

    1. Die Daten werden in Charts angezeigt und können so vom Nutzer ausgewertet werden. Zum Beispiel den Benzinverbrauch eines Autos in Verbindung mit der Uhrzeit.
    2. Die Daten werden direkt ausgewertet und es werden Prognosen getroffen. Zum Beispiel kann vorhergesagt werden wie viel Benzin ein Auto im nächsten Monat verbrauchen wird. Begründet an den vorliegenden Daten. Oder wie viel Wasser die Gartenanlage verbrauchen wird, etc.
    3. Das System kann wenn verschiedene Daten zusammenkommen eine oder mehrere Aktionen durchführen. Klar das kann ein Apple TV auch, aber hier können wir es genau auf unsere Bedürfnisse anpassen.

    Planung

    Nun was wollen wir denn nun erreichen?

    Also das ganze wird simpel aufgeteilt:

    1. Datenbankserver und phpmyadmin installieren
    2. Webserver aufsetzen um Daten anzuzeigen
    3. APIs erstellen um Daten automatisch schreiben zu lassen
    4. ESPs programmieren, die dann über die APIs in die Datenbank Datensätze einfügen können

    Nun klingt ja wirklich simpel. Bei einigen Punkten solltet ihr jedoch ein wenig mehr Zeit einplanen.


    Wer bis jetzt nur Bahnhof versteht, dem hab ich mal eine kleine Skizze gemalt. Nicht lachen ich hab mir Mühe gegeben! :D

    Nun gibts noch Fragen ;)^^









    Einkaufsliste

    Also ihr werdet einige Dinge brauchen um zu starten. Wir arbeiten mit Linux, also braucht ihr einen entsprechenden Server. Ich hoste den Webserver auf einem Linux Server in meinem Haus.

    Ihr könnt aber auch einfach einen Webspace nehmen, dann ist da meistens schon phpmyadmin und die nötigen Tools installiert ;)

    Alternativ könnt ihr auch den Raspi auf dem Homebridge läuft nutzen :/

    Grundwissen

    Also ich versuche das Projekt hier so simpel aber aufschlussreich zu erklären, wie es mir nur möglich ist. Dennoch möchte ich hier nicht eine 1:1 Anleitung zeigen. Ihr sollt inspiriert in euer eigenes Projekt starten und bei Problemen hier Rückhalt finden :)


    Ihr solltet also wissen, wie ihr auf einen Linux Server zugreift (ssh, ftp, http, etc.). Solltet ihr das nicht wissen, dann nutzt bitte zuerst Google und wenn ihr dann noch Fragen habt fragt ruhig hier rein.

    Die Installation

  • Der Datenbankserver


    Also ich habe ja bereits angekündigt, dass ihr auch selbst euer Hirn anstrengen müsst. Und hier kommt direkt die erste Hürde.

    Bitte installiert auf eurem Server phpmyadmin.

    Ich habe es sinngemäß nach diesem Tutorial gemacht. Wenn ihr kein Ubuntu nutzt (Sollte auch mit Raspbian gehen) dann sucht bitte nach einem passenden Tutorial für euer OS.


    Wichtig noch abschließend zu sagen:

    Falls ihr plant den Server frei für das Internet zugänglich zu machen, solltet ihr unbedingt ein SSL Zertifikat installieren.

    Ich habe meins per Let's Encrypt erstellt und lasse es regelmäßig erneuern. Solltet ihr dazu nichts passendes finden haut mich hier drunter an. Sollte aber recht simpel sein.


    So das wars auch schon. Wenn ihr euch nun in euer phpmyadmin einloggen könnt, dann seid ihr schon bereit für den nächsten Schritt :)

    Coming soon...:*

  • Arbeit in phpmyadmin


    Nun wir haben jetzt einen Datenbankserver, aber wir haben noch keine Datenbank. Diese erstellen wir in diesem Schritt.

    Unter dem Punkt Neu erstellt ihr eine neue Datenbank.

    Wichtig ist, dass ihr als Kollation utf8-general-ci verwendet. So könnt ihr auch alle deutschen Sonderzeichen verwenden.

    Bei dem Namen solltet ihr etwas nehmen, dass auf das Projekt hinweist. Ich habe zum Beispiel den Namen smarthome gewählt.





    Der nächste Schritt ist das erstellen von Tabellen. Hier werden später die Datensätze angezeigt.







    Wichtige Spalten der Tabellen sind:

    Name: Der Name, der beim abrufen zugeordnet wird.

    Typ: Der Typ des Wertes, der an dieser Stelle steht. Wichtig zu wissen: Ihr müsst den Datentyp immer vorher angeben.

    Standard: Wenn bei der Eingabe des Datensatzes kein Wert angegeben wird, so nimmt der Wert diesen Wert als Standard an.


    Ihr solltet eine Spalte angeben in der eine eindeutige Nummer für den Datensatz in der Tabelle gegeben ist. Dies könnt ihr automatisch bei Index einstellen.

    Macht ihr den Haken bei AI (Auto Increment) wird diese eindeutige Nummer pro Datensatz um 1 erhöht.


    Nun nach dem Erstellen der Tabelle können wir über den Menüpunkt Einfügen manuell Daten eingeben.

    Das bringt natürlich noch nicht sehr viel. Daher kümmern wir uns aber erst später zuerst tragen wir erstmal ein paar Daten ein. ;)

  • So da keine Nachfragen mehr kamen geht es heute direkt weiter mit dem nächsten großen Schritt.


    Einrichten eines Webverzeichnis


    So also hier ist es jetzt entscheidend, welche Form des Werbedienstes ihr gewählt habt. Habt ihr zum Beispiel einen Webspace mit Plesk gemietet ist die Installation sehr simpel. Ihr macht einfach eine neue Website. Findet ihr auch auf Google.


    Für die Anderen, die mit der Linux Shell gearbeitet haben folgen jetzt weitere Anweisungen:

    Ihr solltet wissen, wo eure Webdienste gepeichert werden. Der Standard ist hierfür /var/www/.

    Dort sollte auch phpmyadmin gespeichert sein. Jede Website hat einen eigenes Verzeichnis.

    Also phpmyadmin ist im ordner /var/www/phpmyadmin/ gespeichert und der die neue Website soll in /var/www/home/ liegen.


    Wer diese Theorie verstanden hat, der kann auch schon mit der Einrichtung anfangen. Solltet ihr nicht verstanden haben warum wir die Systeme in verschiedene Ordner gelegt haben fragt gerne nochmal unter diesem Beitrag. Das Projekt soll so transparent, wie nur möglich sein. :)


    So also dann zur Installation. Hier wird unter Ubuntu eine neue Seite angelegt.

    Wir gehen die Schritte von oben durch. Wirklich simpel.

    1. Verzeichnis anlegen. Als root oder in Ergänzung von sudo: mkdir /var/www/home So erstellen wir ein neues Verzeichnis, also eine neue Website im Ordner home. Dieser Ordnername home kann getauscht werden. Ihr solltet euch nur jetzt schon entscheiden.
    2. Da der Ordner derzeit root gehört, aber von Apache, also unserem Webdienst verwendbar sein muss, müssen wir die Rechte anpassen.
      Hierfür nutzen wir chown -R www-data:www-data /var/www/home und chmod -R 755 /var/www/home. Beides muss als root ausgeführt werden oder ihr müsst ein sudo ergänzen.
    3. Wir erstellen nun eine Beispiel Seite in diesem Verzeichnis, auf das wir zugreifen, um zu sehen ob alles geklappt hat.
      Hier für erstellen wir eine index.php in diesem Verzeichnis. Dies geht so: nano /var/www/hom/index.php
      Schickt ihr diesen Befehl ab, dann öffnet sich euer Editor und ihr gebt eine 0 ein und speichert mit Str+o und schließt mit Str+x.

    So damit habt ihr den nächsten großen Meilenstein gelegt. Von an könnt ihr auf die Seite zugreifen. Wenn ihr eine Domain auf euren Server zeigen lasst, dann könnt ihr auf diese Seite nun zugreifen mit domain/home


    Ich persönlich finde das nicht gut. Ich möchte clean auf einer Domain aufbauen. Also greife ich auf die Website nicht direkt mit meiner Domain zu, sondern mit einer Subdomain.

    Folgend wird das wie folgt aussehen subdomain.domain.de

    So könnt ihr auf einem Server direkt mehrere Websites installieren, ohne dass normale Nutzer etwas davon mitbekommen.

    Also wir sagen erstmal apache2, dass wir eine neue Website angelegt haben.

    Die verfügbaren Seiten werden durch die conf Dateien in /etc/apache2/sites-available/

    Nun wir legen für unsere Seite nun also eine neue Datei an mit sudo nano /etc/apache2/sites-available/home.conf


    Oh was ist denn ein DynDns Dienst. Nun dieser Teil ist nur relevant, wenn ihr den Server bei euch zuhause hostet. Solltet ihr das benötigen bitte benutzt Google. Die Einrichtung ist hierbei abhängig von eurem Router.

    Nur als Tipp zum Schluss: Ich verwende goip.de

    Dieser Dienst ist kostenlos und zuverlässig. ;)


    Solltet ihr den Server nicht zuhause hosten, dann könnt ihr den letzten Teil auch rauslassen. Solltet ihr den Server Zuhause hosten, macht dieses System auch keinen Sinn ^^


    So wenn die Config geschrieben ist speichern und schließen wir die Datei wieder.

    Nun müssen wir die Seite noch freischalten. Dies geht durch a2ensite home.conf

    Diesen Befehl müsst ihr als root ausführen oder mit sudo versehen.


    Jetzt laden wir apache2 noch einmal neu und können dann von der Domain aus auf die Seite zugreifen. Dies geht mit systemctl reload apache2

    Diesen Befehl müsst ihr auch als root ausführen oder mit einem sudo versehen.


    Nun sollte, wenn ihr eure Domain aufruft eine leere Seite zu sehen sein, auf der nur eine 0 zu sehen ist.

    Seid ihr so weit gekommen beglückwünsche ich euch und ihr seid bereit den nächsten Großen Schritt zu gehen.


    Sollte etwas nicht geklappt haben traut euch ruhig unter diesem Beitrag zu kommentieren ;)

  • FTP Zugang anlegen


    Also weiter gehts mit dem Projekt. Als nächstes machen wir was sehr simples. Wir wollen einen FTP Zugang zu unseren Dateien haben.

    Warum das?

    Viele System, darunter auch Ubuntu das ich benutze in diesem Projekt erlauben nicht den Login mit root per FTP.

    Wir brauchen also einen Benutzer der in diesem Ordner lesen und schreiben kann.

    Wichtig bevor wir anfangen mit den Rechten müsst ihr eigenständig einen FTP Dienst installieren. Das ist für die meisten kein Problem, weil in Raspbian und ubuntu schon entsprechende Dienste installiert sein sollten.

    Wer den Raspi verwendet kann im folgenden als Lieblingsuser einfach pi verwenden. Dieser Nutzer hat nämlich schon einen eigenen FTP Zugang ;)

    Wer einen neuen Benutzer anlegen will, der kann diesem Tutorial folgen. Falls was nicht klappt schreibt gerne einen Beitrag hier drunter. :)

    Wie machen wir das?

    Nun also eigentlich ganz simpel:

    1. Wir nehmen unseren Lieblingsuser und teilen den Ordner ihm zu. In meinem Fall wäre das sudo chown user /var/www/home
      Wir weisen also dem Nutzer user die Rechte für /var/www/home/ zu. In diesem Ordner liegt ja unser Webserver.
    2. Nun ändern wir die Rechte in für diesen Ordner. Das geht bei mir so chmod 775 /var/www/home
      Also wir machen mit diesem Befehl den Ordner /var/www/home und den Inhalt für den Besitzer und seine Gruppe, also user vollständig frei.
      Anderen Benutzern, machen wir die Dateien aber nur lesbar und ausführbar.

    Chmod Erklärung

    Also ich möchte euch an dieser Stelle noch einmal diesen Befehl erklären. Einen kompletten Überblick hierzu findet ihr hier.

    Code
    1. chmod -v 777 meinedatei.txt
    2. ││└── Andere
    3. │└─── Gruppe
    4. └──── Besitzer

    Hier erstmal ein Überblick. Wir haben 3 Zahlen die bestimmen welche Rechte welcher user hat.

    Jetzt suchen wir uns noch die richtigen Zahlen heraus:

    Code
    1. 7 = Voll
    2. 6 = Lesen und Schreiben
    3. 5 = Lesen und Ausführen
    4. 4 = Nur Lesen
    5. 3 = Schreiben und Ausführen
    6. 2 = Nur Schreiben
    7. 1 = Nur Ausführen
    8. 0 = Keine

    Dann bauen wir den Befehl zusammen und können so die Zugriffsrechte anpassen, wie wir sie brauchen. :)

    Gleichzeitig haben wir auch noch unser FTP Problem gelöst!

  • Gauweiler42

    Hat das Label von Planung auf Build geändert
  • Die robots.txt


    Heute aus Zeitgründen nur ein ganz kurzer neuer Beitrag.

    Es geht um die robots.txt. In der Theorie dient sie dazu den Crawler, also sozusagen den Kartograph für die Websites auf die richtigen Seiten zu lenken.

    Da das für uns aber wirklich sehr irrelevant ist nutzen wir die robots.txt dazu, dass unsere spätere Seite und die APIs auf gar keinen Fall auf Google erscheinen.

    Das geht wirklich sehr simpel. Wir erstellen eine Textdatei mit dem Name robots.txt in unserem Webverzeichnis und schon überprüfen die Crawler zuerst diese Datei.

    Damit die Crawler dann nicht weiter nach Inhalt suchen verbieten wir ihnen einfach den Zugriff auf alles.

    Das geht so:

    Code: robots.txt
    1. User-agent: *
    2. Disallow: /

    Wirklich sehr simpel und kurz heute :)

  • Halli hallo Gauweiler,


    sind Ferientage nicht was schönes. :)

    Ich habe alles bis hierhin installiert und bin für

    die nächsten "Schandtaten" bereit.


    War für mich als Noob ein ganz schöner Akt. =O Aber funktioniert jetzt alles.


    Freue mich auf weitere Inputs uns versuche mich bis dahin auch mal selber.


    Gruss Thomas

  • Schön zu hören und vielen Dank für deine Rückmeldung.

    Ich habe mir auch mal sehr lange Gedanken machen zu einem Thema das hier auch bald Anwendung findet :)

    Also nicht lange schwafeln, sondern direkt weiter zum nächsten Thema:


    PHP-SQL Verbindung herstellen


    Nun wie der Titel schon sagt möchte ich heute eine Verbindung per php zu meiner Datenbank aufbauen.

    Hierfür habe ich euch eine kleine Funktion geschrieben und in einer Datei in einem Unterordner abgespeichert.

    Wir befinden uns also nun in unserem Webverzeichnis und erstellen hier einen Unterordner.

    Der genaue Pfad lautet also dann /var/www/home/utils/sql.php

    Wie oben beschrieben greife ich per FTP auf das Verzeichnis /var/www/home/ zu und erstelle dort der Ordner und die Datei.

    Oder ich mache es schon im Terminal mit nano /var/www/home/utils/sql.php Hierbei wird der Ordner und die Datei direkt erstellt.


    Nun zur Datei

    In eurem Fall müsst ihr dann einfach in dieser Datei den Inhalt der Strings am Anfang tauschen. Je nachdem wie ihr alles benannt habt.

    Es empfiehlt sich einen neuen SQL Benutzer zu erstellen. Das geht sehr einfach in phpmyadmin unter dem Reiter Rechte.


    Wir werden diese Datei nun wie professionelle Informatiker als Blackbox verwenden. Also ihr wisst nicht wie sie funktioniert, aber ihr wisst was ihr reinstecken müsst und was ihr raus bekommt.

    Naja is ja ganz simpel rein steckt ihr nichts und raus kommt die Verbindung zur Datenbank ;)


    Aber was machen wir jetzt damit?

    Auch wieder ganz einfach. php liefert uns schon einige Funktionen mit denen wir arbeiten können.

    Wir müssen an den Start jeder php Datei in der wir mit den Werten der Datenbank arbeiten möchten einen Import dieser Datei setzen.

    Hier mal ein Beispiel:


    PHP: beispiel.php
    1. <?php
    2. include "./utils/sql.php";
    3. $sql = mysqli_query(getDBLink(), "SELECT * FROM tabelle WHERE tabelle.spalte = WERT");
    4. $list = mysqli_fetch_array($sql);
    5. echo($list['spalte']);

    Wir geben den Pfad zu der sql.php Datei relativ an. Ein . bedeutet das aktuelle Verzeichnis und ../ würde ein Verzeichnis davor bedeuten.


    Die Variable sql speichert unsere SQL Abfrage hierzu wird auch über unsere Blackbox Funktion eine Verbindung zur Datenbank aufgebaut.

    Die Variable list speichert das Ergebnis der Abfrage als Dictionary. Ein Dictionary ist ähnlich wie eine Liste, nur dass der Index nicht 0,1,2,3,usw. ist sondern ein Key der zugewiesen wird. In diesem Fall der Name der Spalte.


    Probiert mal ein wenig damit rum im nächsten Artikel werde ich noch etwas konkreter :)


    Falls es hier Probleme oder Fragen gibt stellt sie gerne hier drunter :*