خادم ويب خفيف باش نقي.
حل سهل لإعداد موقع ويب محلي دون أي تكوين خادم !!!
هذا مستوحى من bashttpd. رغم ذلك ، السلوك مختلف تمامًا. انظر أدناه لمزيد من المعلومات.
عرض تقديمي
كيفية استخدام
كيفية استخدام (خبير)
مثال
حول الأمن
لماذا شيرفر؟
رخصة؟
فقط استنساخ وتشغيل ./sherver.sh . بعد ذلك ، يجب أن تكون قادرًا على الاتصال بـ LocalHost: 8080. يمكنك تمرير المنفذ للاستماع إليه كمعلمة: ./sherver.sh 8080 (الافتراضي هو 8080 ).
هذا مصنوع لتشغيل مع Bash . قد لا تعمل في قذيفة أخرى. يجب أن تكون الأدوات التالية حاضرة في النظام (لاحظ أنها جميعها جزء من التثبيت الافتراضي لدبيان):
envsubst إذا كنت ترغب في القيام بالتقالبsocat لتشغيل الخادم.netcat بدلاً من ذلك ، لكنه لا يعمل بشكل جيد مع طلبات HTTP المتزامنةSherver هو خادم ويب ينفذ جزءًا من HTTP 1.0. حتى لو كانت مكتوبة في بضعة أسطر من باش ، فهي قادرة على القيام بالكثير:
scripts أو في مجلدات filestdoutكل هذه تجعل شيرفر الأداة المثالية لتشغيل خادم صغير يخدم صفحات قليلة على شبكتك المحلية.
حتى لو كان يبدو رائعًا ، لا يزال لدى شيرفر القيود التالية:
هذا هو السبب في أن شيرفر من المفترض أن يبقى في بيئة خاصة ومسيطر عليها. لا تعرض شيرفر على الإنترنت !!! إذا كنت ترغب في فضح موقعك على الإنترنت ، فيجب عليك استخدام أداة تعرف عن الأمان والتزامن (مثل Nginx أو غيرها).
قم دائمًا بتشغيل شيرفر خلف جدار حماية يمنع أي تدخلات من الخارج .
وثائق سريعة حول كيفية استخدام شيرفر لاستخدامك الخاص. جميع المتغيرات والوظائف المذكورة هنا لها وصف كامل في البرامج النصية/README.MD.
أبسط شيء يمكنك القيام به هو تقديم صفحات ثابتة: ملفات HTML النقية التي لا تحتاج إلى أي معالجة.
للقيام بذلك ، تحتاج فقط إلى وضع ملفات HTML في ملف/صفحات الدليل الفرعي. بعد ذلك ، يمكنك الوصول إلى صفحاتك من خلال عنوان URL مثل /file/pages/index.html (إذا كان اسم الملف الخاص بك هو index.html على سبيل المثال).
لاحظ أنه سيتعين عليك إعطاء اسم الملف الكامل في عنوان URL حتى يتمكن شيرفر من العثور عليه.
الأمر بسيط مثل ذلك! إذا تمكن شيرفر من العثور على الملف ، فسيخدمه. خلاف ذلك ، سوف يعيد خطأ 404.
يمكنك تقديم أي نوع من الملفات من شيرفر. من النص مثل CSS أو JavaScript إلى الثنائيات مثل الصور ومقاطع الفيديو والضغط ...
فقط ضع الملفات في ملف الدليل الفرعي. يمكنك بعد ذلك الرجوع إليهم من خلال عنوان URL مثل /file/venise.webp . لاحظ أنه من الأفضل إعطاء مسار كامل بدلاً من المسارات النسبية.
ستقدم Sherver الملف تلقائيًا إذا كان بإمكانه العثور عليه ، مع نوع MIME الصحيح. حتى أنه سيسمح للمتصفح بتخزين الملف ، وسوف يخدمه مرة أخرى فقط إذا كان الملف قد تغير. إذا لم يتمكن شيرفر من العثور على الملف ، فسيقوم بإرجاع خطأ 404.
بالنسبة للموارد ، مثل CSS و JavaScript و Favicon ... من الأفضل وضعها في ملف/موارد المجلد الفرعي ، على الرغم من أنك لست مضطرًا لذلك.
مثال على كيفية ربط ملف CSS:
< link rel =" stylesheet " type =" text/css " href =" /file/resources/ugly.css " >مثال على كيفية دمج صورة في HTML:
< img src =" /file/venise.webp " alt ="" >هذا هو المكان الذي يصبح فيه شيرفر مفيدًا: يمكن أن يخدم صفحات ديناميكية ، جانب الخادم المبني اعتمادًا على السياق.
للقيام بذلك ، تحتاج فقط إلى إضافة Quivorbors في البرامج النصية للمجلد الفرعي. يمكن أن تكون الموظفين التنفيذيين من أي أنواع (نص Bash ، نص Python ، أي نصوص أخرى ، أي ثنائي مثل C ++ تم تجميعه قابلة للتنفيذ ...) بمجرد أن يتمكن شيرفر من تنفيذه (يجب أن يكون لديه مجموعة العلم executable ).
بمجرد أن يكون لديك تنفيذ هناك ، سيقوم شيرفر بتشغيله ويخدم إخراجه. لاحظ أن index.sh هو اسم معين لأنه اسمه الذي سيتم تنفيذه من قبل المرسل إذا وصلت إلى جذر موقع الويب (انظر قسم المرسل أدناه). إذا لم يتمكن Sherver من تشغيل أي ملفات ، فسيقوم بإرجاع خطأ 404. إذا فشل التنفيذ (رمز الإرجاع ليس 0 ) ، فسيقوم بإرجاع خطأ 500.
لربط أحدهم قابل للتنفيذ ، يجب عليك حذف scripts للمجلد في عنوان URL: /page.sh سوف تبحث عن القابلة للتنفيذ ./scripts/page.sh .
يتم تشغيل القابلة للتنفيذ من مجلد scripts .
نصوص باش
صُنع شيرفر بشكل أساسي للعمل مع برامج النصوص باش. إذا قمت بإنشاء برنامج نصي Bash ، فإن أول شيء يجب عليك فعله هو تشغيل الوظيفة init_environment . ثم سيكون لديك الوصول إلى جميع المتغيرات التالية:
REQUEST_FULL_STRINGREQUEST_METHODREQUEST_URLREQUEST_HEADERSREQUEST_BODYURL_BASEURL_PARAMETERSDATERESPONSE_HEADERSHTTP_RESPONSEوأيضًا الكثير من الوظائف المفيدة مثل:
add_headersend_responsesend_filesend_error تحقق من الوثائق الكاملة حول مكتبة SHERVER_UTILS.sh في البرامج النصية/README.MD.
سيتم إرسال كل شيء مكتوب على الإخراج القياسي إلى العميل. فيما يلي برنامج نصي بسيط للغاية يعيد الطلبات بتنسيق نص:
#! /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 ، فلن تتمكن فقط من الوصول إلى REQUALITY REQUEST_FULL_STRING الذي يحتوي على الطلب الكامل كسلسلة. سيتم تمرير عنوان URL المطلوب ( REQUEST_URL ) كوسيطة أولى.
سيتم إرسال كل شيء مكتوب على إخراج Standart إلى العميل. رغم ذلك ، يجب أن تكتب رؤوس الاستجابة بنفسك.
بالنسبة لبرامج النصوص Bash ، هناك محرك قالب أساسي مدمج مع Sherver (LOL). إنه يستخدم في الواقع envsubst لاستبدال أي حدوث متغير $VARIABLE بواسطة المتغير من البيئة إذا كان هناك.
يمكنك وضع القوالب الخاصة بك في البرامج النصية/النماذج الفرعية ، على الرغم من أنها ليست إلزامية.
فيما يلي قالبًا template.txt ملف نصي.
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 الكامل في المثال أدناه.
يتم دعم طلبات النشر. يمكنك التحقق من قيمة REQUEST_METHOD المتغير الذي سيتم GET أو POST ، بحيث يمكنك الحصول على سلوك مختلف بناءً على نوع الطلب.
يمكن إعادة توزيع محتوى طلب النشر في REQUEST_BODY المتغير. إذا تم ترميز البيانات عناوين URL من قبل العميل ، فيمكنك استخدام الوظيفة parse_url مع بعض الحيل للحصول على مجموعة نقاطية من المعلمات.
يمكن إرسال أي محتوى إلى العميل. يمكنك إضافة نوع MIME الصحيح بفضل الطريقة add_header .
جميع المتغيرات والوظائف المذكورة هنا لها وصف كامل في البرامج النصية/README.MD.
يمكن تسجيل أي شيء مكتوب إلى الخطأ القياسي. لتخفيف السجلات ، يمكنك استخدام log الوظائف.
للحفاظ على السجلات في ملف ، يمكنك إعادة توجيه إخراج الخطأ لـ sherver.sh في ملف:
./sherver.sh 2> logs.txtبشكل افتراضي ، يتم تسجيل رؤوس كل من الطلبات والردود ، ولكن ليس الجثث.
يكون المرسل مسؤولاً عن طلب تقديم ملف أو تشغيل برنامج نصي ، اعتمادًا على UTL المطلوبة. يتم تنفيذه في ملف Dispatcher.sh.
لديها حاليا 4 إجراءات:
/ ) ، فإنه ينفذ scripts/index.shindex.htm أو index.html ، فإنه ينفذ scripts/index.sh/file/ ، فإنه يخدم الملف المطلوب/test/dummy.sh تشغيل scripts/test/dummy.sh إذا كان موجودًا).يمكن تغيير كل هذه السلوكيات عن طريق تحرير ملفات الملف.
بادئ ذي بدء ، تحتاج إلى إنشاء مستخدم معين سيقوم بتشغيل sherver.sh مع امتيازات منخفضة. سنقوم بالاتصال بمستخدمنا sherver وسنضع موقع الويب بأكمله في دليل الصغر الخاص به.
نحتاج إلى إضافة مستخدمنا إلى المجموعات sudo و netdev ، لذلك فهو قادر على إدارة VPN (من الواضح أنه ليس من الجيد إعطاء sudo للمستخدم ، ولهذا السبب يجب ألا تعرض موقع الويب على الإنترنت).
useradd -mUG sudo,netdev -s /usr/bin/bash sherver
passwd sherver
... لاحظ أنه يمكنك إضافة المستخدم الحالي الخاص بك إلى مجموعة sherver لأسباب عملية (سيتعين عليك إعادة التنقل لجعله فعالًا):
adduser USER sherverالآن ، دعنا نحصل على الموقع في دليله الرئيسي
su sherver
cd ~
git clone https://github.com/remileduc/sherver.git
cd sherver
git checkout perso أخيرًا ، نحتاج إلى تمكين الخدمة بحيث تبدأ sherver.sh تلقائيًا. للقيام بذلك ، انسخ ملف sherver.service في /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 الخاص بي. يمكن الوصول إليه على فرع بيرو. لاحظ أنك تحتاج إلى البرنامج النصي VPN-MGR.SH لتتمكن من استخدامه بشكل صحيح.
انظر Bashttpd. من الواضح أن القول أن هذا يأتي بدون أي ميزات أمنية. لا تعرض شيرفر على الإنترنت .
إذا كنت بحاجة إلى فضح الموقع على الإنترنت ، فأنت بحاجة إلى خادم حقيقي تم تصميمه خاصة لمواجهة كل هذه المشكلات.
رغم ذلك ، إنه مثالي للاستخدام على شبكة محلية. سيكون آمنًا مثل اتصال WiFi وجدار الحماية الخاص بك.
كنت أرغب في إعداد خادم بسرعة يخدم صفحات ديناميكية ، ويمكن أن ينفذ بعض البرامج النصية للباش ، من أجل التحكم في مركز الوسائط الخاص بي من خلال صفحات الويب.
لم أرغب في تثبيت وتكوين Apache أو Nginx. في الواقع ، لم أكن أريد أي تكوين.
شيرفر قادر على التشغيل دون أي تكوين. تحتاج فقط إلى إضافة ملفات في المكان الصحيح. يمكن تشغيله دون أن يتم تثبيته (جميع الأدوات المستخدمة هي جزء من التثبيت الافتراضي لديبيان ، باستثناء ربما بالنسبة لـ SOCAT).
يمكنك رؤية حالة الاستخدام الخاصة بي في فرع perso .
كل شيء تحت رخصة معهد ماساتشوستس للتكنولوجيا.
نحن نستخدم البرنامج النصي mimetype ، يتم شحنه في البرامج النصية/utils/mimetype ، والتي هي تحت رخصة Perl.