此仓库托管了 https://webvm.io 的源代码,这是一个在浏览器中运行的 Linux 虚拟机。
尝试新的 Alpine / Xorg / i3 图形环境:https://webvm.io/alpine.html
WebVM 是一个无服务器的虚拟环境,完全在客户端以 HTML5/WebAssembly 运行。它被设计为与 Linux ABI 兼容,并运行未经修改的 Debian 发行版,包含许多原生开发工具链。
WebVM 由 CheerpX 虚拟化引擎驱动,它提供:
[!NOTE] 访问 https://webvm.io 即可在浏览器中立即开始使用,无需任何设置。
有关本地设置、自定义镜像构建以及分支/部署指南,请参阅开发与自定义。
WebVM 支持 Tailscale 集成。因此,您的浏览器虚拟机可以访问您的私有网络,并且如果使用出口节点,还可以访问公共互联网。
[!NOTE] 某些底层网络操作(特别是
ping使用的 ICMP)在此环境中目前不可用。如需检查连接性,请使用curl或wget。
现在 WebVM 可以访问您 Tailscale 网络中的所有设备!
[!TIP] 在较慢的连接上,初始化前可能会有短暂延迟。连接状态通过按钮上的彩色圆点显示:橙色 = 本地网络,绿色 = 全球/互联网。连接后,按钮文本会显示您的 Tailscale IP 地址。
要从 WebVM 访问公共互联网,请在 Tailscale 网络中的另一台设备上设置一个出口节点:
作为交互式登录的替代方案,将您的 Tailscale 授权密钥添加到 URL 片段中:
https://webvm.io/#authKey=<your-ephemeral-key>
这等同于 Tailscale 的 --login-server 选项。
[!TIP] 如果您还需要自定义控制服务器,请在同一 URL 片段中添加
controlUrl,并使用&分隔值,例如:#authKey=...&controlUrl=...。
我们还支持 headscale,这是一个自托管的开源 Tailscale 控制服务器实现。 由于 Headscale 默认不添加 CORS 标头,您需要在其前面放置一个代理。请参阅 Headscale 反向代理设置文档 了解示例。
准备就绪后,将以下行添加到 nginx 配置文件的 location / 块中。
if ($http_origin = "https://yourdomain.com") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
然后通过以下方式访问 WebVM:
https://yourdomain.com/#controlUrl=<your-headscale-url>
[!NOTE] 用户默认拥有 root 权限。虽然
sudo未安装,但如果需要,可以轻松地将其添加到 Dockerfile 中。
这是一个简单且对初学者友好的工作流。有关本地托管和自定义,请参见下面的本地服务与镜像配置。
派生 WebVM 仓库以将您自己的版本部署到 GitHub Pages:
Deploy 工作流deploy_to_github_pages 作业下显示的 URL
同样的 Deploy 工作流也可以从 Dockerfile 构建自定义的 .ext2 磁盘镜像。您可以将其指向 dockerfiles/debian_mini 或另一个 Dockerfile,然后将结果发布为 GitHub Release 资源,或者从您的派生部署 Pages 构建。
[!NOTE]
dockerfiles/debian_large对于 GitHub Pages 来说镜像过大。
git clone https://github.com/leaningtech/webvm.git
cd webvm
custom-disk-images/此仓库包含一个持久的 custom-disk-images/ 目录,用于存放本地的 .ext2 文件。
要使用官方 Debian mini 镜像,请从 Releases 下载:
debian_mini_20230519_5022088024.ext2
您也可以复制您自己构建的镜像。
编辑 config_public_terminal.js:
export const diskImageUrl =
"/custom-disk-images/debian_mini_20230519_5022088024.ext2";
export const diskImageType = "bytes";
npm install
npm run build
nginx -p . -c nginx.conf
然后打开 http://127.0.0.1:8081 即可享受您的本地 WebVM!
如需完整的 Alpine 桌面环境,请参见 leaningtech/alpine-image。
更多详情,请参见 CheerpX 自定义镜像文档。
[!TIP] 对于 Python3 REPL,
Deploy工作流会考虑 Dockerfile 中指定的CMD。要构建一个 REPL,您只需将
CMD [ "/bin/bash" ]更改为CMD [ "/usr/bin/python3" ]然后部署即可。
要使用 Claude AI,您需要一个 API 密钥。请按照以下步骤开始:
"解决位于 /home/user/chall1.bin 的 CTF 挑战。请注意,该二进制文件从标准输入读取内容。"
重要提示: 您的 API 密钥是私密的,绝不应共享。我们无法访问您的密钥,它仅存储在您浏览器的本地。
报告问题: 使用 GitHub Issues 报告错误或请求功能。
与我们交流: 加入我们的 Discord 社区 来讨论 WebVM、分享想法并获得帮助。
文章与资源:
示例部署:
WebVM 背后的技术:
本项目由以下技术驱动:
版本管理:
WebVM 使用 CheerpX NPM 包,该包在每个版本更新时更新。
每个构建都是不可变的。如果某个特定版本今天对您来说运行良好,它将永远保持运行。
WebVM 根据 Apache 许可证 2.0 版发布。
欢迎您使用、修改和重新分发此仓库的内容。
公共 CheerpX 部署按“原样”提供,并供个人进行技术探索、测试和使用。组织(包括非营利组织、学术机构和公共部门)的任何其他用途都需要许可证。未经商业许可,不得下载 CheerpX 构建以在其他地方托管。
阅读更多此处关于我们的许可实践。
如果您希望在 CheerpX/WebVM 之上构建产品,请查看我们的其他许可选项:CheerpX 许可 或联系我们:[email protected]