Pure Bash Lightweight Web Server.
Einfache Lösung zum Einrichten einer lokalen Website ohne Serverkonfiguration !!!
Dies ist von Bashttpd inspiriert. Das Verhalten ist jedoch völlig anders. Weitere Informationen finden Sie weiter unten.
Präsentation
Wie man benutzt
Wie man benutzt (Experte)
Beispiel
Über Sicherheit
Warum Sherver?
Lizenz?
Einfach klonen und rennen ./sherver.sh . Dann sollten Sie in der Lage sein, eine Verbindung zu Localhost: 8080 herzustellen. Sie können den Port übergeben, um sie als Parameter anzuhören: ./sherver.sh 8080 (Standard ist 8080 ).
Dies wird dazu gebracht, mit Bash zu laufen. Es funktioniert möglicherweise nicht in einer anderen Hülle. Die folgenden Tools müssen im System vorhanden sein (beachten Sie, dass sie alle Teil der Standardinstallation von Debian sind):
envsubst , wenn Sie Vorlagen machen möchtensocat , um den Server auszuführen.netcat verwenden, aber es funktioniert nicht gut mit gleichzeitigen HTTP -AnfragenSherver ist ein Webserver, der einen Teil von HTTP 1.0 implementiert. Auch wenn es in ein paar Zeilen von Bash geschrieben ist, kann es viel tun:
scripts oder in file hinzufügenstdout ausgebenAll dies macht Sherver zum perfekten Tool, um einen kleinen Server auszuführen, auf dem nur wenige Seiten in Ihrem lokalen Netzwerk bereitgestellt werden.
Auch wenn es fantastisch klingt, hat Sherver immer noch die folgenden Einschränkungen:
Aus diesem Grund soll Sherver in einer privaten und kontrollierten Umgebung bleiben. Scherver nicht im Internet aufdecken !!! Wenn Sie Ihre Website im Internet aufdecken möchten, sollten Sie ein Tool verwenden, das Sicherheit und Parallelität (wie Nginx oder andere) kennt.
Führen Sie immer Sherver hinter einer Firewall, die Eindringlinge von außen verhindern .
Schnelle Dokumentation zur Verwendung von Sherver für Ihren eigenen Gebrauch. Alle hier genannten Variablen und Funktionen haben eine vollständige Beschreibung in Skripten/Readme.md.
Das einfachste, was Sie tun können, ist, statische Seiten zu servieren: reine HTML -Dateien, die keine Verarbeitung benötigen.
Dazu müssen Sie Ihre HTML -Dateien nur in die Subdirektory -Datei/die Seiten einsetzen. Anschließend können Sie über eine URL wie /file/pages/index.html auf Ihre Seiten zugreifen (wenn Ihr Dateiname index.html ist).
Beachten Sie, dass Sie den vollständigen Dateinamen in der URL angeben müssen, damit Sherver ihn finden kann.
Es ist so einfach so! Wenn Sherver die Datei finden kann, serviert sie sie. Andernfalls gibt es einen 404 -Fehler zurück.
Sie können jede Art von Dateien von Sherver ausstellen. Von textbasiertem CSS oder JavaScript bis hin zu Binärdateien wie Bildern, Videos, Reißverschluss ...
Fügen Sie einfach die Dateien in die Subdirektory -Datei ein. Sie können sie dann über eine URL wie /file/venise.webp verweisen. Beachten Sie, dass es vorzuziehen ist, den vollständigen Pfad und nicht den relativen Pfaden zu geben.
Sherver serviert die Datei automatisch, wenn sie sie mit dem richtigen MIME -Typ finden kann. Damit kann der Browser sogar die Datei zwischenspeichern, und wird sie nur erneut servieren, wenn sich die Datei geändert hat. Wenn Sherver die Datei nicht finden kann, wird ein 404 -Fehler zurückgegeben.
Für Ressourcen wie CSS, JavaScript, Favicon ... ist es besser, sie in die Unterordnerdatei/die Ressourcen zu setzen, obwohl Sie es nicht müssen.
Beispiel, wie Sie eine CSS -Datei verknüpfen:
< link rel =" stylesheet " type =" text/css " href =" /file/resources/ugly.css " >Beispiel, wie Sie ein Bild in Ihr HTML integrieren:
< img src =" /file/venise.webp " alt ="" >Hier wird Sherver nützlich: Es kann dynamische Seiten dienen, die Serverseite je nach Kontext erstellt.
Zu diesem Zweck müssen Sie nur ausführbare Sendungen in den Unterordner -Skripten hinzufügen. Executables können von allen Typen (Bash -Skript, Python -Skript, alle anderen Skripte, alle binären C ++ kompilierten ausführbaren Dateien sein ...), sobald Sherver es ausführen kann (es muss das executable Flag -Set haben).
Sobald Sie dort eine ausführbare Datei haben, wird Sherver es ausführen und seine Ausgabe bedienen. Beachten Sie, dass index.sh ein bestimmter Name ist, da der Dispatcher vom Dispatcher ausgeführt wird, wenn Sie auf das Stamm der Website zugreifen (siehe Abschnitt Dispatcher unten). Wenn Sherver keine Dateien ausführen kann, wird ein 404 -Fehler zurückgegeben. Wenn die ausführbare Datei fehlschlägt (Rückgabecode ist nicht 0 ), gibt er einen 500 -Fehler zurück.
Um eine ausführbare Datei zu verknüpfen, müssen Sie die scripts in der url: /page.sh nach der ausführbaren Datei ./scripts/page.sh suchen.
Die ausführbare Datei wird aus dem scripts ausgeführt.
Skripte verprügeln
Sherver wird hauptsächlich für die Arbeit mit Bash -Skripten gemacht. Wenn Sie ein Bash -Skript erstellen, sollten Sie als erstes die Funktion init_environment ausführen. Dann haben Sie Zugriff auf alle folgenden Variablen:
REQUEST_FULL_STRINGREQUEST_METHODREQUEST_URLREQUEST_HEADERSREQUEST_BODYURL_BASEURL_PARAMETERSDATERESPONSE_HEADERSHTTP_RESPONSEUnd auch viele nützliche Funktionen wie:
add_headersend_responsesend_filesend_error Überprüfen Sie die gesamte Dokumentation zur SHERVER_UTILS.sh -Bibliothek in Skripten/Readme.md.
Alles, was auf der Standardausgabe geschrieben wurde, wird an den Client gesendet. Hier ist ein sehr einfaches Skript, das die Anfragen in einem Textformat zurückgibt:
#! /bin/bash
init_environment
if [ " $REQUEST_METHOD " != ' GET ' ] ; then
send_error 405
fi
add_header ' Content-Type ' ' text/plain '
send_response 200 " $REQUEST_FULL_STRING "Alle anderen Skripte oder Binärdateien
Wenn Sie Bash nicht verwenden, haben Sie nur Zugriff auf die Umgebungsvariable REQUEST_FULL_STRING , die die vollständige Anforderung als Zeichenfolge enthält. Die angeforderte URL ( REQUEST_URL ) wird als erstes Argument übergeben.
Alles, was auf der StandART -Ausgabe geschrieben wurde, wird an den Client gesendet. Sie sollten jedoch die Header der Antwort selbst schreiben.
Für Bash -Skripte gibt es eine grundlegende Template -Engine, die in Sherver (LOL) integriert ist. Es verwendet tatsächlich envsubst , um jegliches Auftreten von $VARIABLE durch die Variable aus der Umgebung zu ersetzen, wenn dies vorhanden ist.
Sie können Ihre Vorlagen in die Unterordnerskripte/Vorlagen einfügen, obwohl dies nicht obligatorisch ist.
Hier ist eine Vorlage für eine template.txt (die unser vorheriges Bash -Skript -Beispiel verbessert):
You entered the following request:
$REQUEST
Und Sie würden es mit dem folgenden Skript verwenden:
#! /bin/bash
init_environment
if [ " $REQUEST_METHOD " != ' GET ' ] ; then
send_error 405
fi
REQUEST= " $REQUEST_FULL_STRING "
# put REQUEST in the environment so we can use it in our template
export REQUEST
# load the template
response= $( envsubst < ' templates/template.txt ' )
add_header ' Content-Type ' ' text/plain '
send_response 200 " $response "Full HTML -Beispiel in Beispiel unten.
Postanfragen werden unterstützt. Sie können den Wert der Variablen REQUEST_METHOD überprüfen, die entweder GET oder POST werden, sodass Sie je nach Typ der Anforderung ein anderes Verhalten haben können.
Der Inhalt der Postanforderung kann in der Variablen REQUEST_BODY reträgt werden. Wenn die Daten vom Client kodiert werden, können Sie die Funktion parse_url mit einigen Tricks verwenden, um ein assoziatives Array der Parameter zu erhalten.
Jeder Inhalt kann an den Client zurückgesandt werden. Dank der Methode add_header können Sie den richtigen MIME -Typ hinzufügen.
Alle hier genannten Variablen und Funktionen haben eine vollständige Beschreibung in Skripten/Readme.md.
Alles, was in den Standardfehler geschrieben wurde, kann protokolliert werden. Um die Protokolle zu erleichtern, können Sie das log verwenden.
Um die Protokolle in einer Datei zu behalten, können Sie die Fehlerausgabe von sherver.sh in einer Datei umleiten:
./sherver.sh 2> logs.txtStandardmäßig sind die Header beider Anfragen und die Antworten protokolliert, nicht jedoch die Körper.
Der Dispatcher ist dafür verantwortlich, je nach der angeforderten UTL entweder eine Datei zu dienen oder ein Skript auszuführen. Es wird in der Datei Dispatcher.sh implementiert.
Es hat derzeit 4 Aktionen:
/ ) ist, wird die scripts/index.sh ausgeführtindex.htm oder index.html fragt, wird die scripts/index.sh ausgeführt/file/ beginnt, dient sie der angefragten Datei/test/dummy.sh wird die scripts/test/dummy.sh ausgeführt, wenn es vorhanden ist).All dieses Verhalten kann durch Bearbeiten des Datei -Dispatcher.sh geändert werden.
Zunächst müssen Sie einen bestimmten Benutzer erstellen, der sherver.sh mit geringen Berechtigungen ausführt. Wir rufen unseren Benutzer sherver an und setzen die gesamte Website in das Hone -Verzeichnis.
Wir müssen unseren Benutzer zu den Gruppen sudo und netdev hinzufügen, damit es das VPN verwalten kann (es ist offensichtlich keine gute Idee, sudo dem Benutzer zu geben. Aus diesem Grund sollten Sie die Website nicht im Internet aufdecken).
useradd -mUG sudo,netdev -s /usr/bin/bash sherver
passwd sherver
... Beachten Sie, dass Sie Ihren aktuellen Benutzer aus praktischen Gründen zur sherver -Gruppe hinzufügen können (Sie müssen nachgeben, um sie effektiv zu machen):
adduser USER sherverLassen Sie uns nun die Website in ihr Heimverzeichnis erhalten
su sherver
cd ~
git clone https://github.com/remileduc/sherver.git
cd sherver
git checkout perso Schließlich müssen wir den Service aktivieren, damit er automatisch sherver.sh startet. Kopieren Sie dazu die Datei sherver.service in /usr/share/systemd/ und aktivieren Sie dann den Dienst:
cp sherver.service /usr/share/systemd/
ln -s /usr/share/systemd/sherver.service /etc/systemd/system/sherver.service
systemctl daemon-reload
systemctl enable sherver.serviceSie können als Beispiel die Skripte sehen, die ich zu Hause benutze, um mein VPN zu verwalten. Es ist im Perso -Zweig zugänglich. Beachten Sie, dass Sie das Skript vpn-mgr.sh benötigen, um es ordnungsgemäß zu verwenden.
Siehe Bashttpd. Es ist offensichtlich zu sagen, dass dies ohne Sicherheitsfunktionen kommt. Entdecken Sie Sherver nicht im Internet .
Wenn Sie die Website im Internet aufdecken müssen, benötigen Sie einen echten Server, der speziell für all diesen Problemen aufgenommen wurde.
Es ist jedoch perfekt, in einem lokalen Netzwerk zu verwenden. Es wird so sicher sein wie Ihre WLAN -Verbindung und Ihre Firewall.
Ich wollte schnell einen Server einrichten, der dynamische Seiten bedient und einige Bash -Skripte ausführen könnte, um mein Medienzentrum über Webseiten zu steuern.
Ich wollte Apache oder Nginx nicht installieren und konfigurieren. Tatsächlich wollte ich keine Konfiguration.
Sherver kann ohne Konfiguration ausgeführt werden. Sie müssen nur Dateien am richtigen Ort hinzufügen. Es kann ohne zu installierende Ausführung ausgeführt werden (alle verwendeten Tools sind Teil der Standardinstallation von Debian, außer vielleicht für SOCAT).
Sie können meinen Anwendungsfall in der perso -Branche sehen.
Alles ist unter MIT -Lizenz.
Wir verwenden mimetype -Skript, das in Skripten/Utils/Mimetype versandt wird und unter Perl -Lizenz steht.