Einfaches Webinterface einrichten
-
- Beiträge: 653
- Registriert: 11.10.2012 14:18:37
- Lizenz eigener Beiträge: GNU General Public License
Einfaches Webinterface einrichten
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
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
Re: Einfaches Webinterface einrichten
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
![Debian](/pics/debianpackage.png)
- 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
Das ist auch bei Cockpit dabei, was er schon installiert hat.MSfree hat geschrieben:07.05.2019 11:57:00
Wenn dir ein Zugang per SSH reicht, könntest du dir auch malshellinabox ansehen. Das gibt dir einen SSH-Zugang über den Browser.
Geht reines HTML? Brauchst du nicht php oder NodeJs oder aehnliches?
Code: Alles auswählen
╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!
-
- Beiträge: 653
- Registriert: 11.10.2012 14:18:37
- Lizenz eigener Beiträge: GNU General Public License
Re: Einfaches Webinterface einrichten
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?
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?
Re: Einfaches Webinterface einrichten
Browserseitig geht sowas mit reinem HTML. Wenn es etwas hübscher sein soll, nimmt man noch ein wenig Javascript dazu.Lord_Carlos hat geschrieben:07.05.2019 12:05:59Geht reines HTML? Brauchst du nicht php oder NodeJs oder aehnliches?
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.
-
- Beiträge: 653
- Registriert: 11.10.2012 14:18:37
- Lizenz eigener Beiträge: GNU General Public License
Re: Einfaches Webinterface einrichten
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.
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.
Re: Einfaches Webinterface einrichten
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![Wink ;-)](./images/smilies/icon_wink.gif)
Evtl. kannst du jedoch Teile des Pfads schon vordefinieren.
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
![Wink ;-)](./images/smilies/icon_wink.gif)
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>';
?>
Re: Einfaches Webinterface einrichten
Nicht schön, funktioniert aber.uname hat geschrieben:07.05.2019 13:46:33Nun müsstest du nur noch einen CRON-Job schreiben, der regelmäßig schaut, ob die Datei existiert.
![Wink :wink:](./images/smilies/icon_wink.gif)
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.
- 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
Ist den Pfad mit dem Handy zu schreiben nicht genau das was OP versucht zu vermeiden? Sonnst koennte er ja auch ein script nehmen.uname hat geschrieben:07.05.2019 13:46:33editiert einfach nur die Datei "path.txt" (z. B. von Android auf deinen Webserver)
Code: Alles auswählen
╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!
Re: Einfaches Webinterface einrichten
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.
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.
-
- Beiträge: 3800
- Registriert: 26.02.2009 14:35:56
Re: Einfaches Webinterface einrichten
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.
Re: Einfaches Webinterface einrichten
Das Gegenstück in HTML wäre <input type="file">, siehe hieruname hat geschrieben:07.05.2019 15:53:02Weiterer Nachtrag:
Über Nacht ist mir eingefallen, dass du ja eigentlich einen Pfad angeben wolltest. Dafür ist wohl der Download-Button ungeeignet.
Problem: Man kann nur im Pfad des Clienten suchen, nicht aber auf Serverebene. Oder doch?!
Re: Einfaches Webinterface einrichten
Genau. Es ist eine Javascript-Implementierung, die natürlich nur clientseitig arbeitet.Timtom hat geschrieben:Problem: Man kann nur im Pfad des Clienten suchen, nicht aber auf Serverebene. Oder doch?!
-
- Beiträge: 653
- Registriert: 11.10.2012 14:18:37
- Lizenz eigener Beiträge: GNU General Public License
Re: Einfaches Webinterface einrichten
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?
Re: Einfaches Webinterface einrichten
Das stimmt. Daher hatte ich ja anschließend noch folgendes geschrieben:
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.
Nachtrag: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.
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.
Re: Einfaches Webinterface einrichten
Völlig richtig. Das funktioniert auch, aber nicht per Default.Richard hat geschrieben:08.05.2019 13:01:07Wenn ich da einen button einrichtet müsste es doch möglich sein ein script auszuführen?
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.Verstehe ich das richtig, dass gerade das normal nicht geht bei Apache und nginx und man dazu CGI braucht?