Webtop教程:用Docker在浏览器里跑完整Linux桌面

远程桌面的老问题

你在朋友家或者出差住酒店,想用电脑写点代码或者处理点工作上的事情。结果发现自己的电脑不在身边,借来的电脑不想装一堆软件,酒店的公共电脑又根本不敢登录自己的账号。

这时候你心里想的肯定是:要是有台远程电脑就好了。

以前的选择不外乎几种:远程桌面协议(RDP)、VNC、或者干脆开一台云服务器。这些方案要么配置麻烦,要么延迟感人,要么一个月下来费用够你买台新手机。

但现在有个新选择,一个Docker容器就能在浏览器里跑完整的Linux桌面环境。这不是概念演示,是真的能用的东西。项目叫 Webtop,来自 LinuxServer.io 团队。

Webtop是什么:Docker里的Linux桌面

简单说,Webtop 是一组 Docker 镜像,里面预装了一个完整的Linux桌面环境。这个桌面不是跑在本机上的,是跑在服务器或者nas里的容器里,然后通过浏览器访问。

技术原理不算复杂。它用了一个叫 KasmVNC 的东西来做画面传输,再加上 Selkies 这套流媒体技术,把Linux桌面的画面压缩后通过网络送到浏览器。鼠标键盘的输入反过来从浏览器传回容器。

这就好像你在浏览器里开了一个远程窗口,窗口那边是一台完整的Linux电脑。

支持哪些系统?官方提供了相当多的组合:

基础系统可选桌面环境
Alpinei3, KDE Plasma (Wayland), MATE, XFCE
Ubuntui3, KDE Plasma, MATE, XFCE
Fedorai3, KDE Plasma, MATE, XFCE
Archi3, KDE Plasma, MATE, XFCE
Debiani3, KDE Plasma, MATE, XFCE
Enterprise Linuxi3, MATE, XFCE

对于大多数用户来说,直接用默认的 Alpine + XFCE 就够了——体积小、启动快、兼容性好。当然如果你有特殊需求,比如就想用 KDE Plasma 的视觉效果,或者需要某个发行版特定的工具链,换个镜像标签就行。

Webtop安装:30秒Docker部署

比30秒还快。准备好 docker-compose.yml 文件,往服务器上一丢,执行 docker compose up -d,然后就完了。

services:
  webtop:
    image: lscr.io/linuxserver/webtop:latest
    container_name: webtop
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - ./webtop-config:/config
    ports:
      - "3080:3000"
      - "3081:3001"
    shm_size: 1gb
    restart: unless-stopped

开放 3081 端口,浏览器访问 https://你服务器的IP:3081,接受那个 self-signed 证书的警告——然后你就看到桌面了。

整个过程比装一个 VSCode 插件还快。

不过有几个小细节提醒一下:

  • shm_size 必须设置,1GB 比较稳妥。这东西相当于容器的内存盘,桌面渲染全靠它
  • 默认没有密码,自己用可以不管,放到公网必须加认证
  • /config 目录要persist你的个人设置和文件,相当于这台"云电脑"的硬盘

这东西能用来做什么

我试了一段时间,发现几个特别实用的场景:

远程工作和跳板机是第一个。不用再忍受公司VPN的龟速,直接在家里或者任何有浏览器的地方打开Webtop,通过里面的终端连到公司服务器。浏览器窗口一关,数据不留痕迹。

测试不同Linux环境也很方便。想试试 Arch 滚动更新的刺激?或者验证某个工具在 Ubuntu 24.04 上的表现?开一个容器试试,不满意删掉重来,不会影响本机。

教学和演示场景下,给学生演示Linux操作,或者给同事展示某个开源项目的GUI界面,不需要让他们装虚拟机,直接发一个网页链接就行。

还有临时工作环境。在公共电脑上不想登录自己的账号?在Webtop里干活,所有的操作都在云端,本机不留任何痕迹。用完关掉,干干净凈。有些老工具在新的macOS或者Windows上兼容性一言难尽,扔到Webtop的容器里跑,反而省心。

几个需要注意的坑

没有的东西再好也有代价,Webtop也不例外。

性能是第一个。浏览器里跑桌面,画面是要压缩传输的。看视频、跑3D游戏这些场景不太适合。但日常办公、编程、浏览网页、跑命令行工具,这些完全没问题。

安全问题更值得关注。默认安装没有任何认证,端口对公网开放的话,任何人都能进来。而且容器里是passwordless的sudo,进来的人基本上想干什么干什么。

官方文档专门强调了这一点。解决办法是:

  • 一定用HTTPS
  • 放到反向代理后面,加上 Authelia 或者 Authentik 这种认证
  • 或者至少设个 basic auth 的用户名密码
  • 生产环境可以考虑加 HARDEN_DESKTOP=true 这个环境变量

最后,这东西不能替代本机电脑。做个比喻的话,它更像一辆共享单车,随时能用、随地可停,但要每天骑着它通勤,还是自己的山地车更顺手。

我的使用感受

我自己现在把 Webtop 当作一个随时可用的"备用系统"。手机、平板、任何一台能开浏览器的设备,都能立刻进入一个完整的Linux环境。

对于开发者来说,这东西的想象力空间很大。比如你可以在服务器上同时跑三个不同发行版的容器,分别测试你的代码在不同环境下的表现。比如你可以在家里nas上部署一个,随时远程上去写代码,不用背着电脑跑。

LinuxServer.io 这个团队做容器镜像的水平确实可以。镜像体积控制得不错,更新也及时,社区反馈的问题处理得挺快。

值不值得试试

如果你想要一个随时可用的Linux图形环境,不想被虚拟机或者云服务器的费用绑定,或者对浏览器远程桌面这个概念感到好奇,Webtop 值得你花5分钟试试。

如果你是那种追求极致性能、需要在本地跑重度图形应用的人,那 Webtop 不适合你。它解决的是"随时随地有个Linux桌面用"这个需求,不是"替代本机系统"。

但话说回来,这个需求其实比想象中更常见。只是以前没有这么简单粗暴的解决方案。现在有了,一个容器,一个命令,浏览器一开,Linux桌面就摆在眼前。

常见问题

Webtop和VNC有什么区别?

VNC是传统的远程桌面协议,画面是完整传输的,延迟高、带宽消耗大。Webtop用的是KasmVNC,它会压缩传输画面,只更新变化的部分,所以延迟更低,浏览器打开就能用,不需要额外客户端。

Webtop能替代本地Linux系统吗?

不能。Webtop的画面经过了压缩传输,看视频、跑3D应用会有些卡顿。它更适合命令行操作、编程、测试软件等场景。如果需要跑图形密集的应用,还是本地虚拟机更合适。

Webtop安全吗?

默认情况下不安全。容器里是passwordless的sudo,没有任何认证。建议只在内网使用,或者放到反向代理后面加上认证。官方推荐用SWAG配合Authelia做访问控制。