Server Web Ringan Pure Bash.
Solusi mudah untuk mengatur situs web lokal tanpa konfigurasi server !!!
Ini terinspirasi oleh Bashttpd. Padahal, perilakunya sama sekali berbeda. Lihat di bawah untuk informasi lebih lanjut.
Presentasi
Cara menggunakan
Cara menggunakan (ahli)
Contoh
Tentang keamanan
Mengapa Sherver?
Lisensi?
Cukup klon dan lari ./sherver.sh . Kemudian, Anda harus dapat terhubung ke LocalHost: 8080. Anda dapat melewati port untuk mendengarkan sebagai parameter : ./sherver.sh 8080 (default adalah 8080 ).
Ini dibuat untuk berlari dengan Bash . Itu mungkin tidak bekerja di cangkang lain. Alat berikut perlu ada dalam sistem (perhatikan bahwa mereka semua adalah bagian dari instalasi default Debian):
envsubst jika Anda ingin melakukan templatingsocat untuk menjalankan server.netcat sebagai gantinya, tetapi tidak berfungsi dengan baik dengan permintaan HTTP bersamaanSherver adalah server web yang mengimplementasikan bagian dari HTTP 1.0. Bahkan jika itu ditulis dalam beberapa baris pesta, ia dapat melakukan banyak hal:
scripts atau di folder filestdoutSemua ini menjadikan Sherver alat yang sempurna untuk menjalankan server kecil yang akan melayani beberapa halaman di jaringan lokal Anda.
Bahkan jika kedengarannya luar biasa, Sherver masih memiliki batasan berikut:
Inilah sebabnya mengapa Sherver seharusnya tetap berada di lingkungan pribadi dan terkontrol. Jangan mengekspos Sherver di internet !!! Jika Anda ingin mengekspos situs Anda di internet, Anda harus menggunakan alat yang tahu tentang keamanan dan konkurensi (seperti nginx atau lainnya).
Selalu jalankan Sherver di belakang firewall yang mencegah gangguan dari luar .
Dokumentasi cepat tentang cara menggunakan Sherver untuk Anda gunakan sendiri. Semua variabel dan fungsi yang disebutkan di sini memiliki deskripsi lengkap dalam skrip/readme.md.
Hal paling sederhana yang dapat Anda lakukan adalah melayani halaman statis: file HTML murni yang tidak memerlukan pemrosesan.
Untuk melakukannya, Anda hanya perlu meletakkan file HTML Anda di file/halaman subdirektori. Kemudian, Anda dapat mengakses halaman Anda melalui URL seperti /file/pages/index.html (jika nama file Anda adalah index.html misalnya).
Perhatikan bahwa Anda harus memberikan nama file lengkap di URL sehingga Sherver dapat menemukannya.
Sesederhana itu! Jika Sherver dapat menemukan file, itu akan menyajikannya. Kalau tidak, itu akan mengembalikan kesalahan 404.
Anda dapat melayani semua jenis file dari Sherver. Dari berbasis teks seperti CSS atau JavaScript ke binari seperti gambar, video, zip ...
Cukup masukkan file di file subdirektori. Anda kemudian dapat merujuk mereka melalui url seperti /file/venise.webp . Perhatikan bahwa lebih baik untuk memberikan jalur penuh daripada jalur relatif.
Sherver akan secara otomatis melayani file jika dapat menemukannya, dengan jenis MIME yang benar. Bahkan akan memungkinkan browser untuk menyimpan file, dan hanya akan menyajikannya lagi jika file telah berubah. Jika Sherver tidak dapat menemukan file, itu akan mengembalikan kesalahan 404.
Untuk sumber daya, seperti CSS, JavaScript, Favicon ... lebih baik memasukkannya ke dalam file/sumber daya subfolder, meskipun Anda tidak perlu melakukannya.
Contoh tentang cara menautkan file CSS:
< link rel =" stylesheet " type =" text/css " href =" /file/resources/ugly.css " >Contoh tentang cara mengintegrasikan gambar dalam html Anda:
< img src =" /file/venise.webp " alt ="" >Di sinilah Sherver menjadi berguna: ia dapat melayani halaman dinamis, sisi server yang dibangun tergantung pada konteksnya.
Untuk melakukannya, Anda hanya perlu menambahkan executable dalam skrip subfolder. Executable dapat dari semua jenis (skrip bash, skrip python, skrip lainnya, setiap biner seperti c ++ dikompilasi yang dapat dieksekusi ...) segera setelah Sherver dapat menjalankannya (harus memiliki set bendera executable ).
Segera setelah Anda dapat dieksekusi di sana, Sherver akan menjalankannya dan menyajikan outputnya. Perhatikan bahwa index.sh adalah nama tertentu karena itu adalah nama yang akan dieksekusi oleh dispatcher jika Anda mengakses root situs web (lihat bagian Dispatcher di bawah). Jika Sherver tidak dapat menjalankan file apa pun, itu akan mengembalikan kesalahan 404. Jika executable gagal (kode pengembalian bukan 0 ), itu akan mengembalikan kesalahan 500.
Untuk menautkan yang dapat dieksekusi, Anda harus menghilangkan scripts folder di url: /page.sh akan mencari yang dapat dieksekusi ./scripts/page.sh .
Yang dapat dieksekusi dijalankan dari folder scripts .
Skrip bash
Sherver terutama dibuat untuk bekerja dengan skrip bash. Jika Anda membuat skrip bash, hal pertama yang harus Anda lakukan adalah menjalankan fungsi init_environment . Maka Anda akan memiliki akses ke semua variabel berikut:
REQUEST_FULL_STRINGREQUEST_METHODREQUEST_URLREQUEST_HEADERSREQUEST_BODYURL_BASEURL_PARAMETERSDATERESPONSE_HEADERSHTTP_RESPONSEDan juga banyak fungsi yang berguna seperti:
add_headersend_responsesend_filesend_error Periksa seluruh dokumentasi tentang perpustakaan SHERVER_UTILS.sh dalam skrip/readme.md.
Semua yang ditulis pada output standar akan dikirim ke klien. Berikut adalah skrip yang sangat sederhana yang mengembalikan permintaan dalam format teks:
#! /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 "Skrip atau binari lainnya
Jika Anda tidak menggunakan Bash, Anda hanya akan memiliki akses ke variabel lingkungan, REQUEST_FULL_STRING yang berisi permintaan penuh sebagai string. URL yang diminta ( REQUEST_URL ) akan disahkan sebagai argumen pertama.
Semua yang ditulis pada output standart akan dikirim ke klien. Padahal, Anda harus menulis header dari tanggapannya sendiri.
Untuk skrip bash, ada mesin template dasar yang terintegrasi dengan Sherver (LOL). Ini sebenarnya menggunakan envsubst untuk menggantikan kejadian $VARIABLE dengan variabel dari lingkungan jika ada.
Anda dapat meletakkan templat Anda di skrip/templat subfolder, meskipun tidak wajib.
Berikut adalah templat untuk file teks template.txt (yang meningkatkan contoh skrip bash kami sebelumnya):
You entered the following request:
$REQUEST
Dan Anda akan menggunakannya dengan skrip berikut:
#! /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 "Contoh HTML lengkap dalam contoh di bawah ini.
Permintaan pos didukung. Anda dapat memeriksa nilai variabel REQUEST_METHOD yang akan GET atau POST , sehingga Anda dapat memiliki perilaku yang berbeda berdasarkan jenis permintaan.
Konten permintaan POST dapat dikembalikan di variabel REQUEST_BODY . Jika data dikodekan oleh klien, Anda dapat menggunakan fungsi parse_url dengan beberapa trik untuk mendapatkan array asosiatif dari parameter.
Konten apa pun dapat dikirim kembali ke klien. Anda dapat menambahkan tipe mime yang benar berkat metode add_header .
Semua variabel dan fungsi yang disebutkan di sini memiliki deskripsi lengkap dalam skrip/readme.md.
Apa pun yang ditulis untuk kesalahan standar dapat dicatat. Untuk memudahkan log, Anda dapat menggunakan log fungsi.
Untuk menyimpan log dalam file, Anda dapat mengarahkan output kesalahan Sherver.sh dalam file:
./sherver.sh 2> logs.txtSecara default, header dari kedua permintaan dan tanggapan dicatat, tetapi bukan tubuh.
Dispatcher bertanggung jawab untuk meminta untuk melayani file atau menjalankan skrip, tergantung pada UTL yang diminta. Ini diimplementasikan di file dispatcher.sh.
Saat ini memiliki 4 tindakan:
/ ), maka ia menjalankan scripts/index.shindex.htm atau index.html , itu mengeksekusi scripts/index.sh/file/ , itu melayani file yang ditanyakan/test/dummy.sh akan menjalankan scripts/test/dummy.sh jika ada).Semua perilaku ini dapat diubah dengan mengedit file dispatcher.sh.
Pertama -tama, Anda perlu membuat pengguna tertentu yang akan menjalankan sherver.sh dengan hak istimewa rendah. Kami akan menghubungi sherver kami dan kami akan menempatkan seluruh situs web di direktori asahnya.
Kami perlu menambahkan pengguna kami ke grup sudo dan netdev , sehingga dapat mengelola VPN (jelas bukan ide yang baik untuk memberikan sudo kepada pengguna, inilah mengapa Anda tidak boleh mengekspos situs web di internet).
useradd -mUG sudo,netdev -s /usr/bin/bash sherver
passwd sherver
... Perhatikan bahwa Anda dapat menambahkan pengguna saat ini ke grup sherver karena alasan praktis (Anda harus mundur untuk membuatnya efektif):
adduser USER sherverSekarang, mari kita dapatkan situs web di direktori rumahnya
su sherver
cd ~
git clone https://github.com/remileduc/sherver.git
cd sherver
git checkout perso Akhirnya, kita perlu mengaktifkan layanan sehingga mulai sherver.sh secara otomatis. Untuk melakukannya, salin file sherver.service in /usr/share/systemd/ dan kemudian mengaktifkan layanan:
cp sherver.service /usr/share/systemd/
ln -s /usr/share/systemd/sherver.service /etc/systemd/system/sherver.service
systemctl daemon-reload
systemctl enable sherver.serviceAnda dapat melihat sebagai contoh skrip yang saya gunakan di rumah untuk mengelola VPN saya. Itu dapat diakses di cabang Perso. Perhatikan bahwa Anda memerlukan skrip vpn-mgr.sh untuk dapat menggunakannya dengan benar.
Lihat Bashttpd. Jelas untuk mengatakan bahwa ini datang tanpa fitur keamanan. Jangan mengekspos Sherver di internet .
Jika Anda perlu mengekspos situs di internet, Anda memerlukan server nyata yang telah dibangun terutama untuk menghadapi semua masalah ini.
Padahal, sangat cocok untuk digunakan di jaringan lokal. Ini akan sama amannya dengan koneksi wifi Anda dan firewall Anda.
Saya ingin mengatur dengan cepat server yang akan melayani halaman dinamis, dan itu dapat menjalankan beberapa skrip bash, untuk mengontrol pusat media saya melalui halaman web.
Saya tidak ingin menginstal dan mengkonfigurasi Apache atau Nginx. Bahkan, saya tidak ingin konfigurasi apa pun .
Sherver dapat berjalan tanpa konfigurasi. Anda hanya perlu menambahkan file di tempat yang tepat. Ini dapat berjalan tanpa apa pun untuk diinstal (semua alat yang digunakan adalah bagian dari instalasi default Debian, kecuali mungkin untuk SOCAT).
Anda dapat melihat kasus penggunaan saya di cabang perso .
Semuanya di bawah lisensi MIT.
Kami menggunakan skrip mimetype , dikirim dalam skrip/utils/mimetype, yang berada di bawah lisensi Perl.