尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Neko V2 到 V3 迁移完全指南:Legacy 兼容模式、配置映射与 API 变更

Neko V2 到 V3 迁移完全指南:Legacy 兼容模式、配置映射与 API 变更 Neko V2 到 V3 迁移完全指南Legacy 兼容模式、配置映射与 API 变更【免费下载链接】nekoA self hosted virtual browser that runs in docker and uses WebRTC.项目地址: https://gitcode.com/GitHub_Trending/ne/nekoNeko 是一个运行在 Docker 中、基于 WebRTC 的自托管虚拟浏览器/桌面流媒体服务器。从 V2 升级到 V3 时配置结构从扁平的单一大块演进为分模块、可插拔的组织方式同时服务端内置了一层legacy 兼容模式让旧版 V2 客户端与旧配置可以无缝过渡。本文以仓库文档 webpage/docs/migration-from-v2/README.md 为核心骨架结合 server/cmd/root.go、server/internal/config 等源码系统讲解兼容模式的启用机制、V2→V3 全量配置映射表、遗留 HTTP/WebSocket API 的行为差异以及迁移后需要注意的已知限制帮助你平滑完成升级并理解底层实现原理。兼容模式V2 配置如何自动启用 legacy 模式Neko V3 默认处于兼容模式compatibility mode只要检测到任何一个 V2 配置项被设置就会自动开启 legacy 模式。这种设计的目的是让新用户不再暴露在 V2 API 之下同时让仍在使用旧配置的存量用户保持原有行为实现 V2 → V3 的平滑过渡。从 server/cmd/root.go 与 server/internal/config/root.go 的实现可以看到 legacy 模式的实际判定逻辑// root.go init() if viper.GetBool(legacy) || !viper.IsSet(legacy) { rootConfig.SetV2() }// Root.SetV2() 的关键逻辑 enableLegacy : false if viper.IsSet(logs) { if viper.GetBool(logs) { logs : filepath.Join(., logs) if runtime.GOOS linux { logs /var/log/neko } s.LogDir logs } else { s.LogDir } log.Warn().Msg(you are using v2 configuration NEKO_LOGS which is deprecated, please use NEKO_LOG_DIR/path/to/logs instead) enableLegacy true } // 只要发现任意 V2 配置被使用就自动把 legacy 置为 true if !viper.IsSet(legacy) enableLegacy { viper.Set(legacy, true) }也就是说legacy 模式的启用遵循以下规则显式开启设置NEKO_LEGACYtrue或命令行--legacytrue无论是否使用了 V2 配置项都会强制开启显式关闭设置NEKO_LEGACYfalse即使存在 V2 配置项也会被忽略不推荐见下文警告自动判定未显式设置时只要检测到任意一个 V2 配置项如NEKO_LOGS、NEKO_CERT、NEKO_BIND等legacy 模式自动开启并在日志中输出形如legacy configuration is enabled because at least one V2 configuration was used...的告警提示你尽快迁移。# 显式开启 legacy 模式 NEKO_LEGACYtrue # 显式关闭 legacy 模式仅当使用兼容 V3 的新客户端时 NEKO_LEGACYfalse:::warning 重要警告 legacy 模式目前仍被官方内置客户端使用。官方文档明确建议可以逐步迁移到新的配置项但不要关闭 legacy 模式除非你正在使用兼容 V3 的新客户端例如demodesk/neko-client。一旦新客户端正式发布legacy 模式将从服务端自动移除。 :::另一个值得注意的规则是优先级如果同时设置了 V3 和 V2 配置项V2 配置项优先生效例如同时设置NEKO_BIND与NEKO_SERVER_BIND时NEKO_BIND会被采用这是为了保证 legacy 模式按预期工作、不破坏现有配置。每个SetV2()方法内部也都逐个检查viper.IsSet(...)并输出对应的 deprecation 告警方便你定位仍在使用的旧配置。Docker 镜像变更多架构与新的主分发渠道V2 时代 Neko 主要发布在 Docker Hub 的m1k1o/neko仓库。V3 之后主分发渠道迁移到 GitHub Container Registryghcr.io/m1k1o/nekoDocker Hub 上的m1k1o/neko仍保留可用ARM 镜像不再使用独立 flavor 标签V2 时代你需要使用m1k1o/neko:arm-firefox或ghcr.io/m1k1o/neko/arm-firefox这类专门标签V3 起 ARM 与 amd64 合并为多架构镜像multi-arch直接使用与 amd64 相同的标签即可例如ghcr.io/m1k1o/neko/firefoxV2 镜像中提供的全部应用Firefox、Chromium、Brave、VLC 等在 V3 镜像中同样可用完整列表见 webpage/docs/installation/docker-images.md。仓库根目录的 docker-compose.yaml 展示的就是 V3 风格的编排示例services: neko: image: ghcr.io/m1k1o/neko/firefox:latest restart: unless-stopped shm_size: 2gb 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_NAT1TO1: IP_ADDRESS配置迁移V2 → V3 全量映射表V3 的配置相比 V2 做了模块化拆分不再是单一的扁平命名空间而是按职责划分为server、session、capture、desktop、member、webrtc等区块。映射表之外的每个 V2 配置项在源码中都对应一个InitV2注册 flag与SetV2读取并映射方法下面按模块逐一说明。服务端基础配置Server对应源码server/internal/config/server.goV2 配置V3 配置说明NEKO_LOGStrueNEKO_LOG_DIR/var/log/nekoV3 允许指定日志目录在 Linux 上NEKO_LOGStrue等价于把日志写入/var/log/neko并支持neko-latest.log自动轮转见 server/cmd/root.goNEKO_CERTNEKO_SERVER_CERTSSL 证书路径默认空NEKO_KEYNEKO_SERVER_KEYSSL 私钥路径默认空NEKO_BINDNEKO_SERVER_BIND监听地址/端口/socketV3 默认127.0.0.1:8080NEKO_PROXYNEKO_SERVER_PROXY是否信任反向代理头默认falseNEKO_STATICNEKO_SERVER_STATIC需要静态托管的 neko 客户端文件路径NEKO_PATH_PREFIXNEKO_SERVER_PATH_PREFIXHTTP 请求路径前缀V3 默认/NEKO_CORSNEKO_SERVER_CORS允许的跨域来源列表V3 中为空则禁用 CORS含*则允许所有来源会输出生产环境告警补充说明V3 中NEKO_SERVER_CORS是字符串列表类型*通配符会被归一化为[*]NEKO_SERVER_PATH_PREFIX会被path.Join(/, path.Clean(...))规范化保证以/开头。会话与权限Session对应源码server/internal/config/session.goV2 配置V3 配置说明NEKO_LOCKSNEKO_SESSION_LOCKED_CONTROLS和NEKO_SESSION_LOCKED_LOGINSV3 将控制锁与登录锁拆分为两个独立开关V2 的NEKO_LOCKScontrol,login会被分别映射为trueNEKO_IMPLICIT_CONTROLNEKO_SESSION_IMPLICIT_HOSTING是否允许隐式接管控制V3 默认trueNEKO_CONTROL_PROTECTIONNEKO_SESSION_CONTROL_PROTECTION控制保护仅在房间内至少有一名管理员时普通用户才能获得控制权默认falseNEKO_HEARTBEAT_INTERVALNEKO_SESSION_HEARTBEAT_INTERVAL心跳间隔秒V2 默认 120V3 默认 10WebRTC 视频Video对应源码server/internal/config/capture.go 与 server/internal/config/capture_pipeline.goV2 配置V3 配置说明NEKO_DISPLAYNEKO_CAPTURE_VIDEO_DISPLAY和NEKO_DESKTOP_DISPLAY若两者想保持一致推荐直接使用DISPLAY环境变量V3 中NEKO_CAPTURE_VIDEO_DISPLAY未设置时会自动回退到DISPLAY环境变量NEKO_VIDEO_CODECNEKO_CAPTURE_VIDEO_CODEC视频编码器V3 默认vp8支持 vp8/vp9/h264/av1NEKO_AV1truedeprecatedNEKO_CAPTURE_VIDEO_CODECav1旧布尔开关已废弃NEKO_H264truedeprecatedNEKO_CAPTURE_VIDEO_CODECh264旧布尔开关已废弃NEKO_VP8truedeprecatedNEKO_CAPTURE_VIDEO_CODECvp8旧布尔开关已废弃NEKO_VP9truedeprecatedNEKO_CAPTURE_VIDEO_CODECvp9旧布尔开关已废弃NEKO_VIDEONEKO_CAPTURE_VIDEO_PIPELINEV3 支持多条视频管道NEKO_CAPTURE_VIDEO_PIPELINES为 JSON 映射NEKO_CAPTURE_VIDEO_PIPELINE为单条快捷方式NEKO_VIDEO_BITRATE已移除改用自定义 pipeline 实现参考 webpage/docs/configuration/capture.mdNEKO_HWENC已移除改用自定义 pipeline 实现NEKO_MAX_FPS已移除改用自定义 pipeline 实现关于已移除项的实现细节V3 之所以移除NEKO_VIDEO_BITRATE、NEKO_HWENC、NEKO_MAX_FPS是因为引入多视频管道后码率/帧率/硬件编码都应由 GStreamer pipeline 参数直接表达。源码 server/internal/config/capture_pipeline.go 保留了NewVideoPipeline函数用于在 legacy 模式下翻译这些旧参数——例如hwencnone|vaapi|nvenc分别对应 CPU、VAAPI、NVENC 编码路径默认帧率 25fps并用ximagesrc display-name%s show-pointertrue use-damagefalse作为视频源。也就是说即使你暂时不迁移legacy 层也会把这些旧参数还原成等价的 V3 pipeline。游标cursor限制V2 没有客户端侧游标支持鼠标指针始终被编码进视频流V3 中游标与视频流分离传输。因此使用 legacy 配置时服务端会创建两条视频管道——一条带游标供 V2 客户端、一条不带游标供 V3 客户端。在 server/internal/config/capture.go 的Set()中可以看到legacy 模式下默认管道会额外生成一个legacy管道强制show-pointertrue且该管道不加入VideoIDs从而不会被带宽估算器计入。如果你不希望这种双流行为请优先迁移到新配置。WebRTC 音频AudioV2 配置V3 配置说明NEKO_DEVICENEKO_CAPTURE_AUDIO_DEVICEPulseAudio 采集设备V3 默认audio_output.monitorNEKO_AUDIO_CODECNEKO_CAPTURE_AUDIO_CODEC音频编码器V3 默认opusNEKO_G722truedeprecatedNEKO_CAPTURE_AUDIO_CODECg722旧布尔开关已废弃NEKO_OPUStruedeprecatedNEKO_CAPTURE_AUDIO_CODECopus旧布尔开关已废弃NEKO_PCMAtruedeprecatedNEKO_CAPTURE_AUDIO_CODECpcma旧布尔开关已废弃NEKO_PCMUtruedeprecatedNEKO_CAPTURE_AUDIO_CODECpcmu旧布尔开关已废弃NEKO_AUDIONEKO_CAPTURE_AUDIO_PIPELINEGStreamer 音频管道NEKO_AUDIO_BITRATE已移除改用自定义 pipeline 实现legacy 模式下旧音频参数由 server/internal/config/capture_pipeline.go 中的audioSrc pulsesrc device%s ! audio/x-raw,channels2 ! audioconvert ! 模板与NewAudioPipeline组合还原为等价管道。广播BroadcastV2 配置V3 配置说明NEKO_BROADCAST_PIPELINENEKO_CAPTURE_BROADCAST_PIPELINE自定义广播 GStreamer 管道支持{hostname}、{url}、{device}、{display}占位符替换见 server/internal/config/capture_pipeline.goNEKO_BROADCAST_URLNEKO_CAPTURE_BROADCAST_URL广播默认目标 URL设置后管理员可在 GUI 中修改/关闭NEKO_BROADCAST_AUTOSTARTNEKO_CAPTURE_BROADCAST_AUTOSTART是否在 neko 启动且配置了 URL 时自动开始广播V2 默认falseV3 默认true桌面DesktopV2 配置V3 配置说明NEKO_SCREENNEKO_DESKTOP_SCREEN默认屏幕分辨率与帧率V3 格式如1920x108030认证AuthenticationV2 配置V3 配置说明NEKO_PASSWORDNEKO_MEMBER_MULTIUSER_USER_PASSWORD且需NEKO_MEMBER_PROVIDERmultiuser普通用户密码NEKO_PASSWORD_ADMINNEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD且需NEKO_MEMBER_PROVIDERmultiuser管理员密码要让 legacy 认证正常工作必须配置 multiuser 成员提供者NEKO_MEMBER_PROVIDERmultiuser详见 webpage/docs/configuration/authentication.md。:::warning 限制 V2 客户端可能无法兼容除multiuser之外的任何其他认证提供者。 :::WebRTC 网络WebRTC对应源码server/internal/config/webrtc.goV2 配置V3 配置说明NEKO_NAT1TO1NEKO_WEBRTC_NAT1TO11:1 (D)NAT 外部 IP 及候选类型列表NEKO_TCPMUXNEKO_WEBRTC_TCPMUX所有 peer 共用的单一 TCP mux 端口NEKO_UDPMUXNEKO_WEBRTC_UDPMUX所有 peer 共用的单一 UDP mux 端口取代 EPRNEKO_ICELITENEKO_WEBRTC_ICELITEICE Lite 模式默认falseNEKO_ICESERVERS或NEKO_ICESERVERNEKO_WEBRTC_ICESERVERS_FRONTEND和NEKO_WEBRTC_ICESERVERS_BACKENDV3 支持前端/后端使用不同的 ICE 服务器NEKO_IPFETCHNEKO_WEBRTC_IP_RETRIEVAL_URL当未配置 NAT1TO1 时从该 URL 自动获取公网 IPV3 默认https://checkip.amazonaws.comNEKO_EPRNEKO_WEBRTC_EPRICE UDP 连接可分配的临时端口范围完整的 V2 配置参考legacy 支持项全集以下是 Neko V2 中所有在 V3 启用 legacy 后仍然有效的配置项完整列表其默认值与类型定义来自迁移文档所引用的 webpage/docs/migration-from-v2/help.json配置项类型默认值说明NEKO_LEGACYbooleantrue是否启用 legacy 模式NEKO_LOGSbooleanfalse是否将日志保存到文件NEKO_CERTstring—用于保护 neko 服务器的 SSL 证书路径NEKO_KEYstring—用于保护 neko 服务器的 SSL 私钥路径NEKO_BINDstring—neko 服务监听地址/端口/socketNEKO_PROXYbooleanfalse是否启用反向代理模式NEKO_STATICstring—需要托管的 neko 客户端文件路径NEKO_PATH_PREFIXstring—HTTP 请求路径前缀NEKO_CORSstrings—允许的 CORS 来源列表NEKO_LOCKSstrings—启动时锁定的资源control、loginNEKO_IMPLICIT_CONTROLbooleanfalse启用后成员可隐式获得控制NEKO_CONTROL_PROTECTIONbooleanfalse控制保护仅当房间内至少一名管理员时才可获得控制NEKO_HEARTBEAT_INTERVALint120心跳间隔秒NEKO_FILE_TRANSFER_ENABLEDbooleanfalse是否启用文件传输NEKO_FILE_TRANSFER_PATHstring—文件传输使用的路径NEKO_DISPLAYstring—要采集的 X DisplayNEKO_VIDEO_CODECstring—使用的视频编码器NEKO_AV1booleanfalse废弃改用video_codecNEKO_H264booleanfalse废弃改用video_codecNEKO_VP8booleanfalse废弃改用video_codecNEKO_VP9booleanfalse废弃改用video_codecNEKO_VIDEOstring—用于流媒体传输的视频编码参数NEKO_VIDEO_BITRATEint—视频码率kbit/sNEKO_HWENCstring—使用硬件加速编码NEKO_MAX_FPSint—WebRTC 最大 FPS0 表示无上限NEKO_DEVICEstring—要采集的音频设备NEKO_AUDIO_CODECstring—使用的音频编码器NEKO_G722booleanfalse废弃改用audio_codecNEKO_OPUSbooleanfalse废弃改用audio_codecNEKO_PCMAbooleanfalse废弃改用audio_codecNEKO_PCMUbooleanfalse废弃改用audio_codecNEKO_AUDIOstring—用于流媒体传输的音频编码参数NEKO_AUDIO_BITRATEint—音频码率kbit/sNEKO_BROADCAST_PIPELINEstring—广播用自定义 gst 管道{hostname}{url}{device}{display}会被替换NEKO_BROADCAST_URLstring—广播流默认 URL管理员稍后可在 GUI 中关闭/修改NEKO_BROADCAST_AUTOSTARTbooleanfalse当 neko 启动且设置了 broadcast_url 时自动开始广播NEKO_SCREENstring—默认屏幕分辨率与帧率NEKO_PASSWORDstring—连接流的密码NEKO_PASSWORD_ADMINstring—连接流的管理员密码NEKO_NAT1TO1strings—1:1 (D)NAT 外部 IP 地址及候选类型列表NEKO_TCPMUXint—所有 peer 共用的单一 TCP mux 端口NEKO_UDPMUXint—所有 peer 共用的单一 UDP mux 端口NEKO_ICELITEbooleanfalseICE agent 是否为 lite agentNEKO_ICESERVERstrings—ICEAgent 建立连接可用的单个 STUN/TURN 服务器描述NEKO_ICESERVERSstring—ICEAgent 建立连接可用的单个 STUN/TURN 服务器描述NEKO_IPFETCHstring—未配置 nat1to1 时从给定 URL 自动获取 IPNEKO_EPRstring—限制 ICE UDP 连接可分配的临时端口池完整的新版 V3 配置参考见 webpage/docs/configuration/README.md。文件传输的迁移NEKO_FILE_TRANSFER_ENABLED/NEKO_FILE_TRANSFER_PATH的对应 V3 配置为V2 配置V3 配置NEKO_FILE_TRANSFER_ENABLEDNEKO_FILETRANSFER_ENABLEDNEKO_FILE_TRANSFER_PATHNEKO_FILETRANSFER_DIRV3 中文件传输的完整能力由File Transfer 插件承载见 server/internal/plugins/filetransfer/plugin.go 与 webpage/docs/configuration/plugins.md包括上传、下载、拖拽drop等能力配置项也更细化。API 迁移legacy API 兼容层如何工作启用 legacy 后V3 服务端会通过一个专门的**兼容层legacy API**让 V2 客户端连接 V3。它默认开启后续版本中将被移除。兼容层挂载入口在 server/internal/http/manager.golegacy 模式开启时调用legacy.New(serverAddr, pathPrefix).Route(router)注册/ws、/stats、/screenshot.jpg、/file、/health等旧端点若使用 HTTPS配置了 Cert/Key还会额外在本机随机端口启动一个 HTTP 代理来承载 legacy 转发见 server/internal/http/manager.go。认证从?pwd到?usrpwdV2 只有一个认证提供者即 V3 中被称为multiuser的提供者。V2 的 API 仅凭密码?pwd查询串判断用户是否为管理员。V3 的认证方式不同见 server/internal/api/sessions/handler.go 与 webpage/docs/api/README.mdx因此 legacy API 新增了?usr查询串来指定用户名密码仍然通过?pwd提供?usr是可选的未提供时 API 会生成随机用户名只有multiuser或noauth提供者支持不指定?usr。在 server/internal/http/legacy/session.go 的create()中可以看到legacy 会话本质上就是调用 V3 的/api/login获取 token随后所有请求都携带Authorization: Bearer token转发到 V3 后端 API。:::warning 会话生命周期限制 legacy API 的每一次请求都会基于?usrpwd创建一个新的用户会话请求完成后会话即被销毁。因此 HTTP API 请求的会话是短生命周期的而 WebSocket API 请求的会话会一直存活到 WebSocket 连接关闭。 :::WebSocket 消息/ws与/api/wsWebSocket 消息属于内部协议非面向用户的 API因此没有专门的迁移指南。启用 legacy 时V2 客户端连接/ws端点由兼容层以 V2 协议处理V3 原生 API 位于/api/ws端点server/internal/http/manager.go。兼容层的/ws实现server/internal/http/legacy/handler.go本质上是一个协议翻译代理先将 HTTP 连接升级为 WebSocket然后向本地 V3 后端ws://serverAddr/api/ws?token...发起拨号再在两条连接之间双向复制消息并在复制过程中调用wsToClient/wsToBackend完成新旧消息格式的互转。V2 与 V3 的心跳差异V2 每60 秒发送一次 WebSocket pingV3 每10 秒发送一次并额外使用心跳机制heartbeat验证连接是否仍然存活对应NEKO_SESSION_HEARTBEAT_INTERVAL默认 10 秒。WebRTC API字节序与数据通道方向WebRTC API 同样是内部协议没有迁移指南但有两个底层行为变化值得注意字节序变更控制消息从 Little Endian 改为Big Endian便于客户端侧操作数据通道方向反转V2 由客户端创建新数据通道V3 改为由服务端创建新数据通道。legacy 模式下服务端只是监听来自客户端的新数据通道并用 legacy API handler 接受它同时用 legacy 通道覆盖已有的 V3 数据通道。HTTP API从受限到强大V2 的 HTTP API 非常有限V3 的 API 更强大、更灵活完整文档见 webpage/docs/api/README.mdx。以下是 legacy 层保留的旧端点及其 V3 对应关系GET/health迁移至 V3 的 Health 端点服务健康检查。服务运行正常时返回200 OK。legacy 实现中直接写入true见 server/internal/http/legacy/handler.go。GET/stats迁移至 V3 的 Stats 端点服务端统计与 List Sessions 端点会话列表。legacy 实现内部会并行请求/api/sessions、/api/stats、/api/room/settings三个 V3 端点再聚合见 server/internal/http/legacy/handler.go。返回 JSON 结构如下{ // 当前活跃连接数 connections: 0, // 当前持会话者无人时为空 host: session_id, // 当前已连接用户列表 members: [ { session_id: session_id, displayname: Name, admin: true, muted: false, } ], // 被封禁 IP 及其封禁者 session_id banned: { ip: session_id }, // 被锁定资源及其锁定者 session_id locked: { resource: session_id }, // 服务器启动时间 server_started_at: 2021-01-01T00:00:00Z, // 最后一位管理员/普通用户离开会话的时间 last_admin_left_at: 2021-01-01T00:00:00Z, last_user_left_at: 2021-01-01T00:00:00Z, // 是否启用了控制保护或隐式控制 control_protection: false, implicit_control: false, }注意该端点要求调用者是管理员!s.isAdmin时返回401其中host直接取 V3 stats 的HostIdlocked由房间设置转换而来banned目前尚未实现源码中标记为TODO: stats.Banned, not implemented yet。GET/screenshot.jpg迁移至 V3 的 Screenshot 端点截屏。返回桌面截图的 JPEG 图片legacy 实现转发到/api/room/screen/shot.jpg并透传quality查询参数server/internal/http/legacy/handler.go。GET/POST/DELETE/fileV2 的文件传输功能整体迁移到了File Transfer 插件见 server/internal/plugins/filetransfer。legacy 层将其映射到 V3 的/api/filetransfer端点支持下载GET、上传POST与删除DELETE通过filename查询参数指定文件server/internal/http/legacy/handler.go。迁移后的已知限制Limitations锁与静音状态不持久化V2 中锁locks和静音用户通过一个简单 map 记录谁设置的锁、锁了什么。V3 中锁被实现为设置项setting options不再存储加锁用户的session_id。因此如果客户端刷新页面或重连锁信息会丢失设置锁的用户在界面上会显示为Somebody匿名某人。会话列表中的 Somebody使用 legacy API 配合 V2 客户端时API 调用顺序与预期不同客户端会先获取会话列表、再注册用户因此拉取会话列表时当前session_id尚不可知当前用户会以Somebody出现在会话列表中。这是顺序问题导致的显示限制并非数据错误。V3 暂无原生 pipeline 生成器V3 目前没有原生支持 pipeline 自动生成用户若想自定义视频/音频管道需要手动编写完整 pipeline。V2 内置了简单的视频码率、FPS、音频码率与硬件编码设置支持由于 V3 引入多视频管道这一自动生成特性已被移除。好消息是 legacy 模式会在后台把旧参数翻译成等价管道见上文WebRTC 视频一节但这只是过渡手段长期应直接编写 V3 的 GStreamer 管道配置。迁移建议与检查清单基于上述映射表与源码行为推荐按以下步骤完成 V2 → V3 迁移先保持 legacy 模式运行用原有 V2 配置直接启动 V3 镜像观察启动日志中出现的 deprecation 告警逐条记录仍在使用的 V2 配置项按模块替换配置依照本文的映射表将NEKO_CERT→NEKO_SERVER_CERT、NEKO_BIND→NEKO_SERVER_BIND等基础项逐一迁移到 V3 命名空间把NEKO_PASSWORD/NEKO_PASSWORD_ADMIN迁移为NEKO_MEMBER_PROVIDERmultiuser下的用户/管理员密码处理已移除项NEKO_VIDEO_BITRATE、NEKO_HWENC、NEKO_MAX_FPS、NEKO_AUDIO_BITRATE已移除需改写为自定义 GStreamer pipeline参考 webpage/docs/configuration/capture.md 中的 pipeline 示例确认认证提供者legacy 认证依赖multiuser且旧版客户端仅兼容该提供者若升级了兼容 V3 的新客户端可再考虑切换提供者验证 API 行为升级客户端后检查/stats、/screenshot.jpg、文件传输等端点是否符合预期注意锁信息与Somebody显示属于已知限制最终关闭 legacy确认新客户端如demodesk/neko-client可用后设置NEKO_LEGACYfalse彻底切换到纯 V3 模式——届时旧/ws等 legacy 端点将不再注册。以上迁移路径与兼容层行为均可通过 server/internal/config配置映射、server/internal/http/legacyAPI 兼容层、server/internal/http/manager.go路由注册等源码逐一验证确保升级过程可控、可回退。【免费下载链接】nekoA self hosted virtual browser that runs in docker and uses WebRTC.项目地址: https://gitcode.com/GitHub_Trending/ne/neko创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表