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:

Links

Protokoll

First upload: 2020-09-26 | Version: 2020-12-03