YT 下载中心 · 部署与交接文档
> 部署日期:2026-09-02 · 服务器:va(甲骨文 VPS,aarch64 / Ubuntu 22.04,root@va.485494.xyz:35134,私钥 C:\Users\rui\.ssh\va)
> 面板地址:https://yt.va.485494.xyz · 本地源码副本:D:\tools\yt_va_sync\server\
一、功能总览
| 模块 | 说明 |
|---|
| 视频任务 (video) | 迁移自本地 d:\dl\ytb\update\yt-rss-dl.py。RSS 驱动,YouTube 最高画质 (bestvideo+bestaudio→mp4)、全字幕转 srt,B站走直接链接模式。跳过 Shorts 与关键字命中。 |
| 音频任务 (audio) | 迁移自本地 d:\dl\ytb\audios\yt-rss-dl-audios.py。播客 RSS enclosure / YouTube 频道音频,ffmpeg loudnorm (-10 LUFS) 转码 MP3。xyzrank 小宇宙热榜改用纯 JSON API(无需浏览器)。 |
| Web 面板 | 登录鉴权(HMAC-SHA256 Cookie)、运行状态、日志查看、立即运行、Feeds 增删改(自动抓标题)、Cookies 在线更新、Bark 设置与测试、本部署文档页。 |
| Bark 通知 | Cookie 失效 / 需要登录 / 分辨率低于阈值 / Feed 解析失败 / 转码失败 / 任务崩溃 → 推送 https://bark.ihust.de/ba2HG5BN5saaYq5k6xfW27(fnos 自建 bark-server)。 |
| Windows 同步 | 本地 D:\tools\yt_va_sync\sync_local.py 定时拉取成品到 d:\dl\ytb\update\01_auto\ 与 d:\dl\ytb\audios\01_auto\,校验完整后删除 va 上的文件释放空间。 |
二、目录结构(va)
/opt/yt-rss-dl/
├── common.py # 共享库:配置/日志/锁/Bark/监控/feeds 管理
├── video_worker.py # 视频任务(yt-rss-video.timer 每30分钟)
├── audio_worker.py # 音频任务(yt-rss-audio.timer 每30分钟)
├── panel.py # Web 面板(yt-rss-panel.service,127.0.0.1:8210)
├── DEPLOY.md # 本文档(面板 /docs 页读取)
├── config.json # 全局配置(bark、质量阈值、关键字等)
├── auth.json # 面板账号(admin,SHA256 密码,0600)
├── bin/yt-dlp # 自更新二进制(每24h检查一次)
├── youtube_cookies.txt # YouTube cookies(0600,面板可更新)
├── bilibili_cookies.txt # B站 cookies(可选)
├── video/
│ ├── feeds.json # 视频订阅源(面板管理)
│ ├── downloaded.txt # yt-dlp 下载归档去重
│ ├── tmp/ # 下载中文件
│ └── sync/ # 成品暂存区(等 Windows 拉取,拉走即删)
└── audio/
├── feeds.json
├── downloaded.txt
├── raw/ # 原始音频(待转码)
├── tmp/ # 转码中
└── sync/ # MP3 成品暂存区
三、systemd 服务与定时器
| 单元 | 说明 |
|---|
yt-rss-video.service/.timer | 视频任务,OnCalendar *-*-* *:07/2:00(每2小时的第7分和第37分 ≈ 30分钟节奏) |
yt-rss-audio.service/.timer | 音频任务,同节奏(第17/47分,与视频错开) |
yt-rss-panel.service | 面板,Always 重启 |
bash
systemctl list-timers | grep yt-rss # 查看下次触发
systemctl start yt-rss-video # 手动立即运行
journalctl -u yt-rss-video -n 100 # 看服务级日志
tail -f /opt/yt-rss-dl/logs/video.log # 任务日志(轮转5MB×3)
防重入:单实例 flock(上一轮没跑完自动跳过本轮);单轮 100 分钟硬时限,到期后未处理的 feed 下轮继续 —— 保证 30 分钟定时器不会堆叠。
四、域名 / HTTPS
- DNS:
yt.va.485494.xyz → A 150.136.62.64(DNS-only,Cloudflare)
- Caddyfile 追加块:
yt.va.485494.xyz { reverse_proxy 127.0.0.1:8210; tls va@485494.xyz },Caddy 自动 ACME 证书
- 面板仅监听
127.0.0.1:8210,不直接暴露端口
五、登录凭据
- 账号
admin / 密码 Abcd1234hasjor(与 node-sync-hub 一致)
- 修改:改
auth.json 中 password 字段(SHA256 hex)后 systemctl restart yt-rss-panel
六、Cookie 维护
1. YouTube cookie 失效时手机会收到「⚠️ 视频任务 Cookie 异常」推送。
2. Windows 浏览器(登录 youtube.com 后)用 *Get cookies.txt LOCALLY* 扩展导出 Netscape 格式。
3. 打开面板 → Cookies → 粘贴 → 保存;或 scp 覆盖 /opt/yt-rss-dl/youtube_cookies.txt。
4. yt-dlp 每 24 小时自动 -U 自更新,是绕过 YouTube 风控的第一道防线。
七、质量保障机制
- 视频格式
bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio/best,merge 成 mp4。
- yt-dlp
after_move 打印 VADL_OK url=… height=…,监控器解析实际落盘分辨率,低于 quality_min_height(默认 720p,可在面板调)聚合推送。
--retries 10 --fragment-retries 10 + 归档去重 + --windows-filenames(文件名兼容 Windows 落盘)。
八、Windows 同步端
- 脚本:
D:\tools\yt_va_sync\sync_local.py(走 SFTP,私钥 C:\Users\rui\.ssh\va)
- 计划任务
Sync-YtDownloads:每天 10:30 / 22:30 运行(可改)
- 流程:列出 va
sync/ → 逐文件下载到本地 01_auto → 本地字节数 == 远端字节数 才删 va 端文件;失败文件下次重试
- 手动立即同步:
python D:\tools\yt_va_sync\sync_local.py
九、常见运维
bash
改订阅源关键字/新增 feed → 直接用面板
查 cookie 告警上下文
grep -iE 'sign in|cookies' /opt/yt-rss-dl/logs/video.log | tail
清理卡死的临时文件
ls -la /opt/yt-rss-dl/video/tmp/ /opt/yt-rss-dl/audio/{raw,tmp}/
磁盘水位
df -h / && du -sh /opt/yt-rss-dl/*/sync
十、数据流
YouTube/B站/播客 RSS ──▶ va: video_worker/audio_worker (yt-dlp + ffmpeg)
│ 成品落 /opt/yt-rss-dl/*/sync/
▼
Windows 计划任务 sync_local.py ──SFTP 拉取──▶ d:\dl\ytb\{update,audios}\01_auto\
│ 校验大小一致
▼
删除 va 端文件(释放空间)
告警链路:worker 日志 ──▶ RunMonitor ──▶ Bark(App)