
Virtuelle Maschine für das Web
Dieses Repository enthält den Quellcode für https://webvm.io, eine Linux-VM, die in Ihrem Browser läuft.
Probieren Sie die neue Alpine / Xorg / i3 grafische Umgebung aus: https://webvm.io/alpine.html
WebVM ist eine serverlose virtuelle Umgebung, die vollständig clientseitig in HTML5/WebAssembly läuft. Sie ist für Linux-ABI-Kompatibilität ausgelegt und führt eine unveränderte Debian-Distribution mit vielen nativen Entwicklungstoolchains aus.
WebVM wird von der CheerpX-Virtualisierungs-Engine betrieben und ermöglicht die sichere, sandboxierte clientseitige Ausführung von x86-Binärdateien in jedem Browser. CheerpX enthält einen x86-zu-WebAssembly-JIT-Compiler, ein virtuelles blockbasiertes Dateisystem und einen Linux-Syscall-Emulator.
Moderne Browser bieten keine APIs, um TCP oder UDP direkt zu nutzen. WebVM stellt Netzwerkunterstützung durch die Integration mit Tailscale bereit, einem VPN-Netzwerk, das WebSockets als Transportschicht unterstützt.
WebVM hat nun Zugriff auf Maschinen in Ihrem eigenen lokalen Tailscale-Netzwerk!
Wenn Sie auf das öffentliche Internet zugreifen möchten, benötigen Sie einen Exit-Node. Eine detaillierte Anleitung finden Sie unter Tailscale Exit Nodes. (Abhängig von Ihrer Netzwerkgeschwindigkeit müssen Sie möglicherweise einen Moment warten, bis das Tailscale-Wasm-Modul heruntergeladen ist.) Sobald dies eingerichtet ist:
Als Alternative zur manuellen Anmeldung können Sie Ihren Tailscale-Auth-Key am Ende der WebVM-URL hinzufügen.
https://webvm.io/#authKey=<Ihr-Key>
Es wird empfohlen, einen ephemeren Schlüssel zu verwenden.
Wir unterstützen auch headscale, eine Open-Source-Implementierung des Tailscale-Kontrollservers zum Selbsthosten.
Da headscale jedoch leider keine CORS-Header hinzufügt, müssen Sie einen Proxy-Server einrichten, um diese hinzuzufügen. Die Anleitung von headscale dazu finden Sie hier.
Wenn Sie bereit sind, fügen Sie die folgende Zeile in Ihren location /-Block in Ihrer nginx-Konfigurationsdatei ein.
if ($http_origin = "https://webvm.io") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Fügen Sie #controlUrl=<Ihre-Kontroll-URL> an die webVM-URL an, um sich bei Ihrem headscale-Netzwerk anzumelden.
Hinweise:
--login-server.& dazwischen zu trennen.
Settings.Pages.GitHub Actions als Quelle.
Enforce HTTPS aktiviert ist.Actions.Deploy.Run workflow und dann erneut auf Run workflow im Menü.Deploy-Workflow. Klicken Sie darauf, um Details anzuzeigen.deploy_to_github_pages angezeigt.
Sie können nun dockerfiles/debian_mini nach Ihren Wünschen anpassen oder ein neues Dockerfile von Grund auf erstellen. Verwenden Sie den Workflow-Parameter Path to Dockerfile, um es auszuwählen.
Wenn Sie unser vollständiges Desktop-Alpine-Image verwenden möchten, finden Sie dessen Dockerfile hier.
Weitere Informationen zum Erstellen benutzerdefinierter Images finden Sie in unserer Dokumentation zu benutzerdefinierten Disk-Images.
git clone https://github.com/leaningtech/webvm.git
cd webvm
Führen Sie den folgenden Befehl aus, um das Debian-Mini-Ext2-Image herunterzuladen:
wget "https://github.com/leaningtech/webvm/releases/download/ext2_image/debian_mini_20230519_5022088024.ext2"
(Sie können auch Ihr eigenes Disk-Image erstellen, indem Sie die Workflow-Option "Upload GitHub release" auswählen)
Bearbeiten Sie `config_public_terminal.js`, um auf Ihr lokales Disk-Image zu verweisen:
Ersetzen Sie:
"wss://disks.webvm.io/debian_large_20230522_5044875331.ext2"
Durch:
"/disk-images/debian_mini_20230519_5022088024.ext2"
(Verwenden Sie eine absolute oder relative URL, die auf den Speicherort des Disk-Images verweist.)
Ersetzen Sie "cloud" durch den richtigen Disk-Image-Typ: "bytes"
Führen Sie die folgenden Befehle aus, um Abhängigkeiten zu installieren und WebVM zu erstellen:
npm install
npm run build
Die Ausgabe wird im Verzeichnis build abgelegt.
mkdir disk-images
mv debian_mini_20230519_5022088024.ext2 disk-images/
nginx.conf-Datei, um das Disk-Image auszuliefern. Fügen Sie den folgenden Location-Block hinzu:location /disk-images/ {
root .;
autoindex on;
}
Führen Sie den folgenden Befehl aus, um Nginx zu starten:
nginx -p . -c nginx.conf
Nginx liefert automatisch das build-Verzeichnis aus.
Öffnen Sie einen Browser und besuchen Sie: http://127.0.0.1:8081.
Genießen Sie Ihr lokales WebVM!