24小时无人直播 · 完整上线对照清单

按现在的代码:只有「服务器 + 手机」。不要再准备中控电脑、不要日常插数据线、不要运行 wda_agent.py
工程目录:C:\Users\13267\Desktop\产品\24newtiktok\code\project · 正式服务器:67.216.204.137(AlmaLinux 9.7,SSH 2222)· 新程序端口:8020 · 看板:https://live.hugme2.com(证书已装;DNS 未通时用 IP:8020)
0 / 0

当前进度 2026-08-14 已写入

下面是已经在正式服务器上做完的事。勾选会按这些项预勾;下一阶段从「装 WDA / 打通手机 8100」开始。

已完成

  • 选定服务器 67.216.204.137(AlmaLinux 9.7,SSH 2222)。未改、未重启 ERIS,未占用 8000 / 8001 / 8766。
  • 代码已放到 /opt/24newtiktok,用系统 python3.12 建了 .venv 并装好依赖。
  • systemd tiktok-live.service 已启用、开机自启,进程听 8020
  • 防火墙已临时放行 8020/tcp。四页已能打开: http://67.216.204.137:8020/health/dashboard/phone/setup
  • nginx 只新增了 /etc/nginx/conf.d/tiktok-live.conf,没有改 eris.conflocation /
  • Let's Encrypt 证书已签发:/etc/letsencrypt/live/live.hugme2.com/(约 2026-11-12 到期)。HTTP 会 301 到 HTTPS。
  • 服务器 .envPORT=8020PUBLIC_URL=https://live.hugme2.comENABLE_VIRTUAL_AGENT=falseAPI_KEY 已换成独立长密钥(不再用 dev-local-key)。看板右上角填服务器 .env 里那串。
  • 当前为了 IP 直连调试,程序听 0.0.0.0:8020。域名 DNS 稳定后,可改回 127.0.0.1 并关掉公网 8020。

进行中 / 还没做

  • DNS:Namecheap 里要有 live 的 A 记录指向 67.216.204.137,并点保存。证书已经签过;若浏览器还打不开 https://live.hugme2.com,多半是这条记录没保存或还在缓存。通之前继续用 IP:8020。
  • 阶段 3:还没选定服务器怎么访问手机 8100(同一 Wi-Fi / Tailscale / 端口映射)。
  • 阶段 5~9:WDA 还没装进 iPhone,还不能远程开播、关播。

下一步只做这三件

  1. Namecheap Advanced DNS 确认并保存:A / Host=live / Value=67.216.204.137。保存后再打开 https://live.hugme2.com/setup
  2. 阶段 5:用 udidregistrations 把 WDA 装进 iPhone,点开后 http://手机:8100/status 能通。
  3. 阶段 3:让这台云服务器能访问手机的 8100(推荐 Tailscale),再做阶段 7 接入。

怎么用这份清单

  1. 从上往下做。前面没完成,后面一定跑不起来。
  2. 每一条左边勾选。勾选会保存在你这台电脑的浏览器里,关掉页面也不会丢。
  3. 每个阶段末尾有「本阶段完成标准」。没达到就不要进入下一阶段。
  4. 先用 1 台服务器 + 1 台 iPhone 跑通,再扩第二台手机。
  5. 正式环境已经部署在 AlmaLinux 67.216.204.137。先看顶部「当前进度」和「实机与端口规划」。不要去抢已经在用的 8000 / 8001 / 8766。

已选定的服务器与端口规划 规划已落实

2026-08-14 已按本表部署完成 · 以后改配置仍必须遵守:不抢 8000 / 8766,不改 ERIS

这台机器是什么

公网 IP67.216.204.137
域名hugme2.com(nginx 80/443,Let's Encrypt 证书已在用)
系统AlmaLinux 9.7,内核 5.14,x86_64,6 核 / 15GB / 系统盘剩 269GB
SSH端口 2222(不是 22)
登录命令ssh -i "C:\Users\13267\.ssh\eris_67.216.204.137" -o IdentitiesOnly=yes -p 2222 root@67.216.204.137
Python已有 /usr/bin/python3.12,直接用它,不要动 ERIS 的 venv
本程序安装目录 已建/opt/24newtiktok
本程序 systemd 已建tiktok-live.service(注意:已有 tiktok-monitor.service,名字不能重复)

禁止占用、禁止重启、禁止改配置

下面都是这台机器上已经在跑的生产服务。部署直播程序时只新增,不动它们。

端口绑定现有服务对外怎么进
22220.0.0.0sshdSSH 登录,不要改
80 / 4430.0.0.0nginxhttps://hugme2.com
8000127.0.0.1ERIS API 容器nginx 把站点根路径 / 反代到这里。我们的程序默认也是 8000,绝不能用
3000*Next 管理端https://hugme2.com/admin
8765127.0.0.1ERIS NEWShttps://hugme2.com/news/
8766127.0.0.1已有 tiktok-monitor.service/opt/eris-TIKTOKhttps://hugme2.com/tiktok-monitor/。这是监控看板,不是本项目
80010.0.0.0/root/tiktok-monitor 另一套 Python防火墙未放行 8001,但也不要占用
5432 / 6379 / 9090 / 9100 / 9121 / 9187127.0.0.1ERIS 的 Postgres / Redis / Prometheus 等 8 个容器只给本机用

防火墙当前已放行:22, 80, 443, 2222, 8000, 8020。8000 虽在防火墙里,但进程只听 127.0.0.1,外网进 ERIS 走的是 443。8020 是本项目调试直连,DNS/HTTPS 稳定后可再关掉公网 8020。

本项目的端口与入口(已按此表落地)

用途新建什么为什么这样定
直播控制程序监听 已完成 当前调试:0.0.0.0:8020
正式收口后改为 127.0.0.1:8020
避开 8000/8001/8766。DNS 通了、只走 nginx 443 之后,再改回只听本机
公网看板入口(推荐) 证书已装,等 DNS 子域名 https://live.hugme2.com,nginx 单独 server,反代到 http://127.0.0.1:8020(不剥路径) nginx 与证书已就绪。Namecheap 需保存 live A 记录后,公网才能解析到这个域名
公网看板入口(最快调试) 已完成 防火墙已放行 8020/tcp,访问 http://67.216.204.137:8020/dashboard DNS 未通时用这个。正式 HTTPS 稳定后建议关掉公网 8020
.env 已写入 HOST=0.0.0.0(调试直连)
PORT=8020
PUBLIC_URL=https://live.hugme2.com
ENABLE_VIRTUAL_AGENT=false
API_KEY 已换成独立长密钥
密钥在服务器 /opt/24newtiktok/.env,不要写进这份公开清单。看板右上角填写那串
防火墙 8020 调试中仍开着 当前已对公网放行,方便 IP 直连。HTTPS 稳定后关掉 少开一个口更安全,但现在 DNS 还不通,先留着
systemd 已完成 已新建并启用 tiktok-live.service 没有覆盖已有的 tiktok-monitor.service
手机 WDA(每台手机) 手机上仍是 8100 这是 WDA 默认口,改手机端很麻烦。服务器去连「服务器能访问到的那个地址:端口」
若用 Tailscale(推荐) 不新开公网端口。服务器和手机都加入 Tailscale,wda_host 填手机的 100.x.x.x,端口 8100 公网机打不到家里 192.168.x.x
若不用 Tailscale、改端口映射 家里路由:公网 18101 → 手机1 的 8100;第二台 18102 → 手机2 的 8100。服务器防火墙再放行 18101/tcp 等(这是去连家里,一般不必在这台机上 listen,只要家里映射到公网 IP) 若家宽没有独立公网 IP,映射会失败,必须改 Tailscale
外网浏览器(推荐)
  https://live.hugme2.com/dashboard     ─┐
  https://live.hugme2.com/phone         ─┼─ nginx:443 新 server(已配证书)──→ 8020  本程序(已在跑)
  https://live.hugme2.com/setup         ─┘
  (公网打开域名前,先确认 live 的 A 记录已保存)

调试直连(可选)
  http://67.216.204.137:8020/dashboard  ──→ 0.0.0.0:8020(需临时放行防火墙)

已有、不要动:
  https://hugme2.com/                   ──→ 127.0.0.1:8000   ERIS API
  https://hugme2.com/admin              ──→ :3000
  https://hugme2.com/news/              ──→ 127.0.0.1:8765
  https://hugme2.com/tiktok-monitor/    ──→ 127.0.0.1:8766   旧监控看板

手机 WDA:
  服务器 ──HTTP──→  手机 100.x.x.x:8100   (Tailscale)
            或 ──→  家宽公网:18101        (端口映射到手机 8100)
本阶段完成标准:能说出「程序听 8020,外网走 live.hugme2.com,8000 是 ERIS」。没记住不要开始部署。

阶段 0 · 先看懂现在怎么跑 已完成

优先级最高 · 不买错东西、不走错路 · 约 15 分钟

完整跑起来之后,日常只有两样东西在工作:

iPhone(TikTok + WebDriverAgent 端口 8100)
        ↑
        │  Wi-Fi / VPN / 端口映射,HTTP
        │
直播服务器(本程序,AlmaLinux 上听 127.0.0.1:8020)
  · 公网看板:https://live.hugme2.com/dashboard
  · 手机接入:https://live.hugme2.com/phone

中间不再放一台 Windows/Mac 中控机,也用 USB / iproxy 日常控机。

必须分清的两件事

日常运行:服务器直接打手机 IP:8100。不需要电脑一直连着手机。

第一次安装 WebDriverAgent(WDA):你已在 udidregistrations.com 购买,按阶段 5 用证书/安装链接把 WDA 装进 iPhone。不必再买 99 美元开发者账号,也不必 24 小时挂着 Mac。

本阶段完成标准:能用自己的话讲出「服务器怎么控制手机开播」。

阶段 1 · 备齐硬件(先买最小套)

采购 / 清点 · 建议先买「最小可跑」再扩容

最小可跑(必须先齐,否则不要往下做)

物品数量要求用途
跑本程序的服务器 必做 1 可 24 小时开机。可以先用你现在这台 Windows;正式环境建议云主机或机房小主机(2 核 4G 内存够用)。 run.py,看板,自动开播关播
iPhone 必做 先 1 台 能安装 TikTok;建议 iPhone 11 及以上。多台时尽量同型号、同 iOS 版本。 真正开播的设备
原装或合格充电头 + 线 必做 每机 1 套 能边充边用,不要虚接。 24 小时不断电
手机支架 必做 每机 1 个 镜头方向固定,不会自己滑倒。 画面稳定
稳定 Wi-Fi 路由器 必做 1 手机能长期联网。若服务器不在同一房间,见阶段 3。 手机上网 + WDA 通道
Mac 按情况 0 或 1 你已在 udidregistrations.com 购买:Platinum 或已有安装链接则不必准备 Mac。只有 .p12 证书时才需要一台 Mac 做 iOS App Signer。 签名/安装 WDA(不是 24 小时中控)
Lightning / USB-C 数据线 一次性 1 仅用 Apple Configurator 装 IPA 时才需要。Safari / Diawi 安装链接不需要线。 连接 Mac 与 iPhone

要做 24 小时无人值守,再加这些

物品数量说明
独立插排 / 充电座每机 1不要多台串在劣质插排上,避免接触不良。
UPS 不间断电源1给路由器 + 服务器(如果服务器在现场)供电,停电不立刻掉线。
小风扇 / 散热按机位手机长期充电会发烫,烫了会降频、断流、触发保护。
4G/5G 备用路由1宽带挂了手机还能上网。正式阵列强烈建议。
更多 iPhone按账号数首批建议 4~12 台,全部跑通 1 台后再买。

不要买 / 不要当必需品

  • 不要再买「中控电脑」专门插一堆数据线。
  • 不要 USB 集线器方案(本项目已取消 iproxy/USB 控机)。
  • 不要指望再装一个手机端 Agent 软件;服务器自己访问 WDA。
本阶段完成标准:能指着实物说「这是服务器、这是要直播的 iPhone」。

阶段 2 · 备齐软件、账号、资料

没有这些,阶段 5 会卡死

软件

软件装在哪说明
本项目代码服务器已在 C:\Users\13267\Desktop\产品\24newtiktok\code\project。迁到云服务器时把整个 code\project 拷过去。
Python 3.12服务器你这台 Windows 已自带便携版:code\project\.python\tools\python.exe。Linux 云主机需自己安装 Python 3.11+。
Chrome / Edge你自己的电脑打开 https://live.hugme2.com/dashboard 和本清单 /setup
Xcode(最新稳定版)MacApp Store 安装,第一次打开要同意协议、装额外组件,可能要 1~2 小时。
WebDriverAgent 源码Mac用 Appium 维护的仓库:https://github.com/appium/WebDriverAgent
TikTok App每台 iPhone国际版包名是 com.zhiliaoapp.musically(本项目默认)。若你装的是抖音,必须改配置。
Tailscale(推荐)服务器 + 手机服务器在公网、手机在家里时,这是最省事的打通方式。免费个人版通常够用。

账号与资料(提前登记到一张纸/表格里)

资料示例为什么要
udidregistrations 订单 必做Silver / Gold / Platinum,每台手机一个 UDID你已经走这条。Bronze 不够。证书大约一年,可能被苹果吊销,Gold/Platinum 可补发。
该台 iPhone 的 UDID40 位十六进制必须和订单里登记的一致,换机要重新买或走 Gold/Platinum 换机。
TikTok 账号每台手机建议 1 个必须已能在该手机上手动开播。自动点击只是代替你按按钮。
设备 ID 命名iphone-01写进 configs/devices.yaml 和手机接入页。
服务器访问地址https://live.hugme2.com写进服务器 .envPUBLIC_URL。程序本身听 127.0.0.1:8020
DNS 子域名 必做live.hugme2.com67.216.204.137看板走 HTTPS,避免和 hugme2.com 根路径上的 ERIS 抢 /devices
每台手机的 WDA 地址192.168.1.101:8100必须是服务器能访问到的地址,不是手机自己以为的地址。
开播按钮真实文案「直播」「Go LIVE」等阶段 8 要对照你的 TikTok 界面改 playbooks

包名不要搞错

本项目默认 TikTok 国际版:com.zhiliaoapp.musically。如果手机装的是抖音(com.ss.iphone.ugc.Aweme),后面开播会点不到 App,必须改 configs/devices.yaml 里的 app_bundle_id

本阶段完成标准:TikTok 能手动开播,udidregistrations 订单是 Silver 及以上,证书或安装包已保存。

阶段 3 · 打通「服务器 → 手机 8100」(最容易卡死)

技术优先级最高 · 网络不通,后面全部白做

成功标准只有一句:在服务器上访问 http://手机地址:8100/status 能返回 JSON,而不是超时。

从下面三种方案里选一种,不要混用。

方案 A:服务器和手机在同一个 Wi-Fi(最快,适合先跑通)

  1. 手机和服务器都连同一个路由器(不要一个连 Wi-Fi、一个连访客网络)。
  2. 手机:设置 → WLAN → 点当前 Wi-Fi 右边的 ⓘ → 记下「IP 地址」,例如 192.168.1.101
  3. 在路由器里把该手机改成「静态 IP / DHCP 绑定」,避免第二天 IP 变了。
  4. 电脑/服务器浏览器或命令行访问:http://192.168.1.101:8100/status(WDA 装好后才有数据,现在先把 IP 记下来)。
  5. configs/devices.yamlwda_host 就填这个局域网 IP。

方案 B:服务器在云上,手机在家里 —— 用 Tailscale(正式推荐)

  1. https://tailscale.com 注册,在服务器安装 Tailscale 并登录。
  2. 每台 iPhone 安装 Tailscale,用同一个账号登录,打开 VPN。
  3. 在 Tailscale 管理后台看到手机的 100.x.x.x 地址。
  4. wda_host 填这个 100.x.x.x,端口仍是 8100。
  5. 手机 Tailscale 保持连接,不要省电杀掉后台。

方案 C:云服务器 + 路由器端口映射(不装 VPN 时)

  1. 登录家里路由器「虚拟服务器 / 端口转发 / NAT」。
  2. 外网端口例如 18101 → 内网 192.168.1.101:8100(第二台用 18102 → 第二台 8100,以此类推)。
  3. 手机必须是固定内网 IP。
  4. wda_host云服务器能访问的公网 IP,wda_port 填 18101 这种外网端口。
  5. 在云服务器安全组放行这些端口;家里如果是运营商大内网(没有公网 IP),方案 C 会失败,改用方案 B。

绝对不要填的地址

  • 不要填 127.0.0.1(那是手机自己,服务器连的是自己)。
  • 不要填手机设置里看到、但服务器根本路由不到的局域网 IP(典型:服务器在云上,你却填 192.168.x.x)。
  • 不要依赖「中控电脑再转发一次」。
本阶段完成标准:已经选定 A/B/C 之一,并写出「服务器将要填写的 wda_host 和端口」。WDA 还没装时可以先不通,但地址规划必须正确。

阶段 4 · 把本程序在服务器上跑起来 已完成

2026-08-14 已在 AlmaLinux 落地:看板能开,还没接手机

这一阶段已经做完

不插任何手机,下面这些已经可用:

  • 服务:systemctl status tiktok-live 为 active
  • 调试入口:http://67.216.204.137:8020/health(返回 ok)、/dashboard/phone/setup
  • HTTPS:证书已装进 nginx。域名 DNS 通了之后用 https://live.hugme2.com/...
  • 旧站未动:https://hugme2.com//admin/news//tiktok-monitor/

下面 4.2 的步骤保留作记录,不要再跑一遍(尤其不要重装、不要改 ERIS)。

4.1 本机 Windows 只用来对照界面(可选)

你电脑上可以继续用 8000 看界面。正式 24 小时跑在 AlmaLinux 上,端口必须是 8020,见「实机与端口规划」。

  1. 打开 PowerShell,进入工程目录:
    cd C:\Users\13267\Desktop\产品\24newtiktok\code\project
  2. 用记事本或编辑器打开 .env,确认至少这些值:
    HOST=0.0.0.0
    PORT=8000
    API_KEY=dev-local-key
    PUBLIC_URL=http://127.0.0.1:8000
    ENABLE_VIRTUAL_AGENT=true
    若你要从手机浏览器打开看板,把 PUBLIC_URL 改成 http://这台电脑的局域网IP:8000
  3. Windows 防火墙放行 8000:Win + S 搜「允许应用通过防火墙」→ 高级设置 → 入站规则 → 新建 → 端口 → TCP 8000 → 允许。
  4. 启动服务(本机已有便携 Python,不必再装):
    .\.python\tools\python.exe run.py
    看到类似 Uvicorn running on http://0.0.0.0:8000 才算启动成功。窗口不要关。
  5. 电脑浏览器打开:
    http://127.0.0.1:8000/health
    http://127.0.0.1:8000/dashboard
    http://127.0.0.1:8000/phone
    http://127.0.0.1:8000/setup
    /health 应返回 {"status":"ok",...}。看板右上角密钥填 dev-local-key,点保存。

4.2 部署到已选定的 AlmaLinux(67.216.204.137)已完成

这些步骤已在 2026-08-14 执行完毕。下面仅作对照,不要重复部署。

  1. SSH(端口 2222):
    ssh -i "C:\Users\13267\.ssh\eris_67.216.204.137" -o IdentitiesOnly=yes -p 2222 root@67.216.204.137
  2. 代码放到 /opt/24newtiktok(不要覆盖 /opt/eris/opt/eris-TIKTOK/root/tiktok-monitor)。Windows 便携目录 .python 不要上传。
  3. 用系统自带的 Python 3.12 建独立虚拟环境:
    /usr/bin/python3.12 -m venv /opt/24newtiktok/.venv
    source /opt/24newtiktok/.venv/bin/activate
    pip install -r /opt/24newtiktok/requirements.txt
  4. .env 已写成(不要抄 Windows 的 8000;不要再改成 dev-local-key):
    HOST=0.0.0.0
    PORT=8020
    PUBLIC_URL=https://live.hugme2.com
    API_KEY=(已换成独立长密钥,只存在服务器 .env)
    ENABLE_VIRTUAL_AGENT=false
    当前是调试直连:HOST=0.0.0.0 且防火墙放行 8020。DNS 稳定后可改 HOST=127.0.0.1 并关掉公网 8020。
  5. systemd 新建 /etc/systemd/system/tiktok-live.service(名字不能叫 tiktok-monitor):
    [Unit]
    Description=24h tiktok live controller
    After=network.target
    
    [Service]
    WorkingDirectory=/opt/24newtiktok
    ExecStart=/opt/24newtiktok/.venv/bin/python run.py
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  6. DNS:给 live.hugme2.com 加 A 记录指向 67.216.204.137。然后新增 nginx 配置文件(例如 /etc/nginx/conf.d/tiktok-live.conf),不要改 eris.conf 里现成的 location /
    server {
        listen 80;
        server_name live.hugme2.com;
        location / { return 301 https://$host$request_uri; }
    }
    server {
        listen 443 ssl;
        server_name live.hugme2.com;
        ssl_certificate     /etc/letsencrypt/live/live.hugme2.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/live.hugme2.com/privkey.pem;
        location / {
            proxy_pass http://127.0.0.1:8020;
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_read_timeout 300s;
        }
    }
    证书已用 certbot 签好 live.hugme2.com。配置文件已是 /etc/nginx/conf.d/tiktok-live.conf。不要改 eris.conf
  7. 验证(已通过):
    http://67.216.204.137:8020/health
    http://67.216.204.137:8020/dashboard
    http://67.216.204.137:8020/phone
    http://67.216.204.137:8020/setup
    
    # DNS 保存并生效后再用:
    https://live.hugme2.com/health
    https://live.hugme2.com/dashboard
    https://live.hugme2.com/phone
    https://live.hugme2.com/setup
    同时确认这些旧地址仍然正常:https://hugme2.com//admin/news//tiktok-monitor/
本阶段完成标准:不插任何手机,看板已经能用。这一步与 WDA 无关。—— 已达到。接下来做阶段 5 装 WDA,并完成阶段 3 的网络方案。

阶段 5 · 用 udidregistrations.com 把 WDA 装进 iPhone 下一步

你已经在这个网站买过 · 按这条路做,不必再买 99 美元的 Apple 开发者账号,也不必用 Xcode 编译

先搞清楚:这个网站卖的不是「已经在跑的 WDA」

udidregistrations.com 做的是:把你这台 iPhone 的 UDID 登记进他们的开发者账号,并(Silver 及以上)给你签名证书,让你能把 WDA 这个 App 装到自己手机上。

装好并点开之后,手机才会在 8100 端口提供控制接口,我们的服务器才能开播/关播。

5.1 打开订单,确认你买到的是哪一档

用下单邮箱打开确认信,或到网站查订单。对照下表,Bronze 不够装 WDA

套餐你能拿到什么能不能装 WDA
Bronze(约 $6.99)只登记 UDID(主要是刷 iOS 测试版)不能。没有证书,签不了、装不了 WDA。
Silver(约 $8.99)UDID + .p12 证书 + .mobileprovision 描述文件能。用 Mac 上的 iOS App Signer 自己签 WDA.ipa 再安装。
Gold(约 $14.99)同上,另有一年吊销补发、换机等能。做法同 Silver,更稳。
Platinum(约 $19.99)同上 + 在线签名(IPA Signer / Signulous)能,而且可以不用电脑:手机浏览器上传 IPA 签名后直接安装。

邮件/订单页里常见这些文件(官网写 .p12 默认密码是 123456):

  • xxxx.p12 — 签名证书
  • Profile.mobileprovision 或类似名字 — 描述文件(必须包含这台手机的 UDID)
  • 有的卖家还会另附一份已经签好的 WDA.ipa 或一个 Safari 安装链接 —— 有这个就更省事

5.2 准备一份 WDA 安装包(.ipa)

证书只能「盖章」,不能凭空变出 WDA。按你手里有什么选一条:

  1. 订单里已经有 WDA.ipa 或「Install」链接:跳到 5.3,直接装。这是最常见、也最省事的情况。
  2. 只有证书,没有 IPA:向给你这个网站链接的人再要一份 WebDriverAgentRunner-Runner.ipa(未签名或已签名均可)。我们服务器要的是能在手机上监听 8100 的 WDA,不是随便一个 App。
  3. 不要去装该网站宣传的越狱工具。本项目只需要 WDA,越狱既不需要,也更容易把手机搞挂。

5.3 把 WDA 装到这台已经登记过 UDID 的 iPhone 上

只做下面三条路里的一条。UDID 必须是这台手机的,换机要重新买/走换机政策。

路 A:已经有「安装链接」(最快)

  1. 用 iPhone 自带 Safari(不要用微信内置浏览器)打开安装链接。
  2. 点 Install / 安装,等到主屏幕出现 WDA 图标(名字可能是 WebDriverAgent、WebDriverAgentRunner-Runner、或卖家改过的名字)。

路 B:Platinum,用官网推荐的在线签名(不用 Mac)

  1. 打开官网说明:sign-apps
  2. 打开 IPA Signer,填入这台手机的 UDID,上传 WDA.ipa,点 Sign App。
  3. 签完后点 Install App;若是在电脑上操作,下载签好的 IPA,再发到 Diawi 生成链接,用手机 Safari 打开安装。

路 C:Silver / Gold,用 Mac 的 iOS App Signer(官网标准流程)

  1. 订单页点 Certificate & Provisioning Files,下载 .p12.mobileprovision
  2. 双击 .p12 导入钥匙串,密码按官网默认 123456(若邮件写了别的密码,用邮件的)。
  3. 下载并打开 iOS App Signer(Mac)。Input File 选 WDA.ipa。
  4. Signing Certificate 选刚导入的那张;Provisioning Profile 选「Choose Custom File」指向你的 .mobileprovision
  5. 点 Start,得到签好的 IPA。
  6. 安装任选其一:把 IPA 丢到 Diawi,手机 Safari 打开链接安装;或用数据线 + Mac 上的 Apple Configurator,选设备 → Add → Apps → 选 IPA。

5.4 信任证书并启动 WDA(装上不等于在跑)

  1. iPhone:设置 → 通用 → VPN 与设备管理(有的系统叫「描述文件与设备管理」)→ 点刚装上的企业/开发者证书 → 信任
  2. 若提示「未受信任的企业级开发者」,必须联网完成信任,否则一点图标就闪退。
  3. iOS 16 及以上若打不开:设置 → 隐私与安全性 → 打开「开发者模式」,重启后再确认一次。
  4. 回到桌面,点开 WDA 图标。有的版本会停在一个空白页或显示 IP,这是正常的,不要划掉。
  5. 设置 → 显示与亮度 → 自动锁定 → 永不。关掉低电量模式。插上充电。
  6. 记下手机 IP(设置 → WLAN → ⓘ),用电脑浏览器或命令访问:
    http://手机IP:8100/status
    成功会看到一段 JSON(里面常有 readysessionId)。这就是服务器以后要打的地址。
  7. 把桌面上这个 App 的名字/包名记下来,填进 configs/devices.yamlwda_bundle_id。若不知道包名,先保持默认 com.facebook.WebDriverAgentRunner.xctrunner;探活只靠 IP:8100,包名主要给以后重启 App 用。

证书突然全挂(这个网站的用户经常遇到)

Apple 可能随时吊销他们共用的证书。现象:WDA 打不开,或 status 不通。Gold / Platinum(以及 Silver 购买后 90 天内)可到订单页重新下载新的 Certificate & Provisioning,再签一次、装一次。这不是我们服务器的 bug。

不要做的事

  • 不要用微信打开安装链接(会装不上),用 Safari。
  • 不要把 A 手机的证书装到 B 手机(UDID 对不上,会装失败)。每台手机单独买、单独登记。
  • 不要指望只登记 UDID、不装 WDA,服务器就能控机。
  • 不要走该站的越狱说明。

备选:如果你其实有自己的付费 Apple 开发者账号和 Mac,也可以不用这个网站,改用 Xcode 打开官方 WebDriverAgent.xcodeproj,选 WebDriverAgentRunner → Product → Test。对已经买了 udidregistrations 的人来说,不必再走这条。

本阶段完成标准:不插线,用浏览器能打开手机 8100 的 /status。然后去做阶段 6、7。

阶段 6 · 准备 TikTok 与手机系统

WDA 只能点你已经能手动点的按钮
  1. 安装 TikTok(或抖音),用目标账号登录。
  2. 完全用手指走一遍开播:打开 App → 点直播 → 点开始直播 → 确认推流成功 → 再手动关播。这一步失败,自动化一定失败。
  3. 把开播路径上每一个按钮的屏幕文字记下来(中文或英文以你的界面为准),例如「直播」「Go LIVE」「开始直播」「结束」「结束直播」。
  4. 授权:相机、麦克风、本地网络(iOS 会问,WDA/TikTok 都可能要)。
  5. 通知不要把直播相关权限关死。勿给 TikTok 开「低电量限制后台」之类会杀进程的设置。
  6. 关掉会打断直播的:屏幕使用时间严格限制、突然的系统更新(设置里推迟)、自动亮度可关以免画面乱跳。
  7. 手机固定在支架上,镜头对好,开始充电。
本阶段完成标准:不靠程序,你自己用手指就能在这台手机上完成一次完整直播开关。

阶段 8 · 校准开播 / 关播按钮

点错文案 = 任务失败,直播不会真的开始

程序不会「看懂」你的直播间,它只按控件名字点。文件在:

  • 开播:code\project\configs\playbooks\start_live.yaml
  • 关播:code\project\configs\playbooks\stop_live.yaml

当前默认开播会依次尝试这些字:直播 / LIVE / Go LIVE / 开始直播 / 进入直播,然后 开始直播 / Go LIVE / Start live / 开播

  1. 看阶段 7 的截图,或看手机屏幕,核对按钮实际文字是否在上面的列表里。
  2. 若你的界面是别的语言或改版按钮(例如只有「视频」旁边一个直播图标、文字是 「Go LIVE」),把那几个字原样加进对应 names: 列表,放在最前面。
  3. 关播同理,必须包含你结束直播时弹出的确认按钮文案。
  4. 改完 yaml 不必编译,但正在跑的一次任务不会自动重读中间状态;下一次开播/关播任务会用新文件。
  5. 若控件没有文字、只有图标:需要改用坐标点击。在 playbook 里加:
    - action: tap_xy
      x: 390
      y: 2400
    坐标是屏幕像素,必须按你的机型试。先用截图估位置,失败就微调。不同分辨率不要共用一套坐标。
本阶段完成标准:playbook 里的字/坐标,和你手指开播时点的是同一批按钮。

阶段 9 · 单机完整跑通(到这里才算「能跑」)

第一次建议你盯着屏幕看完整过程
  1. 手机亮屏、WDA 仍在、TikTok 已登录、不要停在别的 App 强制更新页。
  2. 看板确认设备在线。默认注册后会有 00:00–24:00 节目单,auto_live=true 时服务器会自动下发开播。
  3. 若没有自动开播,用看板所在电脑执行(把密钥换成你的):
    curl -X POST https://live.hugme2.com/tasks -H "X-API-Key: 你的密钥" -H "Content-Type: application/json" -d "{\"task_id\":\"manual-start-1\",\"device_id\":\"iphone-01\",\"task_type\":\"start_live\",\"payload\":{\"content_id\":\"opening\"},\"priority\":\"high\"}"
    Windows PowerShell 更稳妥的方式是用看板观察:节目单会自己 enqueue;也可在手机接入后再等一个监控周期(约 10 秒)。
  4. 盯着手机:应看到自动打开 TikTok → 点到直播 → 进入直播。失败时看板「服务器事件记录」会有 Wi-Fi 开播控制失败未找到任一控件
  5. 失败就回到阶段 8 改文案,或确认 WDA /status 是否还通。
  6. 成功开播后,再下发关播(或把节目单结束时间改到当前时间之前),确认能结束直播。
  7. data\screenshots\iphone-01\ 是否持续有新图;看看板人数/状态(人数依赖后续截图识别,第一次以「真的在播」为准)。
  8. 人为点出一个警告弹窗(不要真去违规,可用测试文案出现在控件树时再验证),确认看板会弹出警告并写入记录。
本阶段完成标准:1 台手机,不插数据线,不靠中控电脑,能被服务器开播和关播。这就是「项目跑起来了」。

阶段 10 · 做成 24 小时无人值守

阶段 9 能跑 ≠ 能通宵。下面这些不做,夜里一定会停
  1. 供电:手机 24 小时插电。充电器接触良好。有条件上 UPS 给路由供电。
  2. 散热:手机不要叠在一起、不要捂在盒子里。发烫就加小风扇,否则会自动降低亮度甚至关机。
  3. 锁屏:自动锁定=永不。WDA 在锁屏后通常点不了 TikTok。
  4. WDA 保活:不要划掉 WDA Runner。系统更新、内存紧张、证书过期都会让它死。付费开发者证书按年续签;免费的 7 天必挂。
  5. 节目单:默认就是全天。需要分段时,用接口或改存储里的 playlist(设备注册后自动 00:00–24:00,约 45 分钟切一次内容,由 CONTENT_SWITCH_MINUTES 控制)。
  6. 网络:手机 Wi-Fi 不要休眠。路由器关闭「无线定时关闭」。方案 B 时 Tailscale 禁止被 iOS 杀后台(可考虑锁定/屏幕常亮)。
  7. 服务器进程:Windows 上不要关那个 run.py 窗口,电脑不能休眠(电源选项:从不休眠)。Linux 用阶段 4.2 的 systemd。
  8. 先灰度:1 台机连续跑 24 小时,把掉线原因记下来(WDA 死、Wi-Fi 掉、TikTok 弹窗、发热关机),再扩第二台。

.env 里和无人值守相关的项:

HEARTBEAT_TIMEOUT_SECONDS=30
MONITOR_INTERVAL_SECONDS=10
MAX_RECOVERY_ATTEMPTS=3
CONTENT_SWITCH_MINUTES=45
VIEWER_DROP_PERCENT=70
ALERT_WEBHOOK_URL=   # 填企业微信/钉钉/自定义 webhook,空则只记到看板
本阶段完成标准:离开人之后,节目单仍能开关播;WDA 掉线能在看板看到,而不是默默停播没人知道。

阶段 11 · 多机扩容

第一台稳定后再复制,不要并行调试 10 台
  1. 第二台 iPhone 重复阶段 5~9(每台都要单独签一次 WDA,或同一开发者账号装到多台设备)。
  2. devices.yaml 增加第二段,id 换成 iphone-02wda_host 必须不同。 同一 IP 同一端口会被程序拒绝。
  3. 方案 C 时:每台手机映射不同的公网端口。
  4. 每台一个 TikTok 账号,不要多台挤同一个号。
  5. 重启服务或分别在 /phone 接入。
  6. 看板应出现两行设备,各自在线、各自节目单。
本阶段完成标准:N 台手机在看板里都是在线,且能分别开关播。

阶段 12 · 告警与日常运维

系统会记日志,但你要规定谁看、多久看一次
  1. 看板每天至少看两次:在线数、是否在播、未确认警告。
  2. 日志文件:code\project\logs\controller.log;事件也在看板下方。
  3. 截图:code\project\data\screenshots\设备ID\
  4. 警告关键词在 configs\rules.yamldialog_keywords。你的 TikTok 语言不是中/英时,把界面里的词加进去。
  5. .envALERT_WEBHOOK_URL 配到你现有的通知地址(若有),这样不用一直盯网页。
  6. 证书:udidregistrations 订单到期前续费;被吊销就到订单页下新证书,重新签装 WDA,再在手机上点开。
  7. TikTok 大版本更新后,按钮文案可能变,回到阶段 8 校准。
  8. 不要运行 scripts\wda_agent.py(已停用)。不要再插 USB 当日常方案。
本阶段完成标准:出问题有地方看、有人处理、知道先查网络/WDA 还是先查按钮文案。

附录 · 常见失败对照

你看到的现象先查什么怎么处理
浏览器打不开 https://live.hugme2.com,但 IP:8020 可以Namecheap 的 live A 记录没保存,或 DNS 缓存Advanced DNS 确认 Host=live、Value=67.216.204.137 并保存;先用 http://67.216.204.137:8020
浏览器打不开看板 / 看到的是 ERIS 页面误用了 8000 或访问了 hugme2.com 根路径本程序是 8020,看板在 https://live.hugme2.com/dashboardhttp://67.216.204.137:8020/dashboard。8000 是 ERIS,不要改它
看板 401 / 读不到设备密钥不对右上角填 .env 里的 API_KEY
smoke 测试连不上 WDA地址填错或 WDA 没在跑手机 curl /status;确认填的是服务器能路由到的 IP;同一 Wi-Fi 或 Tailscale
设备过一会儿变离线WDA 死了或网络闪断服务器靠探活当心跳。WDA 不通超过约 30 秒会离线。去手机上重新跑 WDA
未找到任一控件按钮文案和 playbook 不一致阶段 8,按截图改 yaml
点了但没开播TikTok 在引导页/权限弹窗/账号异常先手动开播走通,再自动化
云服务器填了 192.168.x.x 永远超时选错网络方案改用 Tailscale 或端口映射,不要填家里局域网 IP
装上 WDA 过几天突然全挂udidregistrations 的证书被苹果吊销,或只买了 Bronze到订单页下载新的 .p12 / 描述文件,重新签名安装;Bronze 需升级到 Silver 及以上
夜里自己停播锁屏、发热、Wi-Fi 休眠、run.py 窗口被关、系统休眠阶段 10 逐项查

最小可跑 vs 完整做好

最小可跑:阶段 0~9。其中阶段 0 和阶段 4 已完成(程序在 8020 上跑、证书已装)。还差:DNS 公网解析 + 1 台 iPhone WDA 通 + 能远程开播关播。

完整做好:再加上阶段 10~12。供电散热、永不锁屏、进程守护、灰度 24 小时、告警、多机。