Files
gitlab-instance-0a899031_sh/d2ypp2/docs/HOMELAB_OPTIMIZATION_PLAN.md
2026-05-19 07:49:56 +00:00

11 KiB
Raw Blame History

Homelab 一键直播系统优化方案

本方案把 /home/eric/sh/d2ypp2 作为核心源码与发布来源,目标是在 x86_64 / arm64 Linux 主机上通过一键脚本安装统一服务,并在 http://live.local 提供可展示、可控制、可诊断的 Web 面板。

目标状态

  • 一键安装:install-all.sh 可在 Debian / Ubuntu / Armbian 类系统上完成 Core OS、Infra Service、Business、Web Console 四层安装;install-core.shinstall-live.sh 可独立运行。
  • 统一入口:live.local 由 Caddy live-edge.service 承接,默认反代到 live-console.service,并由 live-edge-watch.service 持续自愈,控制台无需记端口。
  • 总览:展示硬件、软件、网络、直播业务状态,并给出健康检查、失败原因与下一步操作。
  • 服务:展示 ShellCrash、SRS、Neko、Redroid、ADB、File Browser、Netdata、WebTTY 等服务的安装、运行、端口与控制按钮。
  • YouTube 无人直播:单频道与多频道 Pro 共存。每条 Pro 线路独立保存 URL、推流密钥、PM2 进程、日志、Neko 工作室入口。
  • TikTok 无人直播:视频源转发到设备 HDMI面板可检测输出设备、预览命令、启动/停止链路。
  • 安卓Redroid 与真实手机都通过 ADB 识别Web 面板可看屏、点按、长按、输入、安装 APK、批量执行命令。
  • 网络ShellCrash 解决单机代理上网,面板展示实时/累计上行下行、代理状态、DNS 与出口连通性。

源码与部署边界

当前说明里提到“核心源码”和“实际部署同步另一个文件夹”分离,后续必须固定一个发布流程:

  • 源码目录只以 /home/eric/sh/d2ypp2 为准,实际部署目录不手工改代码。
  • upgrade-live.sh 负责从源码构建前端、刷新 systemd 单元、同步配置模板、重启 live-consolelive-edge
  • /opt/live/config 是设备上的运行配置中心;源码里的 live-platform/config/defaults/ 只提供默认模板。
  • 用户数据与账号态必须持久化到 /opt/live/state/opt/live/logs/opt/live-modules/*,不能随升级覆盖。

P0先修可用性闭环

1. 安卓 Web 画面与触控

现状:已有 /android/screenshot/android/action/android/scrcpy/ws,前端也有截图轮询和 scrcpy H.264 WebSocket。但在 scrcpy-server、WebCodecs、ADB forward、无线断连、Redroid 启动未完成时,界面容易表现为空白,用户误以为安卓不可控。

优化:

  • WebSocket 真流失败时自动降级到 PNG 截图轮询,仍保留点按/双击/长按。
  • 在安卓页显式展示 adb devices -l、scrcpy-server jar、WebCodecs、截图接口、触控接口的诊断结果。
  • Redroid 启动后自动 adb connect 127.0.0.1:5555,真实手机则提示 USB 授权或无线配对。
  • 触控坐标优先按截图/Canvas 实际像素映射;旋转后重新读取 wm size 与截图尺寸。

涉及文件:

  • web-console/components/live-product/LiveAndroidStreamConsole.tsx
  • src/android_control.py
  • src/scrcpy_stream.py
  • src/redroid_control.py
  • web.py

验收:

  • scrcpy-server 不存在或 WebSocket 失败时,安卓页仍能显示截图并可点按。
  • Redroid、USB 手机、无线 ADB 至少各有一条诊断路径。
  • pytest tests/test_android_redroid.py 通过,前端 npm run build 通过。

2. Neko 基线与 Google 友好

现状Neko 运行路径已经改为动态生成 compose。NEKO_INSTANCE_COUNT 默认保底 2最大受 NEKO_MAX_INSTANCE_COUNT 限制并封顶 64每个实例都有独立 profile、HTTP/WebRTC 端口、Tampermonkey 持久化、开发者模式与 IP 变更 watchdog。默认是个人管理员浏览器模式不挂 Chrome 企业策略、不禁用 Google Sync。

优化:

  • 保底实例数为 2多频道 Pro 线路数超过实例数时,保存频道会自动提升 NEKO_INSTANCE_COUNT 并后台重启 Neko。
  • 每个实例独立 NEKO_PROFILE_HOST_DIR_N账号态、Tampermonkey、YouTube Studio 页面保持持久化。
  • 新建 profile 会从 1 号健康 profile 自动补种 Tampermonkey 扩展目录、脚本 LevelDB 与扩展设置,避免新频道新 Neko 依赖 Chrome Web Store 实时下载后才出现默认脚本。
  • Neko 默认启用超级管理员入口,管理员密码来自 NEKO_ADMIN_PASS,普通观看/操作密码来自 NEKO_USER_PASS
  • 浏览器默认打开开发者模式。NEKO_MANAGED_POLICIES=0 时不挂企业策略,因此不会显示“由组织管理”;如必须强制安装/导入 Tampermonkey可改为 NEKO_MANAGED_POLICIES=1,代价是 Chrome 会显示 managed by organization。
  • 默认使用 Google/YouTube 登录入口,保留完整 ICE避免更换 Wi-Fi 后 WebRTC 仍指向旧局域网 IP。
  • Tampermonkey 默认脚本继续使用 services/neko/provisioning/youtube-studio-auto-dismiss.user.js,来源 URL 固定为 https://greasyfork.org/en/scripts/557378-youtube-studio-auto-dismiss/code;企业策略模式开启时会通过 Chrome policy 导入。

涉及文件:

  • services/neko/docker-compose.yml
  • tools/render_neko_compose.py
  • services/neko/browser-launch.sh
  • services/neko/policies/policies.json
  • services/neko/provisioning/*
  • tools/render_tampermonkey_provisioning.py
  • scripts/linux/neko_ip_watch.sh
  • scripts/linux/service_ctl.sh

验收:

  • 新安装后至少有 Neko 1Neko 2 两个入口。
  • service_ctl.sh neko restart 会生成 services/neko/docker-compose.generated.yml,按 NEKO_INSTANCE_COUNT 启动 live-neko-1..N
  • tools/verify_local_install.py 会逐实例检查浏览器 supervisor、Tampermonkey provisioning server、默认脚本 payload 与脚本存储落盘。
  • 切换局域网 IP 后 live-neko-* 重启并刷新 NEKO_WEBRTC_NAT1TO1
  • Chrome/Chromium 默认开发者模式可见Tampermonkey 脚本已启用。

3. YouTube 多频道 Pro

现状:多频道列表已落盘 SQLite每条线路可独立生成 youtube.<pm2>.iniURL_config.<pm2>.iniPM2 名使用 youtube2__<channelId>;保存频道时会调用 src/neko_capacity.py 保证 Neko 容量不小于频道数且最少 2 个。

优化:

  • 新建线路保存成功后,自动保证对应配置文件存在,并在进程列表显示该线路。
  • 新建线路保存成功后,自动保证存在对应 Neko 实例,动态 compose 按线路数生成 Neko 1..N
  • 线路和 Neko 实例建立稳定映射:线路 1 -> Neko 1线路 2 -> Neko 2线路 N -> Neko N超过设备上限时进入“需要扩容硬件/降低实例数”的明确状态。
  • 开始直播前校验:抖音 URL、YouTube key、FFmpeg、PM2、SRS/RTMP 端口、Neko 可达性。
  • 日志按线路隔离,面板展示最近错误、推流中/等待上游/密钥异常/心跳过期。

涉及文件:

  • web-console/components/live-product/LiveYoutubeUnmannedView.tsx
  • web-console/lib/youtubeProChannels.ts
  • src/youtube_pro_runtime.py
  • src/hub_kv_store.py
  • web.py

验收:

  • 新增线路保存后刷新页面仍存在。
  • 每条线路的 URL 与 key 不互相覆盖。
  • 未填 key 或 URL 时不能启动,提示具体原因。

P1补齐设备与网络体验

4. TikTok HDMI 链路

优化:

  • 自动探测 /dev/dri/card*/dev/fb*/dev/video*、USB HDMI 采集卡、EDID。
  • 提供 mpv --drm-*ffmpeg -> kms/drmv4l2loopback 的候选命令与失败解释。
  • 将视频源、输出接口、音频输出、分辨率、帧率、重试策略写入配置中心。

涉及文件:

  • web-console/components/live-product/LiveTiktokHdmiView.tsx
  • src/hdmi_control.py
  • scripts/srt_to_hdmi_drm.example.sh
  • tiktok/tiktok.py

验收:

  • 有 HDMI/DRM 设备时面板显示推荐输出命令。
  • 无设备时显示缺失项,不影响其他模块运行。

5. 网络与带宽统计

优化:

  • 总览和网络页展示每个物理网卡的实时上行/下行、累计 RX/TX、链路速率、在线状态。
  • ShellCrash 页保留配置编辑、启动/停止/重启、导入 YAML并增加出口 IP / DNS / YouTube 连通性探测。
  • 支持保存“代理健康检查”结果到 dashboard业务启动前可选择是否强制检查代理。

涉及文件:

  • src/control_plane.py
  • web-console/components/live-product/LiveControlApp.tsx
  • web-console/components/OverviewCharts.tsx
  • live-platform/config/defaults/services/shellcrash.json

验收:

  • /hub/dashboard 返回接口流量数据。
  • 网络页无需 Netdata 也能看到基本带宽曲线。

P2工程化与长期维护

6. 动态 Neko 扩容

已实现由配置中心生成 compose

  • NEKO_INSTANCE_COUNT=max(2, youtube_pro_lane_count)
  • 每个实例自动分配 HTTP、TCPMUX、UDPMUX、UDP_RANGE、profile 目录。
  • service_ctl.sh neko restart 使用生成后的 compose 启动所需实例并停掉多余实例。
  • 生成器:tools/render_neko_compose.py
  • 输出文件:services/neko/docker-compose.generated.yml;旧 services/neko/docker-compose.yml 保留为兼容模板和人工排障参考。

7. 安装验收矩阵

为每次部署固定验收:

  • sudo bash doctor.sh
  • sudo bash probe-live.sh
  • python3 tools/verify_live_console.py
  • pytest
  • npm --prefix web-console run build

硬件矩阵:

  • x86_64 小主机Intel/AMD + VAAPI。
  • ARM64 开发板RK3588 / Raspberry Pi 5 / Armbian。
  • 安卓Redroid、USB 手机、无线 ADB。
  • 网络:中国大陆单机代理、普通海外网络、换 Wi-Fi 后 mDNS 与 Neko WebRTC。

8. 面板信息架构

保持当前 7 个一级页面:

  • 总览:硬件/软件/业务摘要、健康检查、关键链路。
  • 服务:基础服务安装与运行控制。
  • YouTube 无人直播:单频道、多频道 Pro、Neko 工作室。
  • TikTok 无人直播HDMI 输出链路。
  • 安卓Redroid 与真实手机云控。
  • 网络ShellCrash、带宽、出口连通性。
  • 设置:配置中心、升级、备份恢复。

实施优先级

  1. P0-1安卓真流失败自动降级截图补诊断。
  2. P0-3YouTube Pro 新建线路后保证配置、进程、Neko 映射一致。
  3. P0-2Neko 基线验收,确认 Tampermonkey 脚本、profile、IP watcher。
  4. P1-5网络带宽统计与代理连通性。
  5. P1-4TikTok HDMI 探测和启动链路。
  6. P2-6动态 Neko compose 已落地;后续重点是按硬件资源给出容量建议和超载保护。

当前代码落点

  • 一键入口:install.shinstall-all.shinstall-core.shinstall-live.sh
  • Linux 脚本:scripts/linux/lib/common.shscripts/linux/service_ctl.sh
  • 控制平面:web.pysrc/control_plane.pysrc/hub_routes.py
  • 前端面板:web-console/components/live-product/*
  • Nekoservices/neko/*tools/render_neko_compose.pysrc/neko_capacity.py
  • 安卓:src/android_control.pysrc/scrcpy_stream.pysrc/redroid_control.py
  • YouTube Prosrc/youtube_pro_runtime.pyweb-console/lib/youtubeProChannels.ts