Neko
Neko 是一个自托管的虚拟浏览器,在 Docker 容器里跑完整的浏览器或桌面环境,通过 WebRTC 以低延迟视频流的方式让多人同时访问和操作同一个实例。
简要说明#
Neko 能在服务器上跑一个完整的浏览器实例,然后通过 WebRTC 把画面实时传到你的浏览器里。客户端不需要装任何软件,打开链接就能用。而且不限于一个人——多个人可以同时看同一个屏幕、操作同一个浏览器。
这个项目已经有 6 年历史,21,000+ Stars,是目前自托管虚拟浏览器领域最活跃的开源方案。
由来#
Neko 的诞生跟一个叫 rabb.it 的网站关停有关。rabb.it 是一个多人共享浏览器服务,用户可以一起看视频。它关停后,原作者想找个替代品跟朋友一起追番,但市面上的方案都不太合意:Discord 共享屏幕经常卡,传统远程桌面又太重。后来基于 Turtus 这个原型项目开发了最初的 Neko。
原仓库 nurdism/neko 后来归档了,现在的维护者 m1k1o fork 之后一直持续维护至今。
(项目名字来自日语「猫」——作者自己说喜欢猫。)
工作方式#
Neko 的核心思路很简单:在 Docker 容器里启动一个带图形界面的浏览器(或者完整桌面),用 x11vnc 捕获画面,然后用 WebRTC 编码和传输到客户端。客户端那边就是一个普通的网页,通过 WebRTC 接收视频流,同时把你的鼠标键盘操作发回服务器。
WebRTC 带来的好处是延迟低——官方数据在 300ms 以内。比起传统的 VNC over WebSocket(如 noVNC、Guacamole),画面流畅度要好一个档次,视频播放也基本不卡。
Neko 官方演示的精简片段:登录、连接房间并进入远程 Firefox。
核心功能#
多人同步#
房间里所有人都能看到同一个画面。主持人可以单独开关每个人的控制权,允许或拒绝操作请求。这个设计让 Neko 很适合几个人一起看视频、一起查资料,或者远程指导操作。
浏览器和桌面镜像#
官方提供了 10 种浏览器镜像:Firefox、Chromium、Google Chrome、Microsoft Edge、Brave、Vivaldi、Opera、Tor Browser、Waterfox、Ungooogled Chromium。还有 XFCE 和 KDE 两个完整桌面环境的镜像,跑 VLC、Remmina 这类 Linux 应用也没问题。
RTMP 广播#
可以把 Neko 房间的内容直接推流到 Twitch、YouTube 等 RTMP 平台。即使房间里没有人,推流也一直进行,适合做 24 小时不间断直播。
持久会话和一次性会话#
Neko 支持两种模式:持久会话——浏览器保持运行,关掉客户端下次回来还在;一次性会话——用完即销毁,不留任何历史记录和 Cookie。
跳板(Jump Host)#
因为浏览器跑在你的服务器上,可以通过它访问内网里的其他服务,比如管理后台、数据库面板等。客户端只看到视频流,实际的网络请求全部从服务器发出。
支持的镜像#
浏览器:Firefox、Chromium、Google Chrome、Ungoogled Chromium、Microsoft Edge、Brave、Vivaldi、Opera、Tor Browser、Waterfox
桌面环境:XFCE、KDE
应用:VLC(媒体播放器)、Remmina(远程桌面客户端)
更多镜像可以在 m1k1o/neko-apps 找到。
部署方式#
Neko 用 Docker Compose 部署,一个文件就能跑起来:
services:
neko:
image: ghcr.io/m1k1o/neko/firefox:latest
ports:
- "8080:8080"
- "52000-52100:52000-52100/udp"
environment:
NEKO_PASSWORD: "<用户密码>"
NEKO_PASSWORD_ADMIN: "<管理员密码>"
启动后在浏览器打开 http://你的IP:8080 就能用了。完整的配置项包括分辨率、音频开关、文件上传大小限制等。
硬件要求不高:x86_64 或 ARM64 的 CPU 都可以,内存建议 2GB 以上。Chromium 系容器需要额外设置 --shm-size=2g。GPU 硬件加速可选(Intel VAAPI / NVIDIA CUDA),但官方标注了 still experimental。
如果需要一个完整的房间管理系统(多个实例、自动分配、HTTPS),可以额外部署 neko-rooms。
neko-rooms 官方仓库中的房间列表截图,界面来自早期版本。
与同类工具的对比#
| Neko | Apache Guacamole | noVNC + websockify | KasmVNC | |
|---|---|---|---|---|
| 传输方式 | WebRTC | VNC over WebSocket | VNC over WebSocket | VNC over WebSocket |
| 多人同步 | 原生支持 | 不支持 | 不支持 | 有限支持 |
| 控制权管理 | 精细权限 | 不支持 | 不支持 | 有限 |
| 浏览器镜像 | 10 种预装 | 通用桌面 | 通用桌面 | 预装应用 |
| 延迟 | 低(WebRTC) | 中 | 中 | 中 |
| 部署难度 | 中等(Docker) | 较高 | 低 | 中等 |
Neko 的核心差异化在两点:WebRTC 的低延迟和多人同步。传统的 VNC 方案延迟偏高,而且多人同时看同一个桌面时缺乏权限管理。
使用场景#
观影派对:几个人在各自的设备上打开同一个浏览器看视频,实时同步播放进度。这也是 Neko 最初诞生的目的。
远程技术支持:让求助者打开浏览器加入房间,你就能看到他的操作画面,必要时接管控制,直接演示操作步骤。
隐私浏览:在远程服务器上运行浏览器,本地只看到视频流。对 ISP 来说,你的流量看起来只是一个视频通话。需要更高隐私时可以切到 Tor Browser 镜像或加 VPN。
团队协作:共享同一个浏览器环境,书签、登录态、浏览记录都是共用的,适合一起做调研或审核。
嵌入到 Web 应用:Neko 支持 ?embed=1 参数隐藏界面元素,可以用 iframe 把虚拟浏览器嵌入到自己的应用里。
自动化:在容器里安装 Playwright 或 Puppeteer 做浏览器自动化,还能通过 Neko 的界面实时观察执行过程。
注意事项#
单容器等于单浏览器实例,房间里的所有人共享同一个浏览环境,没有用户隔离。如果需要多人同时使用不同的浏览器,需要跑多个容器,或使用 neko-rooms 管理。
GPU 硬件加速官方标注了 still experimental,不保证一定生效。
镜像体积不小——Firefox 约 400MB,Chromium 约 600MB,KDE 桌面超过 1.3GB。
HTTPS 需要自己配反向代理(Nginx/Caddy),文档有示例但非开箱即用。
Chromium 系的容器需要额外的 --shm-size 配置,否则容易因共享内存不足崩溃。
如果只想要一个给自己用的远程浏览器,Neko 的多人特性会显得多余。这种情况可以考虑更轻量的方案,比如直接在 Docker 里跑一个带 WebVNC 的浏览器镜像。