
Máquina virtual para la Web
Este repositorio aloja el código fuente de https://webvm.io, una máquina virtual Linux que se ejecuta en tu navegador.
Prueba el nuevo entorno gráfico Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM es un entorno virtual sin servidor que se ejecuta completamente del lado del cliente en HTML5/WebAssembly. Está diseñado para ser compatible con la ABI de Linux. Ejecuta una distribución Debian sin modificar que incluye muchas cadenas de herramientas de desarrollo nativas.
WebVM funciona con el motor de virtualización CheerpX y permite la ejecución segura y aislada de binarios x86 en cualquier navegador. CheerpX incluye un compilador JIT de x86 a WebAssembly, un sistema de archivos virtual basado en bloques y un emulador de llamadas al sistema de Linux.
Los navegadores modernos no proporcionan APIs para usar directamente TCP o UDP. WebVM ofrece soporte de red integrándose con Tailscale, una red VPN que admite WebSockets como capa de transporte.
¡WebVM ahora tiene acceso a las máquinas en tu propia red local de Tailscale!
Si deseas acceder a la internet pública, necesitarás un nodo de salida. Consulta Tailscale Exit Nodes para obtener instrucciones detalladas. (Dependiendo de la velocidad de tu red, puede que debas esperar unos momentos para que se descargue el módulo Wasm de Tailscale). Una vez configurado:
Como alternativa a iniciar sesión manualmente, puedes añadir tu clave de autenticación de Tailscale al final de la URL de WebVM.
https://webvm.io/#authKey=<tu-clave>
Se recomienda usar una clave efímera.
También soportamos headscale, una implementación de código abierto autogestionada del servidor de control de Tailscale.
Aunque headscale desafortunadamente no permite añadir cabeceras CORS. Tendrás que configurar un servidor proxy para añadirlas. Las instrucciones de headscale para hacerlo se pueden encontrar aquí.
Una vez listo, añade la siguiente línea a tu bloque location / en tu archivo de configuración de nginx.
if ($http_origin = "https://webvm.io") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Para iniciar sesión en tu red headscale, añade #controlUrl=<tu-url-de-control> a la URL de WebVM.
Notas:
--login-server de Tailscale.& entre ellos.
Settings.Pages.Github Actions como origen.
Enforce HTTPS esté habilitado.Actions.Deploy.Run workflow y luego nuevamente en Run workflow en el menú.Deploy, haz clic en él para ver los detalles.deploy_to_github_pages.
Ahora puedes personalizar dockerfiles/debian_mini según tus necesidades, o crear un nuevo Dockerfile desde cero. Usa el parámetro del workflow Path to Dockerfile para seleccionarlo.
Si deseas usar nuestra imagen completa de Alpine con escritorio, puedes encontrar su Dockerfile aquí.
Para más información sobre la creación de imágenes personalizadas, consulta nuestra documentación de imágenes de disco personalizadas.
git clone https://github.com/leaningtech/webvm.git
cd webvm
Ejecuta el siguiente comando para descargar la imagen Ext2 de Debian mini:
wget "https://github.com/leaningtech/webvm/releases/download/ext2_image/debian_mini_20230519_5022088024.ext2"
(También puedes construir tu propia imagen de disco seleccionando la opción del workflow "Upload GitHub release")
Edita `config_public_terminal.js` para que haga referencia a tu imagen de disco local:
Reemplaza:
"wss://disks.webvm.io/debian_large_20230522_5044875331.ext2"
Con:
"/disk-images/debian_mini_20230519_5022088024.ext2"
(Usa una URL absoluta o relativa que apunte a la ubicación de la imagen de disco.)
Reemplaza "cloud" con el tipo correcto de imagen de disco: "bytes"
Ejecuta los siguientes comandos para instalar dependencias y construir WebVM:
npm install
npm run build
La salida se colocará en el directorio build.
mkdir disk-images
mv debian_mini_20230519_5022088024.ext2 disk-images/
nginx.conf para servir la imagen de disco. Añade el siguiente bloque de ubicación:location /disk-images/ {
root .;
autoindex on;
}
Ejecuta el siguiente comando para iniciar Nginx:
nginx -p . -c nginx.conf
Nginx servirá automáticamente el directorio build.
Abre un navegador y visita: http://127.0.0.1:8081.
¡Disfruta de tu WebVM local!
El workflow Deploy tiene en cuenta el CMD especificado en el Dockerfile. Para construir un REPL, simplemente aplica este parche y despliega.