Το Redbean 2.0 είναι μια πλατφόρμα για εφαρμογές Ιστού συσκευασμένες σε ένα γενικό εκτελέσιμο αρχείο ZIP

Παρουσιάζεται η κυκλοφορία του έργου Redbean 2.0, που προσφέρει έναν διακομιστή web που σας επιτρέπει να παραδίδετε εφαρμογές Ιστού με τη μορφή ενός γενικού εκτελέσιμου αρχείου που μπορεί να εκτελεστεί σε Linux, Windows, MacOS, FreeBSD, NetBSD και OpenBSD. Όλοι οι πόροι που σχετίζονται με την εφαρμογή Ιστού και τον διακομιστή συγκεντρώνονται σε ένα ενιαίο εκτελέσιμο αρχείο, το οποίο είναι συμβατό με τη μορφή αρχείου ZIP και σας επιτρέπει να χρησιμοποιήσετε το βοηθητικό πρόγραμμα zip για να προσθέσετε επιπλέον αρχεία. Η δυνατότητα εκτέλεσης ενός αρχείου σε διαφορετικά λειτουργικά συστήματα και αναγνώρισης του ως αρχείου ZIP επιτυγχάνεται με το χειρισμό των εκτελέσιμων κεφαλίδων αρχείων και τη σύνδεση με την πολυπλατφορμική τυπική βιβλιοθήκη C Cosmopolitan. Ο κωδικός του έργου διανέμεται με την άδεια ISC.

Η ιδέα του έργου είναι η παροχή ενός εκτελέσιμου αρχείου «redbean.com» με έναν ενσωματωμένο διακομιστή web. Ένας προγραμματιστής εφαρμογών Ιστού μπορεί να χρησιμοποιήσει το βοηθητικό πρόγραμμα zip για να προσθέσει αρχεία HTML και Lua σε αυτό το αρχείο και να αποκτήσει μια αυτόνομη εφαρμογή Ιστού που εκτελείται σε όλα τα δημοφιλή λειτουργικά συστήματα και δεν απαιτεί ξεχωριστό διακομιστή ιστού για να εκτελεστεί στο σύστημα.

Μετά την εκκίνηση του εκτελέσιμου αρχείου που προκύπτει, ο ενσωματωμένος διακομιστής web χρησιμοποιείται για πρόσβαση στην εφαρμογή Ιστού που είναι αποθηκευμένη στο αρχείο. Από προεπιλογή, ο χειριστής είναι συνδεδεμένος στον localhost, αλλά ο διακομιστής μπορεί επίσης να χρησιμοποιηθεί ως κανονικός δημόσιος διακομιστής ιστού (για παράδειγμα, αυτός ο διακομιστής εξυπηρετεί τον ιστότοπο του έργου). Ο ενσωματωμένος διακομιστής Web υποστηρίζει πρόσβαση HTTPS και μπορεί να εκτελεστεί χρησιμοποιώντας απομόνωση sandbox, η οποία σας επιτρέπει να ελέγχετε ποιες διεπαφές συστήματος έχουν πρόσβαση. Για τον έλεγχο της λειτουργίας του διακομιστή κατά την εκτέλεσή του, παρέχεται μια διαδραστική διεπαφή REPL (βασισμένη στο Lua REPL και στη βιβλιοθήκη bestline, ένα ανάλογο του GNU Readline), η οποία καθιστά δυνατή την αλλαγή της κατάστασης της διαδικασίας διαδραστικά.

Υποστηρίζεται ότι ο διακομιστής Ιστού είναι ικανός να επεξεργάζεται περισσότερα από ένα εκατομμύριο αιτήματα ανά δευτερόλεπτο σε έναν κανονικό υπολογιστή, εξυπηρετώντας περιεχόμενο συμπιεσμένο με gzip. Αυτό που βοηθά στην απόδοση είναι ότι το zip και το gzip χρησιμοποιούν μια κοινή μορφή, έτσι ώστε τα δεδομένα να προβάλλονται χωρίς να επανασυσκευάζονται από ήδη συμπιεσμένες περιοχές στο αρχείο zip. Επιπλέον, δεδομένου ότι το εκτελέσιμο αρχείο δημιουργείται χρησιμοποιώντας στατική σύνδεση και είναι μικρό σε μέγεθος, η κλήση του fork σε αυτό εισάγει ελάχιστη έως καθόλου επιβάρυνση μνήμης.

Εκτός από την επεξεργασία στατικού περιεχομένου web και την εκτέλεση JavaScript στο πρόγραμμα περιήγησης, η λογική της εφαρμογής Ιστού μπορεί να επεκταθεί χρησιμοποιώντας σενάρια στο Lua, το πλαίσιο web Fullmoon και το SQLite DBMS. Οι πρόσθετες δυνατότητες περιλαμβάνουν υποστήριξη για το σχήμα κατακερματισμού κωδικών πρόσβασης argon2, τη δυνατότητα προσδιορισμού της περιοχής IP χρησιμοποιώντας τη βάση δεδομένων MaxMind και πρόσβαση στο Unix API της βιβλιοθήκης Cosmopolitan. Το μέγεθος της βασικής στοίβας, που περιλαμβάνει έναν web server, MbedTLS, Cosmopolitan, Lua και SQLite, είναι μόνο 1.9 MB.

Ένα γενικό εκτελέσιμο αρχείο σχηματίζεται συνδυάζοντας τμήματα και κεφαλίδες ειδικά για διαφορετικά λειτουργικά συστήματα (PE, ELF, MACHO, OPENBSD, ZIP) σε ένα αρχείο. Για να διασφαλίσετε ότι ένα μεμονωμένο εκτελέσιμο αρχείο εκτελείται σε συστήματα Windows και Unix, ένα κόλπο είναι να κωδικοποιήσετε τα αρχεία Windows PE ως σενάριο φλοιού, εκμεταλλευόμενοι το γεγονός ότι το Thompson Shell δεν χρησιμοποιεί τον δείκτη δέσμης ενεργειών «#!». Το αποτέλεσμα είναι ένα εκτελέσιμο αρχείο που συνδυάζει πολλές διαφορετικές μορφές που χρησιμοποιούνται σε Linux, BSD, Windows και macOS. $ curl https://redbean.dev/redbean-demo-2.0.7.com >redbean.com $ chmod +x redbean.com $ zip redbean.com hello.html $ zip redbean.com hello.lua $ ./redbean .com -vv I2022-06-23T08:27:14+000767:redbean] (srvr) ακούστε http://127.0.0.1:8080 >: αναμονή για εντολή… $ curl https://127.0.0.1:8080/hello .html γεια $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 γεια σας



Πηγή: opennet.ru

Προσθέστε ένα σχόλιο