Neko Docker Compose 部署示例全解析:Firefox、Chromium、VLC 与 GPU 硬件加速实战配置 Neko Docker Compose 部署示例全解析Firefox、Chromium、VLC 与 GPU 硬件加速实战配置【免费下载链接】nekoA self hosted virtual browser that runs in docker and uses WebRTC.项目地址: https://gitcode.com/GitHub_Trending/ne/neko本指南以 Neko 官方 安装示例文档 为骨架系统讲解如何通过 Docker Compose 快速部署 Neko 虚拟浏览器服务从通用环境变量、端口规划、数据持久化到 Chromium 系浏览器的共享内存要求再到 Raspberry PiVideoCore H264 硬件编码与 NVIDIANVENC/CUDA 硬件加速两种 GPU 加速方案的完整 pipeline 配置。读完本文你将能基于这些示例自由组合出自己的部署配置并理解每个环境变量与 GStreamer 流水线参数背后的实际作用。一、部署前的通用准备Neko 是一个运行在 Docker 中、基于 WebRTC 传输音视频的自托管虚拟浏览器。部署前需要确认三件事镜像来源与命名约定稳定版镜像统一托管在 GHCR命名规则为ghcr.io/m1k1o/neko/[flavor-]application:version其中flavor为可选变体如nvidia、intelapplication为应用名如firefox、chromium、vlc。版本标签遵循语义化版本latest指向最新稳定版3、3.0、3.0.0分别追踪不同精度的版本线。详见 Docker Images。端口规划HTTP 端口8080用于 Web 客户端与信令WebRTC 媒体流走独立的UDP 端口范围示例为52000-52100该范围必须在服务器防火墙开放且不能经过端口重映射。共享内存Chromium 系浏览器在容器默认的共享内存大小下会崩溃必须设置shm_size: 2gbFirefox 系浏览器则没有此硬性要求。通用环境变量速查表所有示例共享以下环境变量其含义与默认值可以从 Desktop 配置、WebRTC 配置 和 认证配置 中得到确认环境变量作用默认值 / 说明NEKO_DESKTOP_SCREEN桌面分辨率与刷新率格式widthxheightrefresh rate默认1280x72030示例常用1920x108030管理员可在 GUI 中修改NEKO_MEMBER_MULTIUSER_USER_PASSWORD普通用户登录密码默认nekoNEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD管理员登录密码输入该密码登录即获得管理员身份默认adminNEKO_WEBRTC_EPRWebRTC 临时 UDP 端口范围每次新连接从中分配一个端口示例为52000-52100必须与ports中52000-52100/udp保持一致且不重映射NEKO_WEBRTC_ICELITE启用 ICE Lite面向公网 IP 服务器的极简 ICE 实现1为开启默认关闭便于支持更复杂的 ICE 配置使用 ICE Server 时必须禁用NEKO_WEBRTC_NAT1TO1NAT 1:1 映射的公网 IP用于客户端无法直接解析服务器地址的场景不设置时服务器自动探测公网 IP只支持填写一个地址认证模型两个密码对应两种身份默认的multiuser成员提供器按登录时输入的密码区分身份输入NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD即为管理员否则为普通用户。普通用户与管理员拥有不同的默认权限档案——例如管理员默认can_see_inactive_cursors: true普通用户为false用户账号按需动态生成、登出即移除。相关实现见 认证配置仓库根目录的 config.yml 正是该提供器的本地部署形态。二、Firefox 部署示例最简参考模板Firefox 是 Neko 的默认推荐镜像其 Compose 配置也是后续所有示例的基础骨架services: neko: image: ghcr.io/m1k1o/neko/firefox:latest restart: unless-stopped shm_size: 2gb ports: - 8080:8080 - 52000-52100:52000-52100/udp volumes: - your-host-path:/home/neko/.mozilla/firefox # persist firefox settings environment: NEKO_DESKTOP_SCREEN: 1920x108030 NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin NEKO_WEBRTC_EPR: 52000-52100 NEKO_WEBRTC_ICELITE: 1 NEKO_WEBRTC_NAT1TO1: your-IP各配置块的作用如下volumes持久化将宿主机目录挂载到容器内 Firefox 的配置目录/home/neko/.mozilla/firefox可持久化书签、Cookie 与浏览设置注意需提前chown到对应 UID或使用具名卷。NEKO_WEBRTC_ICELITE: 1与NEKO_WEBRTC_NAT1TO1: your-IP两者配合用于公网直连场景——ICE Lite 让服务器作为 ICE 端点直接应答NAT1TO1把内网 IP 通告为公网 IP避免客户端拿到无法路由的候选地址。若服务器在 NAT 之后、客户端无法直连则不应启用 ICE Lite而应配置 STUN/TURN 服务器详见 WebRTC 配置。仓库根目录的 docker-compose.yaml 就是 Firefox 示例的直接落地版本唯一的差异是它把NEKO_WEBRTC_NAT1TO1以注释形式给出并附带了官方配置链接说明该参数需要按你的实际公网 IP 填写。三、Chromium 部署示例Chromium 镜像与 Firefox 配置几乎一致核心差异在于配置目录和共享内存services: neko: image: ghcr.io/m1k1o/neko/chromium:latest restart: unless-stopped shm_size: 2gb ports: - 8080:8080 - 52000-52100:52000-52100/udp volumes: - your-host-path:/home/neko/.config/chromium # persist chromium settings environment: NEKO_DESKTOP_SCREEN: 1920x108030 NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin NEKO_WEBRTC_EPR: 52000-52100 NEKO_WEBRTC_ICELITE: 1 NEKO_WEBRTC_NAT1TO1: your-IPshm_size: 2gb是硬性要求Chromium 系浏览器以--no-sandbox运行且依赖/dev/shm容器默认的共享内存偏小会直接导致标签页崩溃。官方文档建议至少 2GB见 Docker Images。持久化目录Chromium 的用户数据位于/home/neko/.config/chromium。同属 Chromium 系的其他镜像google-chrome、microsoft-edge、brave、vivaldi、opera、ungoogled-chromium配置目录各不相同可参考各自镜像文档仓库中每个应用都有独立的 Dockerfile例如 apps/chromium/Dockerfile、apps/google-chrome/Dockerfile 等可用于确认默认配置路径。Firefox 系firefox、tor-browser、waterfox不需要额外 capabilities 或大共享内存即可稳定运行这是它与 Chromium 系在部署上的最大区别Docker Images。四、VLC 部署示例挂载媒体文件夹VLC 镜像用于把 Neko 变成可多人共看的媒体播放器通过挂载视频目录播放本地影片services: neko: image: ghcr.io/m1k1o/neko/vlc:latest restart: unless-stopped shm_size: 2gb volumes: - your-video-folder:/video # mount your video folder ports: - 8080:8080 - 52000-52100:52000-52100/udp environment: NEKO_DESKTOP_SCREEN: 1920x108030 NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin NEKO_WEBRTC_EPR: 52000-52100 NEKO_WEBRTC_ICELITE: 1 NEKO_WEBRTC_NAT1TO1: your-IPyour-video-folder:/video把宿主机视频目录挂载进容器的/videoVLC 启动后即可通过该路径访问媒体文件。除挂载目录外官方还支持通过VLC_MEDIA环境变量直接指定媒体 URL如VLC_MEDIAhttp://.../BigBuckBunny.mp4或自定义播放列表相关用法见 Docker Images。此外仓库内 apps/vlc/supervisord.conf 与 apps/vlc/Dockerfile 展示了 VLC 应用在容器内的启动编排。五、Raspberry Pi GPU 硬件加速VideoCore H264 编码在树莓派上运行 Neko 时可以用 VideoCore GPU 的 V4L2 硬件编码器v4l2h264enc替代 CPU 软编码大幅降低编码负载services: neko: image: ghcr.io/m1k1o/neko/chromium:latest restart: unless-stopped # increase on rpis with more then 1gb ram. shm_size: 520mb ports: - 8088:8080 - 52000-52100:52000-52100/udp # note: this is important since we need a GPU for hardware acceleration alternatively # mount the devices into the docker. privileged: true environment: NEKO_CAPTURE_VIDEO_PIPELINE: | ximagesrc display-name{display} show-pointertrue use-damagefalse ! video/x-raw,framerate25/1 ! videoconvert ! queue ! video/x-raw,formatNV12 ! v4l2h264enc nameencoder extra-controlscontrols,h264_profile1,video_bitrate1250000; ! h264parse config-interval-1 ! video/x-h264,stream-formatbyte-stream ! appsink nameappsink NEKO_CAPTURE_VIDEO_CODEC: h264 NEKO_DESKTOP_SCREEN: 1280x72030 NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin NEKO_WEBRTC_EPR: 52000-52100 NEKO_WEBRTC_ICELITE: 1要点说明privileged: true树莓派示例必须访问 GPU 设备才能使用硬件编码若不使用特权模式也可以显式把相应设备挂载进容器。shm_size: 520mb内存大于 1GB 的树莓派可适当调大此值。NEKO_CAPTURE_VIDEO_PIPELINE与NEKO_CAPTURE_VIDEO_CODEC前者覆盖默认的视频 GStreamer 流水线后者声明编码格式必须为h264。流水线从ximagesrcX 显示抓帧{display}为运行时占位符会被替换为实际 display 名称开始经videoconvert转成 NV12 后交给v4l2h264enc硬件编码h264parse保证字节流格式最后进入appsinknameappsink是 Neko 识别视频帧汇入点所必需的命名约定。编码参数extra-controlscontrols,h264_profile1,video_bitrate1250000;设置 H.264 Baseline Profile 与约 1.25 Mbps 的目标码率可按带宽调整。端口对外映射为8088:8080仅是端口调整示例WebRTC UDP 端口范围仍保持52000-52100。关于 GStreamer 流水线的通用规则{display}占位符、appsink命名、config-interval-1与stream-formatbyte-stream的必要性可参考 Capture 配置文档。六、NVIDIA GPU 硬件加速NVENC 编码 CUDA 渲染Neko 的 NVIDIA 加速支持浏览器渲染 视频编码全链路 GPU 化。前置条件宿主机安装 NVIDIA Container Toolkit且 GPU 支持 NVENC 硬件编码。方案 A全加速nvidia-flavor 镜像使用专用nvidia-firefox镜像同时加速编码与浏览器渲染services: neko: image: ghcr.io/m1k1o/neko/nvidia-firefox:latest restart: unless-stopped shm_size: 2gb ports: - 8080:8080 - 52000-52100:52000-52100/udp environment: NEKO_CAPTURE_VIDEO_PIPELINE: | ximagesrc display-name{display} show-pointertrue use-damagefalse ! video/x-raw,framerate25/1 ! cudaupload ! cudaconvert ! queue ! video/x-raw(memory:CUDAMemory),formatNV12 ! nvautogpuh264enc nameencoder preset2 gop-size25 spatial-aqtrue temporal-aqtrue bitrate4096 vbv-buffer-size4096 rc-mode6 ! h264parse config-interval-1 ! video/x-h264,stream-formatbyte-stream ! appsink nameappsink NEKO_CAPTURE_VIDEO_CODEC: h264 NEKO_DESKTOP_SCREEN: 1920x108030 NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin NEKO_WEBRTC_EPR: 52000-52100 NEKO_WEBRTC_ICELITE: 1 deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]流水线差异相比 CPU 示例这里在videoconvert前插入了cudaupload与cudaconvert把帧数据搬进CUDA 内存video/x-raw(memory:CUDAMemory),formatNV12再由nvautogpuh264encNVENC直接编码避免 GPU↔CPU 数据拷贝。deploy.resources.reservations.devicesCompose 的 GPU 保留声明等价于--gpus all把 NVIDIA GPU 设备注入容器。编码器选择nvautogpuh264encGStreamer 1.22是 NVIDIA 驱动 590 及以上的推荐编码器能自动选择正确的内存路径CUDA 或系统内存并取代旧版nvh264enc。若驱动或 GStreamer 版本较旧请把nvautogpuh264enc替换为nvh264enc。同理若 GPU 不支持 CUDA可去掉流水线中的cudaupload/cudaconvert改用系统内存路径性能会有所下降但兼容更老的显卡。更多 NVIDIA 变体镜像nvidia-chromium、nvidia-google-chrome、nvidia-microsoft-edge、nvidia-brave 等见 Docker Images。方案 B仅加速编码普通镜像 环境变量如果只需要 NVENC 硬件编码、不要求浏览器渲染加速也无需 CUDA 库可以直接使用默认firefox镜像并追加 NVIDIA 环境变量与精简流水线services: neko: image: ghcr.io/m1k1o/neko/firefox:latest restart: unless-stopped shm_size: 2gb ports: - 8080:8080 - 52000-52100:52000-52100/udp environment: NVIDIA_VISIBLE_DEVICES: all NVIDIA_DRIVER_CAPABILITIES: all NEKO_CAPTURE_VIDEO_PIPELINE: | ximagesrc display-name{display} show-pointertrue use-damagefalse ! video/x-raw,framerate25/1 ! videoconvert ! queue ! video/x-raw,formatNV12 ! nvautogpuh264enc nameencoder preset2 gop-size25 spatial-aqtrue temporal-aqtrue bitrate4096 vbv-buffer-size4096 rc-mode6 ! h264parse config-interval-1 ! video/x-h264,stream-formatbyte-stream ! appsink nameappsink NEKO_CAPTURE_VIDEO_CODEC: h264 NEKO_DESKTOP_SCREEN: 1920x108030 NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin NEKO_WEBRTC_EPR: 52000-52100 NEKO_WEBRTC_ICELITE: 1 deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]该方案与方案 A 的唯一流水线差别是去掉了cudaupload ! cudaconvert与 CUDA 内存 caps直接以系统内存中的 NV12 帧喂给 NVENC 编码器浏览器渲染仍走 CPU/软件路径但编码已卸载到 GPU。NVIDIA 加速验证方法在宿主机或容器内运行nvtop或nvidia-smi观察浏览器进程与 Neko 进程是否都在消耗 GPU 使用率。在浏览器内打开 WebGL Aquarium Demo 等 GPU 密集型页面若 GPU 占用随之上升说明渲染加速生效。七、常见部署问题与排查指引客户端连不上、黑屏/转圈绝大多数是 WebRTC 端口问题。确认NEKO_WEBRTC_EPR与ports中52000-52100/udp完全一致、防火墙放行、且未做端口重映射。WebRTC 不走 HTTP无法被 nginx 等反向代理转发WebRTC 配置若只暴露了443要么额外放行 UDP 端口要么部署 TURN 服务器中继。NAT 内网部署连不上填写NEKO_WEBRTC_NAT1TO1: your-IP通告公网地址若需同时支持内外网访问路由器需支持 NAT 回流hairpinning。Chromium 频繁崩溃检查shm_size是否达到 2GB。硬件加速不生效对照流水线检查编码器名称是否匹配驱动/GStreamer 版本nvautogpuh264encvsnvh264encNVIDIA 方案需确认宿主机已装 Container Toolkit 且deploy.resources声明了 GPU树莓派方案需确认容器能访问 GPU 设备privileged: true或显式挂载。忘记密码multiuser 提供器下普通用户密码默认neko、管理员密码默认admin均可通过环境变量覆盖认证配置。八、参考资源官方安装示例本文骨架来源webpage/docs/installation/examples.md镜像清单、命名约定与可用应用webpage/docs/installation/docker-images.md屏幕分辨率与桌面环境配置webpage/docs/configuration/desktop.mdWebRTC 端口、ICE、NAT 配置webpage/docs/configuration/webrtc.mdGStreamer 捕获流水线与编码器矩阵webpage/docs/configuration/capture.md认证提供器与成员档案webpage/docs/configuration/authentication.md仓库内可直接对照的实际部署文件docker-compose.yaml将上述任一示例中的your-IP、your-host-path、your-video-folder替换为实际值并执行docker compose up -d即可在http://服务器IP:8080打开 Neko 客户端用普通用户密码neko或管理员密码admin登录使用。【免费下载链接】nekoA self hosted virtual browser that runs in docker and uses WebRTC.项目地址: https://gitcode.com/GitHub_Trending/ne/neko创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考