当前进度 2026-08-14 已写入
下面是已经在正式服务器上做完的事。勾选会按这些项预勾;下一阶段从「装 WDA / 打通手机 8100」开始。
已完成
- 选定服务器
67.216.204.137(AlmaLinux 9.7,SSH2222)。未改、未重启 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.conf的location /。 - Let's Encrypt 证书已签发:
/etc/letsencrypt/live/live.hugme2.com/(约 2026-11-12 到期)。HTTP 会 301 到 HTTPS。 - 服务器
.env:PORT=8020,PUBLIC_URL=https://live.hugme2.com,ENABLE_VIRTUAL_AGENT=false,API_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,还不能远程开播、关播。
下一步只做这三件
- Namecheap Advanced DNS 确认并保存:
A/ Host=live/ Value=67.216.204.137。保存后再打开https://live.hugme2.com/setup。 - 阶段 5:用 udidregistrations 把 WDA 装进 iPhone,点开后
http://手机:8100/status能通。 - 阶段 3:让这台云服务器能访问手机的 8100(推荐 Tailscale),再做阶段 7 接入。
怎么用这份清单
- 从上往下做。前面没完成,后面一定跑不起来。
- 每一条左边勾选。勾选会保存在你这台电脑的浏览器里,关掉页面也不会丢。
- 每个阶段末尾有「本阶段完成标准」。没达到就不要进入下一阶段。
- 先用 1 台服务器 + 1 台 iPhone 跑通,再扩第二台手机。
- 正式环境已经部署在 AlmaLinux
67.216.204.137。先看顶部「当前进度」和「实机与端口规划」。不要去抢已经在用的 8000 / 8001 / 8766。
已选定的服务器与端口规划 规划已落实
这台机器是什么
| 项 | 值 |
|---|---|
| 公网 IP | 67.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,名字不能重复) |
禁止占用、禁止重启、禁止改配置
下面都是这台机器上已经在跑的生产服务。部署直播程序时只新增,不动它们。
| 端口 | 绑定 | 现有服务 | 对外怎么进 |
|---|---|---|---|
2222 | 0.0.0.0 | sshd | SSH 登录,不要改 |
80 / 443 | 0.0.0.0 | nginx | https://hugme2.com |
8000 | 127.0.0.1 | ERIS API 容器 | nginx 把站点根路径 / 反代到这里。我们的程序默认也是 8000,绝不能用 |
3000 | * | Next 管理端 | https://hugme2.com/admin |
8765 | 127.0.0.1 | ERIS NEWS | https://hugme2.com/news/ |
8766 | 127.0.0.1 | 已有 tiktok-monitor.service(/opt/eris-TIKTOK) | https://hugme2.com/tiktok-monitor/。这是监控看板,不是本项目 |
8001 | 0.0.0.0 | /root/tiktok-monitor 另一套 Python | 防火墙未放行 8001,但也不要占用 |
5432 / 6379 / 9090 / 9100 / 9121 / 9187 | 127.0.0.1 | ERIS 的 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=8020PUBLIC_URL=https://live.hugme2.comENABLE_VIRTUAL_AGENT=falseAPI_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)
阶段 0 · 先看懂现在怎么跑 已完成
完整跑起来之后,日常只有两样东西在工作:
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。
阶段 2 · 备齐软件、账号、资料
软件
| 软件 | 装在哪 | 说明 |
|---|---|---|
| 本项目代码 | 服务器 | 已在 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(最新稳定版) | Mac | App 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 的 UDID | 40 位十六进制 | 必须和订单里登记的一致,换机要重新买或走 Gold/Platinum 换机。 |
| TikTok 账号 | 每台手机建议 1 个 | 必须已能在该手机上手动开播。自动点击只是代替你按按钮。 |
| 设备 ID 命名 | iphone-01 | 写进 configs/devices.yaml 和手机接入页。 |
| 服务器访问地址 | https://live.hugme2.com | 写进服务器 .env 的 PUBLIC_URL。程序本身听 127.0.0.1:8020 |
| DNS 子域名 必做 | live.hugme2.com → 67.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。
阶段 3 · 打通「服务器 → 手机 8100」(最容易卡死)
成功标准只有一句:在服务器上访问 http://手机地址:8100/status 能返回 JSON,而不是超时。
从下面三种方案里选一种,不要混用。
方案 A:服务器和手机在同一个 Wi-Fi(最快,适合先跑通)
- 手机和服务器都连同一个路由器(不要一个连 Wi-Fi、一个连访客网络)。
- 手机:设置 → WLAN → 点当前 Wi-Fi 右边的 ⓘ → 记下「IP 地址」,例如
192.168.1.101。 - 在路由器里把该手机改成「静态 IP / DHCP 绑定」,避免第二天 IP 变了。
- 电脑/服务器浏览器或命令行访问:
http://192.168.1.101:8100/status(WDA 装好后才有数据,现在先把 IP 记下来)。 configs/devices.yaml的wda_host就填这个局域网 IP。
方案 B:服务器在云上,手机在家里 —— 用 Tailscale(正式推荐)
- 去
https://tailscale.com注册,在服务器安装 Tailscale 并登录。 - 在每台 iPhone 安装 Tailscale,用同一个账号登录,打开 VPN。
- 在 Tailscale 管理后台看到手机的 100.x.x.x 地址。
wda_host填这个 100.x.x.x,端口仍是 8100。- 手机 Tailscale 保持连接,不要省电杀掉后台。
方案 C:云服务器 + 路由器端口映射(不装 VPN 时)
- 登录家里路由器「虚拟服务器 / 端口转发 / NAT」。
- 外网端口例如
18101→ 内网192.168.1.101:8100(第二台用 18102 → 第二台 8100,以此类推)。 - 手机必须是固定内网 IP。
wda_host填云服务器能访问的公网 IP,wda_port填 18101 这种外网端口。- 在云服务器安全组放行这些端口;家里如果是运营商大内网(没有公网 IP),方案 C 会失败,改用方案 B。
绝对不要填的地址
- 不要填
127.0.0.1(那是手机自己,服务器连的是自己)。 - 不要填手机设置里看到、但服务器根本路由不到的局域网 IP(典型:服务器在云上,你却填 192.168.x.x)。
- 不要依赖「中控电脑再转发一次」。
阶段 4 · 把本程序在服务器上跑起来 已完成
这一阶段已经做完
不插任何手机,下面这些已经可用:
- 服务:
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,见「实机与端口规划」。
- 打开 PowerShell,进入工程目录:
cd C:\Users\13267\Desktop\产品\24newtiktok\code\project
- 用记事本或编辑器打开
.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。 - Windows 防火墙放行 8000:Win + S 搜「允许应用通过防火墙」→ 高级设置 → 入站规则 → 新建 → 端口 → TCP 8000 → 允许。
- 启动服务(本机已有便携 Python,不必再装):
.\.python\tools\python.exe run.py
看到类似Uvicorn running on http://0.0.0.0:8000才算启动成功。窗口不要关。 - 电脑浏览器打开:
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 执行完毕。下面仅作对照,不要重复部署。
- SSH(端口 2222):
ssh -i "C:\Users\13267\.ssh\eris_67.216.204.137" -o IdentitiesOnly=yes -p 2222 root@67.216.204.137
- 代码放到
/opt/24newtiktok(不要覆盖/opt/eris、/opt/eris-TIKTOK、/root/tiktok-monitor)。Windows 便携目录.python不要上传。 - 用系统自带的 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
.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。- 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
- 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。 - 验证(已通过):
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/。
阶段 5 · 用 udidregistrations.com 把 WDA 装进 iPhone 下一步
先搞清楚:这个网站卖的不是「已经在跑的 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。按你手里有什么选一条:
- 订单里已经有 WDA.ipa 或「Install」链接:跳到 5.3,直接装。这是最常见、也最省事的情况。
- 只有证书,没有 IPA:向给你这个网站链接的人再要一份
WebDriverAgentRunner-Runner.ipa(未签名或已签名均可)。我们服务器要的是能在手机上监听 8100 的 WDA,不是随便一个 App。 - 不要去装该网站宣传的越狱工具。本项目只需要 WDA,越狱既不需要,也更容易把手机搞挂。
5.3 把 WDA 装到这台已经登记过 UDID 的 iPhone 上
只做下面三条路里的一条。UDID 必须是这台手机的,换机要重新买/走换机政策。
路 A:已经有「安装链接」(最快)
- 用 iPhone 自带 Safari(不要用微信内置浏览器)打开安装链接。
- 点 Install / 安装,等到主屏幕出现 WDA 图标(名字可能是 WebDriverAgent、WebDriverAgentRunner-Runner、或卖家改过的名字)。
路 B:Platinum,用官网推荐的在线签名(不用 Mac)
- 打开官网说明:sign-apps。
- 打开 IPA Signer,填入这台手机的 UDID,上传 WDA.ipa,点 Sign App。
- 签完后点 Install App;若是在电脑上操作,下载签好的 IPA,再发到 Diawi 生成链接,用手机 Safari 打开安装。
路 C:Silver / Gold,用 Mac 的 iOS App Signer(官网标准流程)
- 订单页点 Certificate & Provisioning Files,下载
.p12和.mobileprovision。 - 双击
.p12导入钥匙串,密码按官网默认123456(若邮件写了别的密码,用邮件的)。 - 下载并打开 iOS App Signer(Mac)。Input File 选 WDA.ipa。
- Signing Certificate 选刚导入的那张;Provisioning Profile 选「Choose Custom File」指向你的
.mobileprovision。 - 点 Start,得到签好的 IPA。
- 安装任选其一:把 IPA 丢到 Diawi,手机 Safari 打开链接安装;或用数据线 + Mac 上的 Apple Configurator,选设备 → Add → Apps → 选 IPA。
5.4 信任证书并启动 WDA(装上不等于在跑)
- iPhone:设置 → 通用 → VPN 与设备管理(有的系统叫「描述文件与设备管理」)→ 点刚装上的企业/开发者证书 → 信任。
- 若提示「未受信任的企业级开发者」,必须联网完成信任,否则一点图标就闪退。
- iOS 16 及以上若打不开:设置 → 隐私与安全性 → 打开「开发者模式」,重启后再确认一次。
- 回到桌面,点开 WDA 图标。有的版本会停在一个空白页或显示 IP,这是正常的,不要划掉。
- 设置 → 显示与亮度 → 自动锁定 → 永不。关掉低电量模式。插上充电。
- 记下手机 IP(设置 → WLAN → ⓘ),用电脑浏览器或命令访问:
http://手机IP:8100/status
成功会看到一段 JSON(里面常有ready或sessionId)。这就是服务器以后要打的地址。 - 把桌面上这个 App 的名字/包名记下来,填进
configs/devices.yaml的wda_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 的人来说,不必再走这条。
阶段 6 · 准备 TikTok 与手机系统
- 安装 TikTok(或抖音),用目标账号登录。
- 完全用手指走一遍开播:打开 App → 点直播 → 点开始直播 → 确认推流成功 → 再手动关播。这一步失败,自动化一定失败。
- 把开播路径上每一个按钮的屏幕文字记下来(中文或英文以你的界面为准),例如「直播」「Go LIVE」「开始直播」「结束」「结束直播」。
- 授权:相机、麦克风、本地网络(iOS 会问,WDA/TikTok 都可能要)。
- 通知不要把直播相关权限关死。勿给 TikTok 开「低电量限制后台」之类会杀进程的设置。
- 关掉会打断直播的:屏幕使用时间严格限制、突然的系统更新(设置里推迟)、自动亮度可关以免画面乱跳。
- 手机固定在支架上,镜头对好,开始充电。
阶段 7 · 让服务器接入这台手机
- 打开
code\project\configs\devices.yaml,按实机修改(不要留示例 IP192.168.1.101除非真的是它):devices: - id: iphone-01 alias: "账号A" account_id: "acct_001" model: "iPhone 13" wda_host: "这里填服务器能访问到的手机地址" wda_port: 8100 wda_bundle_id: "你在 Xcode 里实际签出来的 xctrunner 包名" app_bundle_id: "com.zhiliaoapp.musically" enabled: true方案 B 时wda_host填 Tailscale 的 100.x.x.x;方案 C 时端口改成外网映射端口。 - 可选:用手机 Safari 打开
https://live.hugme2.com/phone,填同样的设备 ID、WDA 地址、密钥,点「接入服务器」。yaml 和网页两种方式填一种即可,yaml 适合固定机位。 - 改完 yaml 后必须重启
run.py(关掉旧窗口再启动一次)。网页 /phone 接入则不必重启。 - 在服务器上做探活(Windows):
cd C:\Users\13267\Desktop\产品\24newtiktok\code\project .\.python\tools\python.exe scripts\smoke_test_wda.py --device-id iphone-01
成功会打印alive一类状态,并在data\screenshots\iphone-01\落下 PNG 截图。打开那张图,确认就是这台手机当前画面。 - 打开看板
https://live.hugme2.com/dashboard,设备应显示在线(服务器每约 10 秒自己探活,不需要电脑 Agent 心跳)。
阶段 8 · 校准开播 / 关播按钮
程序不会「看懂」你的直播间,它只按控件名字点。文件在:
- 开播:
code\project\configs\playbooks\start_live.yaml - 关播:
code\project\configs\playbooks\stop_live.yaml
当前默认开播会依次尝试这些字:直播 / LIVE / Go LIVE / 开始直播 / 进入直播,然后 开始直播 / Go LIVE / Start live / 开播。
- 看阶段 7 的截图,或看手机屏幕,核对按钮实际文字是否在上面的列表里。
- 若你的界面是别的语言或改版按钮(例如只有「视频」旁边一个直播图标、文字是 「Go LIVE」),把那几个字原样加进对应
names:列表,放在最前面。 - 关播同理,必须包含你结束直播时弹出的确认按钮文案。
- 改完 yaml 不必编译,但正在跑的一次任务不会自动重读中间状态;下一次开播/关播任务会用新文件。
- 若控件没有文字、只有图标:需要改用坐标点击。在 playbook 里加:
- action: tap_xy x: 390 y: 2400
坐标是屏幕像素,必须按你的机型试。先用截图估位置,失败就微调。不同分辨率不要共用一套坐标。
阶段 9 · 单机完整跑通(到这里才算「能跑」)
- 手机亮屏、WDA 仍在、TikTok 已登录、不要停在别的 App 强制更新页。
- 看板确认设备在线。默认注册后会有 00:00–24:00 节目单,
auto_live=true时服务器会自动下发开播。 - 若没有自动开播,用看板所在电脑执行(把密钥换成你的):
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 秒)。 - 盯着手机:应看到自动打开 TikTok → 点到直播 → 进入直播。失败时看板「服务器事件记录」会有
Wi-Fi 开播控制失败或未找到任一控件。 - 失败就回到阶段 8 改文案,或确认 WDA /status 是否还通。
- 成功开播后,再下发关播(或把节目单结束时间改到当前时间之前),确认能结束直播。
- 看
data\screenshots\iphone-01\是否持续有新图;看看板人数/状态(人数依赖后续截图识别,第一次以「真的在播」为准)。 - 人为点出一个警告弹窗(不要真去违规,可用测试文案出现在控件树时再验证),确认看板会弹出警告并写入记录。
阶段 10 · 做成 24 小时无人值守
- 供电:手机 24 小时插电。充电器接触良好。有条件上 UPS 给路由供电。
- 散热:手机不要叠在一起、不要捂在盒子里。发烫就加小风扇,否则会自动降低亮度甚至关机。
- 锁屏:自动锁定=永不。WDA 在锁屏后通常点不了 TikTok。
- WDA 保活:不要划掉 WDA Runner。系统更新、内存紧张、证书过期都会让它死。付费开发者证书按年续签;免费的 7 天必挂。
- 节目单:默认就是全天。需要分段时,用接口或改存储里的 playlist(设备注册后自动 00:00–24:00,约 45 分钟切一次内容,由
CONTENT_SWITCH_MINUTES控制)。 - 网络:手机 Wi-Fi 不要休眠。路由器关闭「无线定时关闭」。方案 B 时 Tailscale 禁止被 iOS 杀后台(可考虑锁定/屏幕常亮)。
- 服务器进程:Windows 上不要关那个
run.py窗口,电脑不能休眠(电源选项:从不休眠)。Linux 用阶段 4.2 的 systemd。 - 先灰度: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,空则只记到看板
阶段 11 · 多机扩容
- 第二台 iPhone 重复阶段 5~9(每台都要单独签一次 WDA,或同一开发者账号装到多台设备)。
- 在
devices.yaml增加第二段,id换成iphone-02,wda_host必须不同。 同一 IP 同一端口会被程序拒绝。 - 方案 C 时:每台手机映射不同的公网端口。
- 每台一个 TikTok 账号,不要多台挤同一个号。
- 重启服务或分别在
/phone接入。 - 看板应出现两行设备,各自在线、各自节目单。
阶段 12 · 告警与日常运维
- 看板每天至少看两次:在线数、是否在播、未确认警告。
- 日志文件:
code\project\logs\controller.log;事件也在看板下方。 - 截图:
code\project\data\screenshots\设备ID\。 - 警告关键词在
configs\rules.yaml的dialog_keywords。你的 TikTok 语言不是中/英时,把界面里的词加进去。 - 把
.env的ALERT_WEBHOOK_URL配到你现有的通知地址(若有),这样不用一直盯网页。 - 证书:udidregistrations 订单到期前续费;被吊销就到订单页下新证书,重新签装 WDA,再在手机上点开。
- TikTok 大版本更新后,按钮文案可能变,回到阶段 8 校准。
- 不要运行
scripts\wda_agent.py(已停用)。不要再插 USB 当日常方案。
附录 · 常见失败对照
| 你看到的现象 | 先查什么 | 怎么处理 |
|---|---|---|
浏览器打不开 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/dashboard 或 http://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 小时、告警、多机。