Redbean 2.0 — платформа для web-прыкладанняў, упакаваных ва ўніверсальны выкананы ZIP-архіў

Прадстаўлены выпуск праекта Redbean 2.0, які прапануе web-сервер, які дазваляе пастаўляць web-прыкладанні ў форме ўніверсальнага выкананага файла, які можа быць выкананы ў Linux, Windows, MacOS, FreeBSD, NetBSD і OpenBSD. Усе звязаныя з web-дадаткам і серверам рэсурсы кампануюцца ў адзін выкананы файл, які пры гэтым сумяшчальны з фарматам архіваў ZIP і дазваляе выкарыстоўваць утыліту zip для дадання дадатковых файлаў. Магчымасць запуску аднаго файла ў розных АС і яго распазнанне як ZIP-архіва дасягаецца дзякуючы маніпуляцыям з загалоўкамі выкананых файлаў і звязваннем з шматплатформеннай стандартнай Сі-бібліятэкай Cosmopolitan. Код праекту распаўсюджваецца пад ліцэнзіяй ISC.

Ідэя праекта ў пастаўцы аднаго выкананага файла "redbean.com" з убудаваным web-серверам. Распрацоўнік web-прыкладанні можа пры дапамозе ўтыліты zip дадаць у гэты файл HTML і Lua-файлы і атрымаць на вынахадзе самадастатковая web-прыкладанне, выкананага ва ўсіх папулярных АС і не патрабавальнага для працы запуску ў сістэме асобнага web-сервера.

Пасля запуску атрыманага выкананага файла, для звароту да захаванага ў файле web-дадатку выкарыстоўваецца ўбудаваны web-сервер. Па змаўчанні апрацоўшчык прымацоўваецца да localhost, але сервер можа прымяняцца і ў якасці звычайнага публічнага web-сервера (напрыклад, дадзены сервер абслугоўвае сайт праекта). Убудаваны Web-сервер падтрымлівае зварот па HTTPS і можа выконвацца з выкарыстаннем sandbox-ізаляцыі, якая дазваляе кантраляваць да якіх сістэмных інтэрфейсаў вырабляецца зварот. Для кіравання працай сервера падчас яго выканання падаецца інтэрактыўны інтэрфейс REPL (на базе Lua REPL і бібліятэкі bestline, аналогу GNU Readline), які дае магчымасць змяняць стан працэсу ў інтэрактыўным рэжыме.

Сцвярджаецца, што web-сервер здольны апрацаваць больш за мільён запытаў у секунду на звычайным ПК, аддаючы кантэнт, сціснуты метадам gzip. Высокай прадукцыйнасці спрыяе тое, што zip і gzip выкарыстоўваюць агульны фармат, таму дадзеныя аддаюцца без перапакоўкі з ужо сціснутых абласцей у zip-файле. Акрамя таго, бо выкананы файл створаны з выкарыстаннем статычнага злучэння і мае невялікі памер, выклік функцыі fork для яго практычна не прыводзіць да накладных выдаткаў пры размяшчэнні ў памяці.

Акрамя апрацоўкі статычнага web-кантэнту і выкананні JavaScript у браўзэры, логіка web-прыкладанні можа пашырацца пры дапамозе скрыптоў на мове Lua, web-фрэймворка Fullmoon і СКБД SQLite. Сярод дадатковых магчымасцяў адзначаецца падтрымка схемы хэшавання пароляў argon2, магчымасць вызначэння рэгіёна IP па базе MaxMind і доступ да Unix API бібліятэкі Cosmopolitan. Памер базавага стэка, які ўключае web-сервер, MbedTLS, Cosmopolitan, Lua і SQLite, складае ўсяго 1.9/XNUMX МБ.

Універсальны выкананы файл фармуецца шляхам сумяшчэння спецыфічных для розных аперацыйных сістэм сегментаў і загалоўкаў (PE, ELF, MACHO, OPENBSD, ZIP) у адным файле. Для забеспячэння запуску аднаго выкананага файла ў Windows і Unix-сістэмах ужываецца трук, іста якога ў кадаванні файлаў Windows PE у выглядзе shell-скрыпту, карыстаючыся тым, што 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) listen http://127.0.0.1:8080 >: waiting for command… $ curl https://127.0.0.1:8080/hello .html hello $printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 hello



Крыніца: opennet.ru

Дадаць каментар