Einfaches Webinterface einrichten

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Einfaches Webinterface einrichten

Beitrag von Richard » 07.05.2019 08:27:00

Hallo,

ich würde gern für meinen desktop mit Debian und ubuntu sowie für meinen pi ein kleines Webinterface einrichten um damit ganz einfache Skripte ausführen zu können, was ich bisher unter Android über JuiceSSH machen musste. Das ist teilweise etwas umständlich. Ein bsp. eines videoencodingscriptes: das Skript erwartet nur einen quellpfad. Ich will das Webinterface starten, auf den Menüpunkt 'encoding' klicken und dann zu einem dateiauswahldialog kommen wo ich mich durch den verzeichnisbaum hangeln kann und die Datei auswählen kann. Hab ich das gemacht, soll das Skript mit der ausgewählten Datei als input starten. Output wird automatisch erstellt.

Falls das läuft könnte man später noch überlegen den Fortschritt des Vorganges und weitere abfragen wie Meldung wenn fertig oder auto-shutdown einzufügen.

Ich kenne nur das Programm Cockpit, das scheint aber etwas anderes zu machen. Gibt es einfache anpassbare webinterfaces oder muss ich so etwas selbst erstellen?

Richard

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Einfaches Webinterface einrichten

Beitrag von MSfree » 07.05.2019 11:57:00

Richard hat geschrieben: ↑ zum Beitrag ↑
07.05.2019 08:27:00
oder muss ich so etwas selbst erstellen?
Ich denke, daß dein Wunsch zu speziell ist und es da nichts halbfertiges gibt, das du nur ein wenig modifizeiren mußt.

Im Prinzip bringt jeder CGI-fähige Webserver (nginx, apache...) Komponenten mit, die einem das Ausführen externer Programme ermöglicht. Auch das interaktive Durchsuchen von Verzeichnissen kann bei einem Webserver konfiguriert werden, ist aber üblicherweise aus Sicherheitsgründen abgestellt.

Mit etwas HTML kann man da auf jeden Fall etwas zusammenstecken.

Wenn dir ein Zugang per SSH reicht, könntest du dir auch mal Debianshellinabox ansehen. Das gibt dir einen SSH-Zugang über den Browser.

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Einfaches Webinterface einrichten

Beitrag von Lord_Carlos » 07.05.2019 12:05:59

MSfree hat geschrieben: ↑ zum Beitrag ↑
07.05.2019 11:57:00

Wenn dir ein Zugang per SSH reicht, könntest du dir auch mal Debianshellinabox ansehen. Das gibt dir einen SSH-Zugang über den Browser.
Das ist auch bei Cockpit dabei, was er schon installiert hat.

Geht reines HTML? Brauchst du nicht php oder NodeJs oder aehnliches?

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Einfaches Webinterface einrichten

Beitrag von Richard » 07.05.2019 12:15:09

HTML ist zu ziemlich die einzige Programmiersprache von der ich etwas weiss. Nginx hab ich schon mal auf dem pi verwendet, das Webinterface dazu war aber nicht von mir erstellt.

Selbst wenn nginx das durchsuchen eines verzeichnisbaumes unterstützt, müsste ich das ganze ja dennoch in HTML umsetzen, oder liefert nginx dafür schon etwas fertiges mit? Wie würde ich denn mit HTML Parameter an ein shell-script weiterleiten?

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Einfaches Webinterface einrichten

Beitrag von MSfree » 07.05.2019 12:21:45

Lord_Carlos hat geschrieben: ↑ zum Beitrag ↑
07.05.2019 12:05:59
Geht reines HTML? Brauchst du nicht php oder NodeJs oder aehnliches?
Browserseitig geht sowas mit reinem HTML. Wenn es etwas hübscher sein soll, nimmt man noch ein wenig Javascript dazu.

Serverseitig muß man halt den Übergang vom Webserver zur Ausführungsschicht der Maschine herstellen. Normalerweise darf ein Webserver aus Sicherheitsgründen keine Programme ausführen. Erst mit CGI kann man dem Webserver einzelne Programme zulassen, die ausgeführt werden dürfen.

Ob solche Programme PHP-, Pearl- oder Bash-Skripte oder in C/C++ geschriebene Executables sind, ist dabei egal. Die Programme laufen mit den Rechten des Webservers, also üblicherweise www-data.

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Einfaches Webinterface einrichten

Beitrag von Richard » 07.05.2019 13:09:49

Als ich kurzzeitig nginx genutzt habe, musste ich das Webinterface ala neue Webseite unter /var/www/Ordner einfügen. Darin gab es dann eine index. htm oder index.PHP, bin mir da nicht mehr sicher. Die Seite konnte ich dann ueber 'server-ip/Ordner/index.htm' aufrufen.

Eine einfache Seite aus ein paar buttons zu erstellen sollte ich mit HTML noch hin bekommen. Was ich nicht weiss, ist wie ich dann etwas ausführen lasse oder z. B. einen dateiauswahldialog starte der dann die ausgewählte Datei als Parameter an ein script über gibt.

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: Einfaches Webinterface einrichten

Beitrag von uname » 07.05.2019 13:46:33

Ich habe dir mal ein PHP-Script zusammengebaut. Da es eigentlich Textfelder über mehrere Zeilen verwaltet, ist es vielleicht nicht ganz optimal.
Die ganze Problematik mit CGI umgehe ich hierbei einfach.

Das Script index.php, welches du einfach auf deinen Apache2-Webserver (Webserver-root-Path) werfen kannst, editiert einfach nur die Datei "path.txt" (z. B. von Android auf deinen Webserver).
Nun müsstest du nur noch einen CRON-Job schreiben, der regelmäßig schaut, ob die Datei existiert. Wenn ja wird dein normales Programm einfach ausgeführt, nutzt den Inhalt der Datei path.txt und anschließend muss die Datei path.txt gelöscht werden.

Die Ausgabe ganz oben auf der generierten Webseite ( foreach ($file as $line) ) sowie das Einlesen von path.txt (else-Abschnitt) beim Fehlen von POST-Übergabeparameter ist eigentlich nicht unbedingt notwendig.

Für ein Pulldown-Menü wirst du wohl weit mehr Arbeit investieren müssen ;-)
Evtl. kannst du jedoch Teile des Pfads schon vordefinieren.

Code: Alles auswählen

<?php
$filename="path.txt";
$save_file = $_POST['save_file'];
$input = $_POST['input'];

if($save_file)
{
  $fp = @fopen($filename, "w");
  if ($fp)
  {
    fwrite($fp, $input);
    fclose($fp);
  }
}
else
{
  $fp = @fopen($filename, "r");
  $input = file_get_contents ($filename);
  fclose($fp);
}

$file = file($filename);
echo '<!DOCTYPE html><html lang="de"><body>';

foreach ($file as $line)
{
  echo $line;
}

echo '<form method=post action="' . $_SERVER['PHP_SELF'] . '?">';
echo '<input type="text" id="input" value="';
echo $input;
echo '" name="input" required minlength="1" maxlength="30" size="30" placeholder="path">';
echo '<br>';
echo '<input type="submit" name="save_file" value="Save"> ';
echo '</form>';
echo '</body></html>';
?>

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Einfaches Webinterface einrichten

Beitrag von MSfree » 07.05.2019 15:07:31

uname hat geschrieben: ↑ zum Beitrag ↑
07.05.2019 13:46:33
Nun müsstest du nur noch einen CRON-Job schreiben, der regelmäßig schaut, ob die Datei existiert.
Nicht schön, funktioniert aber. :wink:

Ich persönlich halte von Polling nicht viel. So kompliziert ist CGI nun auch nicht. Es ist auch nur eine URL, die vom Browser angeklickt werden muß. Der Webserver bekommt dieser URL übermittelt und löst dann das CGI-Programm aus. Parameter lassen sich auch an so ein Programm übergeben. Man schaue sich z.B. die URL für einen Beitrag in diesem Forum an:
viewtopic.php?f=15&t=173200

Hier wird also der Webserver des Debianforum aufgefordet, viewtopic.php auszuführen und diesem Skript die Paramater ?f=15&t=173200 zu übergeben. Auseinanderklamüsern muß diese Parameterliste dann das Skript.

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Einfaches Webinterface einrichten

Beitrag von Lord_Carlos » 07.05.2019 15:13:32

uname hat geschrieben: ↑ zum Beitrag ↑
07.05.2019 13:46:33
editiert einfach nur die Datei "path.txt" (z. B. von Android auf deinen Webserver)
Ist den Pfad mit dem Handy zu schreiben nicht genau das was OP versucht zu vermeiden? Sonnst koennte er ja auch ein script nehmen.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: Einfaches Webinterface einrichten

Beitrag von uname » 07.05.2019 15:53:02

Kann sein. Nur mit tollen Menüs braucht man dann schon fast wieder Javascript.
Falls man kein CRON nutzen will kann man evtl. https://www.php.net/manual/de/function.exec.php anschauen. CGI und Perl würde ich heute nicht mehr verwenden.

Nachtrag:
Du könntest auch einen einfachen One-File-Dateimanager wie https://github.com/prasathmani/tinyfilemanager nehmen.
Verzichte auf die Benutzerverwaltung (braucht man nicht). Starte ihn in einer relevanten Ebene, um unnötiges Klicken zu sparen.
(Demo mit Benutzeranmeldung: https://tinyfilemanager.github.io/demo/ )

Nun brauchst du noch eine Funktion, die die gewünschte Datei ausführt.
Mir erscheint es sinnvoll hierfür den Download-Button (ganz rechts) zu verwenden.

Hierfür müsstest du ab Zeile 618ff ein wenig umprogrammieren.
https://github.com/prasathmani/tinyfile ... anager.php

Ob das funktioniert weiß ich nicht.
Leider ist der Filemanager nicht für mobile Geräte geeignet (siehe Demo unter Android). Aber vielleicht kannst du ein paar unnötige Spalten entfernen.
(Size, Modified, Perms, Owner)

Weiterer Nachtrag:
Über Nacht ist mir eingefallen, dass du ja eigentlich einen Pfad angeben wolltest. Dafür ist wohl der Download-Button ungeeignet.
Zuletzt geändert von uname am 08.05.2019 08:59:38, insgesamt 1-mal geändert.

pferdefreund
Beiträge: 3791
Registriert: 26.02.2009 14:35:56

Re: Einfaches Webinterface einrichten

Beitrag von pferdefreund » 08.05.2019 06:58:36

Ich hatte auch mal ein ähnliches Problem. Da wurden Dateien auf einen Server hochgeladen und mussten anschließend nachbearbeitet werden. Gelöst hatte ich das mit pure_ftpd - da gibt es die Möglichkeit, nach dem Upload ein Uploadscript zu starten, was dann die Nacharbeiten erledigen kann. War damals genial und funktionierte perfekt.

Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Einfaches Webinterface einrichten

Beitrag von Tintom » 08.05.2019 09:57:20

uname hat geschrieben: ↑ zum Beitrag ↑
07.05.2019 15:53:02
Weiterer Nachtrag:
Über Nacht ist mir eingefallen, dass du ja eigentlich einen Pfad angeben wolltest. Dafür ist wohl der Download-Button ungeeignet.
Das Gegenstück in HTML wäre <input type="file">, siehe hier
Problem: Man kann nur im Pfad des Clienten suchen, nicht aber auf Serverebene. Oder doch?!

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: Einfaches Webinterface einrichten

Beitrag von uname » 08.05.2019 12:25:36

Timtom hat geschrieben:Problem: Man kann nur im Pfad des Clienten suchen, nicht aber auf Serverebene. Oder doch?!
Genau. Es ist eine Javascript-Implementierung, die natürlich nur clientseitig arbeitet.

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Einfaches Webinterface einrichten

Beitrag von Richard » 08.05.2019 13:01:07

Irgendwie versteh ich hier was nicht richtig. Unter Apache oder nginx muss ich doch nur das Webinterface in den entsprechenden Ordner verschieben. Wenn ich dann die URL eingeben wird es angezeigt. Ich verstehe dann den Umweg ueber die path.txt und cron nicht. Wenn ich da einen button einrichtet müsste es doch möglich sein ein script auszuführen? Das heisst gleich wenn ich den button klicken startet das script. Verstehe ich das richtig, dass gerade das normal nicht geht bei Apache und nginx und man dazu CGI braucht?

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: Einfaches Webinterface einrichten

Beitrag von uname » 08.05.2019 13:04:02

Das stimmt. Daher hatte ich ja anschließend noch folgendes geschrieben:
uname hat geschrieben:Falls man kein CRON nutzen will kann man evtl. https://www.php.net/manual/de/function.exec.php anschauen. CGI und Perl würde ich heute nicht mehr verwenden.
Nachtrag:
Ich habe mein Programm von oben umgeschrieben.
Es erwartet eine Eingabe und legt aktuell mit "touch <eingabe>" die Datei <eingabe> an.
Den Inhalt von exec(" ...") müsstest du nun anpassen. "touch" soll nur ein Beispiel sein. Die Zeile mit "echo" kannst du noch löschen.

Code: Alles auswählen

<?php
if (isset($_POST['input']))
{
   $input = $_POST['input'];
   echo $input;
   exec("touch $input");
}
echo '<!DOCTYPE html><html lang="de"><body>';
echo '<form method=post action="' . $_SERVER['PHP_SELF'] . '?">';
echo '<input type="text" id="input" value="';
echo $input;
echo '" name="input" required minlength="1" maxlength="30" size="30" >';
echo '<br>';
echo '<input type="submit" name="save_file" value="Save"> ';
echo '</form>';
echo '</body></html>';
?>
Zuletzt geändert von uname am 08.05.2019 13:21:40, insgesamt 2-mal geändert.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Einfaches Webinterface einrichten

Beitrag von MSfree » 08.05.2019 13:19:59

Richard hat geschrieben: ↑ zum Beitrag ↑
08.05.2019 13:01:07
Wenn ich da einen button einrichtet müsste es doch möglich sein ein script auszuführen?
Völlig richtig. Das funktioniert auch, aber nicht per Default.
Verstehe ich das richtig, dass gerade das normal nicht geht bei Apache und nginx und man dazu CGI braucht?
Du "brauchst" dazu kein CGI. CGI ist fester Bestandteil von Apache und nginx, allerdings per Default disabled. Alles was du machen mußt, um Skripte vom Webserver ausführen lassen zu können, ist CGI zu enablen.

Antworten