Pure Bash Lightweight Webサーバー。
サーバー構成なしでローカルWebサイトをセットアップする簡単なソリューション!!!
これはBashttpdに触発されています。ただし、動作はまったく異なります。詳細については、以下をご覧ください。
プレゼンテーション
使い方
使用方法(専門家)
例
セキュリティについて
なぜシャーバー?
ライセンス?
クローンと実行するだけです./sherver.sh 。次に、LocalHost:8080に接続できるはずです。ポートを渡して、パラメーターとしてリッスンすることができます: ./sherver.sh 8080 (デフォルトは8080 )。
これはBashで実行されます。別のシェルで動作しない場合があります。次のツールをシステムに存在する必要があります(すべてがDebianのデフォルトインストールの一部であることに注意してください):
envsubstsocat 。netcatを使用できますが、同時のHTTPリクエストではうまく機能しませんSherverは、HTTP 1.0の一部を実装するWebサーバーです。たとえそれがバッシュの数行で書かれていても、それはたくさんのことができます:
scriptsまたはfileフォルダーにファイルを追加するだけですstdoutに何かを出力するとすぐに、言語のスクリプトまたは実行可能ファイルを実行できますこれらはすべて、Sherverがローカルネットワークで数ページにサービスを提供する小さなサーバーを実行するのに最適なツールになります。
たとえそれが素晴らしいと思われても、シャーバーにはまだ次の制限があります。
これが、シャーバーがプライベートで管理された環境にとどまることになっている理由です。シャーバーをインターネットで公開しないでください!!!インターネットでサイトを公開する場合は、セキュリティや並行性( Nginxなど)について知っているツールを使用する必要があります。
常に侵入が外部からの侵入を防ぐファイアウォールの後ろでシャーバーを走らせてください。
Sherverを使用する方法についての簡単なドキュメント。ここで説明したすべての変数と関数には、スクリプト/readme.mdに完全な説明があります。
あなたができる最も簡単なことは、静的ページ:処理を必要としない純粋なHTMLファイルを提供することです。
そのためには、HTMLファイルをサブディレクトリファイル/ページに配置するだけです。次に、 /file/pages/index.html index.htmlのようなURLを介してページにアクセスできます(ファイル名がindex.htmlの場合)。
Sherverがそれを見つけることができるように、URLに完全なファイル名を与える必要があることに注意してください。
それはそれと同じくらい簡単です!シャーバーがファイルを見つけることができれば、それはそれを提供します。それ以外の場合は、404エラーが返されます。
Sherverからあらゆるタイプのファイルを提供できます。 CSSやJavaScriptのようなテキストベースから、画像、ビデオ、zipなどのバイナリまで...
ファイルをサブディレクトリファイルに配置するだけです。その後、 /file/venise.webp venise.webpのようなURLを介してそれらを参照できます。相対パスよりもフルパスを与えることが望ましいことに注意してください。
Sherverは、正しいMimeタイプを使用して、ファイルが見つかった場合に自動的に提供されます。ブラウザがファイルをキャッシュすることもでき、ファイルが変更された場合にのみ再度提供されます。 Sherverがファイルを見つけることができない場合、404エラーが返されます。
CSS、JavaScript、Faviconなどのリソースの場合は、サブフォルダーファイル/リソースに入れておく必要はありません。
CSSファイルをリンクする方法の例:
< link rel =" stylesheet " type =" text/css " href =" /file/resources/ugly.css " >HTMLに画像を統合する方法の例:
< img src =" /file/venise.webp " alt ="" >これは、Sherverが有用になる場所です。コンテキストに応じて、動的なページを提供し、サーバー側を構築することができます。
そのためには、サブフォルダースクリプトに実行可能ファイルを追加するだけです。実行可能ファイルは、Sherverが実行できるとすぐに(Bash Script、Python Script、その他のスクリプト、C ++のようなバイナリコンパイルされた実行可能ファイルなど)、任意のタイプ(任意のバイナリ)を使用できます( executableフラグが設定されている必要があります)。
そこに実行可能なものがあるとすぐに、シャーバーはそれを実行してその出力を提供します。 index.sh 、ウェブサイトのルートにアクセスするとディスパッチャーが実行するものであるため、特定の名前であることに注意してください(下のディスパッチャーセクションを参照)。 Sherverがファイルを実行できない場合、404エラーが返されます。実行可能ファイルが失敗した場合(戻りコードは0ではありません)、500エラーが返されます。
実行可能ファイルをリンクするには、url: /page.shのフォルダーscripts ./scripts/page.sh省略する必要があります。
実行可能ファイルは、 scriptsフォルダーから実行されます。
バッシュスクリプト
シャーバーは、主にBashスクリプトを使用するように作られています。 Bashスクリプトを作成する場合、最初にすべきことは、関数init_environmentを実行することです。次に、次のすべての変数にアクセスできます。
REQUEST_FULL_STRINGREQUEST_METHODREQUEST_URLREQUEST_HEADERSREQUEST_BODYURL_BASEURL_PARAMETERSDATERESPONSE_HEADERSHTTP_RESPONSEまた、次のような多くの有用な機能もあります。
add_headersend_responsesend_filesend_errorスクリプト/readme.mdのSHERVER_UTILS.shライブラリに関するドキュメント全体を確認してください。
標準出力に書かれたものはすべてクライアントに送信されます。これは、テキスト形式でリクエストを返す非常に簡単なスクリプトです。
#! /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 "他のスクリプトまたはバイナリ
BASHを使用しない場合、完全なリクエストを文字列として含む環境変数REQUEST_FULL_STRINGにのみアクセスできます。要求されたURL( REQUEST_URL )は、最初の引数として渡されます。
StandArt出力に書かれたものはすべてクライアントに送信されます。ただし、応答のヘッダーを自分で書く必要があります。
Bashスクリプトには、Sherver(lol)と統合された基本的なテンプレートエンジンがあります。実際にenvsubstを使用して、環境から変数によって$VARIABLEの発生を置き換えます。
テンプレートをサブフォルダースクリプト/テンプレートに配置できますが、必須ではありません。
これは、テキストファイルのテンプレートtemplate.txt (以前のBASHスクリプトの例を改善する)のテンプレートです。
You entered the following request:
$REQUEST
そして、次のスクリプトで使用します。
#! /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 "以下の例の完全なHTML例。
投稿リクエストがサポートされています。 GETまたはPOST変数REQUEST_METHODの値を確認できます。そのため、リクエストのタイプに基づいて異なる動作をすることができます。
POSTリクエストのコンテンツは、変数REQUEST_BODYで取得できます。データがクライアントによってエンコードされているURLである場合、いくつかのトリックを備えた関数parse_urlを使用して、パラメーターの連想配列を取得できます。
どんなコンテンツもクライアントに送り返すことができます。メソッドadd_headerのおかげで、正しいMimeタイプを追加できます。
ここで説明したすべての変数と関数には、スクリプト/readme.mdに完全な説明があります。
標準エラーに書かれたものはすべて記録できます。ログを容易にするには、関数logを使用できます。
ログをファイルに保持するには、ファイル内のsherver.shのエラー出力をリダイレクトできます。
./sherver.sh 2> logs.txtデフォルトでは、リクエストと応答の両方のヘッダーが記録されますが、ボディは記録されません。
ディスパッチャーは、要求されたUTLに応じて、ファイルを提供するか、スクリプトを実行するように求める責任があります。ファイルdispatcher.shに実装されています。
現在、4つのアクションがあります。
/ )の場合、スクリプトscripts/index.shを実行しますindex.htmまたはindex.htmlを要求する場合、スクリプトscripts/index.shを実行します。/file/で起動する場合、尋ねられたファイルを提供します/test/dummy.shは、存在する場合はスクリプトscripts/test/dummy.shを実行します)。このすべての動作は、ファイルDispatcher.shを編集することで変更できます。
まず、 sherver.sh実行する特定のユーザーを作成する特定のユーザーを作成する必要があります。ユーザーsherverに電話して、Webサイト全体をHoneディレクトリに入れます。
sudoとnetdevグループにユーザーを追加する必要があるため、VPNを管理できるようになります(ユーザーにsudoを提供することは明らかに良い考えではありません。これが、インターネット上でWebサイトを公開するべきではない理由です)。
useradd -mUG sudo,netdev -s /usr/bin/bash sherver
passwd sherver
...実際の理由で現在のユーザーをsherverグループに追加できることに注意してください(効果的にするために再ログする必要があります):
adduser USER sherverそれでは、ホームディレクトリにWebサイトを入手しましょう
su sherver
cd ~
git clone https://github.com/remileduc/sherver.git
cd sherver
git checkout perso最後に、 sherver.sh自動的に開始するように、サービスを有効にする必要があります。これを行うには、ファイルsherver.service in /usr/share/systemd/をコピーしてから、サービスを有効にします。
cp sherver.service /usr/share/systemd/
ln -s /usr/share/systemd/sherver.service /etc/systemd/system/sherver.service
systemctl daemon-reload
systemctl enable sherver.serviceあなたは、私が自宅で使用しているスクリプトを例として、私のVPNを管理するために見ることができます。 Persoブランチでアクセスできます。適切に使用できるように、スクリプトvpn-mgr.shが必要であることに注意してください。
bashttpdを参照してください。これにはセキュリティ機能がないと言うのは明らかです。シャーバーをインターネットで公開しないでください。
インターネット上でサイトを公開する必要がある場合は、これらすべての問題に直面するために特に構築された実際のサーバーが必要です。
ただし、ローカルネットワークで使用するのに最適です。 WiFi接続とファイアウォールと同じように安全になります。
ダイナミックページを提供するサーバーをすばやくセットアップしたかったので、Webページを介してメディアセンターを制御するために、いくつかのBashスクリプトを実行できます。
ApacheまたはNginxをインストールして構成したくありませんでした。実際、構成は必要ありませんでした。
Sherverは構成なしで実行できます。適切な場所にファイルを追加するだけです。何もインストールせずに実行できます(使用されるすべてのツールは、SOCATを除き、Debianのデフォルトインストールの一部です)。
perso Brancheで私のユースケースを見ることができます。
すべてがMITライセンスの下にあります。
mimetypeスクリプトを使用して、PERLライセンスの下にあるスクリプト/UTILS/MIMETYPEに出荷されます。