6.7 KiB
Linux Install Profiles
Quick Start
Use one of these entrypoints from the repo root on Debian, Ubuntu, or Armbian:
sudo bash install-hub.sh
sudo bash install-business.sh
sudo bash install-all.sh
Acceptance After Install
On the target Linux node, run the built-in health checks:
sudo bash doctor.sh
sudo bash probe-live.sh
From a dev machine, you can also verify the remote node over SSH:
LIVE_DEPLOY_HOST=192.168.x.x python3 tools/verify_live_console.py
The control plane now exposes a structured acceptance report at:
http://127.0.0.1:8001/deploy/check
It focuses on the real delivery path for this project:
127.0.0.1:8001/health127.0.0.1:80/healthhttp://live.local/healthhttp://live.local:8001/health- exported
web-console/out/index.html config/system-stack.env
After git pull (no full reinstall)
刷新依赖、重建前端、重启 live-console 与 live-edge(不要为此再跑 install-all.sh,除非你要重做整机栈):
cd /home/live/douyinyoutube # 或你的克隆路径
sudo bash upgrade-live.sh
若仓库只更新了 live-console.service 模板(例如 StartLimitIntervalSec),可单独刷新单元:
sudo bash refresh-live-unit.sh
What Each Script Does
install-hub.sh
Use this when the Linux device should become the reusable super hub first.
- Creates and refreshes the
liveaccount - Installs the shared control plane runtime
- Enables
live.local - Creates the default Wi-Fi profile
live / 12345678whenwlan0exists - Installs ShellCrash, WebTTY, Cockpit, File Browser, Homepage, and Netdata
- Installs the Android web panel based on
web-scrcpy - Builds the web console and enables
live-console.service
install-business.sh
Use this when the device should only run the Douyin or YouTube business stack.
- Creates and refreshes the
liveaccount - Installs the shared control plane runtime
- Installs ffmpeg, mpv, ADB, Chromium
- Installs the Android web panel based on
web-scrcpy - Starts SRS
- Builds the web console and enables
live-console.service - Installs Caddy
live-edge.servicesohttp://live.local(port 80) reverse-proxies to the control plane (same as hub) - Generates the hardware profile for adaptive ARM or X86 defaults
http://live.local returns 502
502 means the edge proxy reached nothing usable on the upstream port (default 127.0.0.1:8001).
- Check the control plane:
sudo systemctl status live-console.serviceandjournalctl -u live-console.service -n 80 --no-pager. - Check the edge:
sudo systemctl status live-edge.serviceand confirmconfig/system-stack.envPORTmatches what Caddy uses (regenerate withsudo bash scripts/linux/reinstall_live_edge.shfrom the repo root). - Quick probe:
curl -sf http://127.0.0.1:8001/health— if this fails, fixlive-consolefirst (Python venv,web-console/out, orscripts/launch.pyerrors in the journal).
Older business installs (before install_live_edge_proxy was included) never installed Caddy; if you still see 502 on port 80, you likely had a prior hub/edge install—run sudo bash scripts/linux/reinstall_live_edge.sh after pulling the latest repo.
Browser: live.local — refused to connect (not 502)
That means the TCP connection was rejected or nothing listens on the address you used (often port 80 on the box’s IP).
- On the device, run:
sudo bash probe-live.sh(orscripts/linux/probe_live_access.sh) and read the:80/:8001lines. - If
:8001works but:80fails:live-edge(Caddy) is down —sudo systemctl restart live-edge.serviceorsudo bash scripts/linux/reinstall_live_edge.sh. - If both fail:
live-consoleis down —sudo systemctl restart live-console.serviceandjournalctl -u live-console.service -n 80. - From a laptop/phone, open
http://<device-LAN-IP>:8001/first (same Wi‑Fi). If that works buthttp://live.localdoes not, the problem is mDNS (Windows often needs Bonjour) or you’re not on the same LAN — use the IP bookmark. - Firewall (nftables/ufw) blocking 80/8001 from Wi‑Fi will also show as “refused” from other hosts while loopback still works.
PM2:单频道与多频道 Pro(Linux ARM / x86_64)
- 单频道:在项目根启用一个业务进程即可,例如取消注释
ecosystem.config.cjs里的youtube或tiktok,执行pm2 start ecosystem.config.cjs && pm2 save。 - 多频道 Pro:每路直播需要独立的
config/youtube.ini与config/URL_config.ini(或整份独立工作目录)。为第二路及以后各复制一份目录(或符号链接脚本外的配置),在 PM2 里为每个 app 设置不同的cwd,name与 Web 控制台 Pro 线路建议名一致(如youtube2__<channelId>)。 - 硬件编码:
sudo python3 scripts/hardware_probe.py --write会写入config/hardware.env与hardware-profile.json;推流侧可选LIVE_VIDEO_ENCODER(RKMPP / V4L2M2M / VA-API / QSV 等,见config/hardware.env.example)。NVIDIA 一般由douyin_youtube_ffplay.py自动走 NVENC。 - 音频链:与 GitLab 分支
ffmpegAudioRMFoode中douyin_youtube_ffplay.py的 FFmpeg 处理思路一致(fast_audio、arnndn、EQ 等);当前主线在 Linux 上还包含板载编码探测与推流稳定性增强,以前端无需对齐 Electron 为准。
install-all.sh
Use this when the node should be both the super hub and the livestream business node.
- Runs
install-hub.sh - Runs
install-business.sh - Reuses shared modules instead of replacing them
Shared Config
All install profiles read the same shared file:
config/system-stack.env
If the file does not exist, the installer copies:
config/system-stack.env.example
This keeps host identity, ports, Wi-Fi, ShellCrash path, and module toggles centralized.
Default Access URLs
With the default hostname and ports, a fresh hub exposes:
http://live.local:8001main control planehttp://live.local:8001/shellcrashShellCrash editor routehttp://live.local:8001/androidAndroid device center routehttp://live.local:7681WebTTYhttp://live.local:8082File Browser, default loginlive / 12345678http://live.local:19999Netdata
The ShellCrash and Android pages are separate routes on purpose, so they can be bookmarked directly instead of sharing the same tabbed root URL.
Separation Rules
- The hub profile must keep working without SRS.
- The business profile must keep working without Cockpit, Homepage, File Browser, or Netdata.
- The control plane should show degraded modules as unavailable instead of crashing.
- Every service must be removable by systemd or compose boundaries.