
Macchina virtuale per il Web
Questo repository ospita il codice sorgente di https://webvm.io, una macchina virtuale Linux che gira nel tuo browser.
Prova il nuovo ambiente grafico Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM è un ambiente virtuale senza server che gira interamente lato client in HTML5/WebAssembly. È progettato per essere compatibile con l'ABI Linux. Esegue una distribuzione Debian non modificata che include molti toolchain nativi per lo sviluppo.
WebVM è alimentato dal motore di virtualizzazione CheerpX e consente l'esecuzione sicura e isolata di binari x86 lato client in qualsiasi browser. CheerpX include un compilatore JIT x86-to-WebAssembly, un file system virtuale basato su blocchi e un emulatore di syscall Linux.
I browser moderni non forniscono API per utilizzare direttamente TCP o UDP. WebVM fornisce supporto di rete integrandosi con Tailscale, una rete VPN che supporta WebSocket come livello di trasporto.
Ora WebVM ha accesso alle macchine nella tua rete Tailscale locale!
Se desideri accedere a Internet pubblico, avrai bisogno di un Nodo di Uscita. Vedi Tailscale Exit Nodes per istruzioni dettagliate. (A seconda della velocità della tua rete, potresti dover attendere qualche istante per il download del modulo Wasm di Tailscale.) Una volta configurato:
In alternativa all'accesso manuale, puoi aggiungere la tua chiave di autenticazione Tailscale alla fine dell'URL di WebVM.
https://webvm.io/#authKey=<la-tua-chiave>
Si consiglia di utilizzare una chiave effimera.
Supportiamo anche headscale, un'implementazione open source self-hosted del server di controllo Tailscale.
Tuttavia, headscale purtroppo non supporta l'aggiunta di intestazioni CORS. Dovrai configurare un proxy per aggiungerle. Le istruzioni di Headscale per farlo si trovano qui.
Una volta pronto, aggiungi le seguenti righe al blocco location / nel tuo file di configurazione nginx.
if ($http_origin = "https://webvm.io") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Per accedere alla tua rete headscale, aggiungi #controlUrl=<il-tuo-control-url> all'URL di WebVM.
Note:
--login-server della riga di comando di tailscale.& in mezzo.
Impostazioni.Pagine.GitHub Actions come sorgente.
Forza HTTPS sia abilitato.Azioni.Deploy.Esegui workflow e poi di nuovo su Esegui workflow nel menu.Deploy inizierà; cliccaci sopra per vedere i dettagli.deploy_to_github_pages.
Ora puoi personalizzare dockerfiles/debian_mini per le tue esigenze, o creare un nuovo Dockerfile da zero. Usa il parametro del workflow Percorso del Dockerfile per selezionarlo.
Se desideri utilizzare la nostra immagine Alpine desktop completa, puoi trovare il suo dockerfile qui.
Per maggiori informazioni sulla creazione di immagini personalizzate, consulta la nostra documentazione sulle immagini disco personalizzate.
git clone https://github.com/leaningtech/webvm.git
cd webvm
Esegui il seguente comando per scaricare l'immagine Debian mini Ext2:
wget "https://github.com/leaningtech/webvm/releases/download/ext2_image/debian_mini_20230519_5022088024.ext2"
(*Puoi anche costruire la tua immagine disco selezionando l'opzione del workflow "Carica release GitHub" *)
Modifica config_public_terminal.js per fare riferimento alla tua immagine disco locale:
Sostituisci:
"wss://disks.webvm.io/debian_large_20230522_5044875331.ext2"
Con:
"/disk-images/debian_mini_20230519_5022088024.ext2"
(Usa un URL assoluto o relativo che punti alla posizione dell'immagine disco.)
Sostituisci "cloud" con il tipo corretto di immagine disco: "bytes"
Esegui i seguenti comandi per installare le dipendenze e costruire WebVM:
npm install
npm run build
L'output verrà inserito nella directory build.
mkdir disk-images
mv debian_mini_20230519_5022088024.ext2 disk-images/
nginx.conf per servire l'immagine disco. Aggiungi il seguente blocco location:location /disk-images/ {
root .;
autoindex on;
}
Esegui il seguente comando per avviare Nginx:
nginx -p . -c nginx.conf
Nginx servirà automaticamente la directory build.
Apri un browser e visita: http://127.0.0.1:8081.
Goditi la tua WebVM locale!
Il workflow Deploy tiene conto del CMD specificato nel Dockerfile. Per costruire un REPL puoi semplicemente applicare questa patch e distribuire.