Webserver auf Synology NAS einrichten (4/4)
Im letzten Teil dieser Serie siehst du, wie man einen Webserver inkl. PHP auf einer Synology NAS einrichtet.
Allgemeines
Wenn du keinen Webspace bei einem Provider für deine IOT Daten nutzen möchtest und eine lokale NAS - z.B. eine Diskstation von Synology - zur Verfügung hast, kannst du auf der NAS einen Webserver einrichten. Da ein Webserver allein noch nicht alle ausreicht, ist auch die Installation einer Programmiersprache - in unserem Fall die Scriptsprache PHP notwendig
Installation des Webservers
Du meldest dich auf deiner NAS mit einem Admistrator an. Im Paketzentrum (Package Center) gibt es mehrere Webserver. Am einfachsten wählst du das Synology Paket "Web Station". Du drückst auf Installieren (Install) und nach kurzer Zeit ist der Webserver eingerichtet.
Hinweis: Die Webstation belegt standardmäßig den Port 80. Nachdem die Webstation aktiviert ist, ist für den Einstieg in den DSM künftig daher auch die Angabe des Ports :5000 bzw. :5001 notwendig. Standardmäßig kommt man mit der IP (und somit implizitem Port 80) - direkt auf den Webserver der NAS!
Mache einen ersten Test. Öffne ein neues Browserfenster und kontrolliere nach Eingabe der IP der NAS ob der Webserver läuft:
Die Installation der Web Station richtet auf der NAS ein Verzeichnis "web" ein. In diesem Verzeichnis liegen künftig alle deine Dateien die über den Webserver erreicht werden sollen.
Installation von PHP auf einer Synology NAS
Da du für die Datenübernahme nicht nur statische HTML Dateien benötigst, musst du auch Programme für dynamische Webseiten erstellen können. Am einfachsten beginnst du mit PHP.
Im Paketzentrum von Synology findest du unter 3rd Party mehrere PHP Versionen. Wenn du neu beginnst, entscheide dich einfach für die aktuellste Version - in meinem Fall war dies PHP 7.4 - und installiere das Packet.
Konfiguration von PHP am Synology NAS
Dem Webserver musst nun noch mitteilen, dass deine PHP Scripts mit PHP verarbeitet werden sollen. Wähle dazu im Paketzentrum wieder die Webstation und drücke auf Öffnen/Open
Im Status siehst du nun das PHP installiert ist. Du musst in den General Settings in der Listbox PHP jene PHP Version auswählen, die der Webserver verwenden soll.
Solange du den Webserver nicht öffentlich zugängig machst kannst du unter PHP Settings die Ausgabe von Fehlermeldungen aktivieren. Das ist die Option "Enable display_errors to display PHP error messages". Das erleichtet das Entwickeln von PHP Scripts da du detailierte Fehlermeldungen erhältst wenn etwas schief läuft. Wenn deine Scripts fertig sind oder du den Webserver öffentlich erreichbar machst, dann sollst du diese Option aus Sicherheitsgründen wieder deaktivieren.
Nun legst du mittels Filestation im Verzeichnis web ein Unterverzeichnis iot an. In dieses Verzeichnis iot stellst du eine Datei "info.php" mit folgendem Inhalt:
<?php echo "<h2>Hello World</h2>\n"; echo "<p>PHP Version ".phpversion()." is running<p>"; ?>
Gib nun in einem Browser Fenser http://{IP deiner NAS}/iot/info.php ein und du sollst folgendes sehen:
Standardmäßig dürfen PHP Scripts nur gelesen werden. Wir brauchen aber auch ein spezielles Verzeichnis in welchem Daten geschrieben werden dürfen. Daher legst du nun im Verzeichnis web/iot noch ein weiteres Unterverzeichnis web/iot/data an.
Du wählst das Verzeichnis data aus und setzt unter Permissions für die Usergruppe(!) http die Berechtigung Read & Write
Im Rahmen der PHP Scripterstellung hast du die Möglichkeit einen Test durchzuführen. Oder wenn du es gleich ausprobieren willst: folgendes Script check.php testet die Berechtigungen:
<?php echo "<h2>Check Permissions</h2>\n"; echo "<p>This script performs some read/write tests<p>"; $filepath = "data"; $filename = "temp.txt"; // current iot folder should have read only echo "<pre>\n"; // write $handle = fopen($filename,"a+"); if ($handle) echo "NOK: iot folder is writeable<br>\n"; else echo "OK: iot folder is not writeable<br>\n"; // read - obviously we an read otherwise the script would not run echo "OK : iot folder is readable<br>\n"; // delete - only in case it was writeable if ($handle) { fclose ($handle); if (unlink($filename)) echo "NOK: files in iot folder are deleteable<br>\n"; else echo "NOK: files in iot protected from delete, but still - we don't want files to be written in iot<br>\n"; } // folder with granted permissions // write $handle = fopen($filepath."/".$filename,"a+"); if ($handle) { echo "OK: subfolder $filepath is writeable<br>\n"; fclose ($handle); } else echo "NOK: subfolder $filepath is not writeable<br>\n"; // read $handle = fopen($filepath."/".$filename,"r"); if ($handle){ echo "OK: subfolder $filepath is readable<br>\n"; } else echo "NOK: subfolder $filepath is not readable<br>\n"; // delete if ($handle){ fclose ($handle); if (unlink($filepath."/".$filename)) echo "OK: files in subfolder $filepath can be deleted<br>\n"; else echo "NOK: files subfolder $filepath can not be delete<br>\n"; } echo "</pre>\n"; ?>
Wenn du dieses Script im Verzeichnis iot ausführst solltest du 5 mal OK erhalten.
Das Warning siehst du nur wenn die Fehlerausgabe von PHP aktiviert ist und ist vorerst in Ordnung.
Ausblick: Datenbank
Du kannst auf der NAS auch eine Datenbank installieren (z.b. Maria DB). Wir beschränken uns aber im ersten Teil auf das Loggen von Daten in flachen CSV Files.
Zusammenfassung
Du hast nun einen lokalen Webserver und kannst darauf PHP Scripts speichern um z. B. Messdaten von IOT Devices zu übernehmen. Weiter geht es nun mit:
- Datenübertragung zwischen ESP8266 und Webserver
- ESP8266 Sketch zur Datenübermittlung
- Webserver Daten übernehmen
- Einrichtung eines Webservers auf der eigenen Synology NAS (diese Seite)