部署日期: 2026-04-05 · 最后更新: 2026-04-05
| 组件 | 状态 | 说明 |
|---|---|---|
| Nginx (HTTPS) | ✓ 运行中 | secure_link 签名验证正常,SSL 证书有效至 2026-07-04 |
| R2 → 本地同步 (videos) | ⟳ 同步中 | ~6,300 / 57,145 文件 (176G / 1.48TB),预计还需 5-7 小时 |
| R2 → 本地同步 (previews) | ✓ 完成 | 57,144 / 57,144 文件 (14GB) |
| R2 → 本地同步 (thumbs) | ⟳ 同步中 | ~43,400 / 57,144 文件 (1.4GB / 1.6GB),即将完成 |
| videoop Pipeline | ⏸ 待启动 | 代码和依赖已就绪,等待视频同步完成后启动 |
| Cloudflare Worker | ✓ 已激活 | VIP_SERVER_URL 已指向 vip.mhana.top |
| VIP 测试用户 | ✓ 已配置 | admin (user-1) 和 boy (user-2) 已设为 VIP |
| 旧服务器 videoop | ⚡ 注意 | 仍在旧服务器��行,迁移完成前不要停止 |
优先级: 高 · 这是当前唯一的阻塞项
视频文件是最大的同步任务(约 1.48TB),预计 2026-04-05 晚间或 04-06 凌晨完成。
# 检查同步进��
ssh -p 14028 root@137.175.4.97
# 文件数量
ls /data/videos/videos/ | wc -l # 目标: 57145
ls /data/videos/thumbs/ | wc -l # 目标: 57144
# 磁盘占用
du -sh /data/videos/*/
# rclone 进程是否还在
ps aux | grep 'rclone sync' | grep -v grep
# 实时日志
tail -f /root/rclone-videos.log
ls /data/videos/videos/ | wc -l 显示 57145ps aux | grep rclone 无结果(进程已退出)/root/rclone-videos.log 末尾出现完成统计信息
优先级: 高 · 确保新密码已妥善保存
初始密码(来自服务商邮件的 MDLNIslhdo4955)已被替换为随机强密码。
建议后续操作:
# 在旧服务器上
pm2 stop videoop # 或对应的停止方式
# 确认 pipeline 状态变为 stopped# 在新服��器上,快速增量同步(覆盖同步期间旧 pipeline 新增的文件)
rclone sync r2:video-storage/videos/ /data/videos/videos/ \
--transfers 16 --checkers 32 --fast-list --progress
rclone sync r2:video-storage/previews/ /data/videos/previews/ \
--transfers 16 --checkers 32 --fast-list --progress
rclone sync r2:video-storage/thumbs/ /data/videos/thumbs/ \
--transfers 16 --checkers 32 --fast-list --progress
这次增量同步应该很快(只有同步期间新增的文件)# 在新服务器上
pm2 start /opt/videoop/ecosystem.config.js
pm2 save
pm2 logs videoop # 观察是否正常运行pm2 status # 确认 status 为 online,restart 次数不异常
pm2 logs videoop # 查看是否有报错
free -h # 确认内存占用正常(CLIP 模型约 2GB)# 查看 Pipeline 日志中最新处理的 hash
tail -20 /opt/videoop/pipeline.log | grep "VIP local copy"
# 确���本地文件存在
ls -lh /data/videos/videos/{最新hash}.dat
ls -lh /data/videos/thumbs/{最新hash}.jpg
ls -lh /data/videos/previews/{最新hash}.webpdf -h / # 当前 4.3TB 可用,观察日增长量
按当前 57K 视频 ≈ 1.5TB,每日新增约 100-300 视频,约 3-8GB/天,4TB 可用约 1.5 年| 事项 | 时间节点 | 操作 |
|---|---|---|
| 确认 rclone 同步完成 | ~4月6日凌晨 | ls /data/videos/videos/ | wc -l = 57145 |
| 迁移 Pipeline(旧停新启) | 同步完成后 | 旧: 停 → 增量同步 → 新: 启动 |
| 前端 VIP 线路实测 | Pipeline 迁移后 | boy 账号 → Profile → 开启 VIP → 刷视频 |
| SSH 密钥登录 | 一周内 | 配置密钥 → 禁用密码登录 |
| 事项 | 说明 |
|---|---|
| 配置防火墙 (ufw) | 仅开放 SSH(14028) + HTTP(80) + HTTPS(443) |
| 设置磁盘告警 | 当 / 使用率超 85% 时邮件通知 |
| PM2 日志轮转 | pm2 install pm2-logrotate,避免日志撑满磁盘 |
| Nginx 访问日志 | 开启 access_log 并配置 logrotate,用于分析 VIP 线路使用情况 |
| 定时监控脚本 | cron 定时检查 Nginx / PM2 / 磁盘 / SSL 状态,异常告警 |
| 事项 | 说明 |
|---|---|
| Nginx worker 进程数优化 | 当前使用默认 auto(48 核 = 48 worker),实际服务静态文件 4-8 个即可 |
| Swap 优化 | 当前 8GB swap,可调整 swappiness 降低 swap 使用 |
| 备用 IP 利用 | 服务器有第二 IP 137.175.4.98,可用于备用域名或管理入口 |
| VIP 使用统计面板 | 分析 VIP 用户的使用模式,优化配额策略 |
以下是从旧服务器迁移到新服务器的完整操作顺序,请严格按顺序执行:
# 在新服务器上
ls /data/videos/videos/ | wc -l # 必须 = 57145
ps aux | grep rclone # 应无结果
# 在旧服务器上
pm2 stop videoop
# 等待当前处理中的视频完成(观察日志)
# 在新服务器上(这次很快,只有少量新增)
rclone sync r2:video-storage/videos/ /data/videos/videos/ \
--transfers 16 --fast-list --progress
rclone sync r2:video-storage/previews/ /data/videos/previews/ \
--transfers 16 --fast-list --progress
rclone sync r2:video-storage/thumbs/ /data/videos/thumbs/ \
--transfers 16 --fast-list --progress
# 在新服务器上
pm2 start /opt/videoop/ecosystem.config.js
pm2 save
pm2 logs videoop # 观察��志,确认正常启动
# 1. Admin 面板:发送 start 命令,观察响应
# 2. 等待一个视频被处理完成
# 3. 检查新视频是否同时存在于 R2 和本地:
ls /data/videos/videos/{新hash}.dat # 本地
rclone ls r2:video-storage/videos/{新hash}.dat # R2
# 4. 测试 VIP 线路能否访问新处理的视频
# 用 Python 签名脚本生成 URL 并 curl 测试
# 用 VIP 用户登录前端
# Profile → 开启 VIP 线路
# 刷视频 → 验证视频加载速度
# 检查缩略图和预览是否正常
# 检查配额计时是否正常工作
# 在旧服务器上(确认一切正常后��执行)
pm2 delete videoop
# 可选:清理 videoop 目录以释��空间
# 文件数
ls /data/videos/videos/ | wc -l
ls /data/videos/thumbs/ | wc -l
# 磁盘占用
du -sh /data/videos/*/
# rclone 进程
ps aux | grep rclone
# 实时日志
tail -f /root/rclone-videos.log
# PM2 进程状态
pm2 status
pm2 logs videoop --lines 30
# 最新处理记录
grep "VIP local copy" \
/opt/videoop/pipeline.log | tail -5
# 资源占用
pm2 monit
# 服务状态
systemctl status nginx
ss -tlnp | grep nginx
# 健康检查
curl -s https://vip.mhana.top/health
# 错误日志
tail -20 /var/log/nginx/error.log
# SSL 证书到期
certbot certificates
# 磁盘
df -h /
# 内存
free -h
# CPU / 负载
uptime
htop
# 连接数
ss -s
| 凭证 | 位置 | 用途 |
|---|---|---|
| SSH root 密码 | 你自己保管 | 服务器远程管理 |
| VIP HMAC Secret | Nginx 配置 + wrangler.toml | VIP URL 签名验证 |
| R2 Access Key | /opt/videoop/.env + /root/.config/rclone/rclone.conf | R2 存储读写 |
| Telegram API 凭证 | /opt/videoop/.env | 视频采集 |
| Workers Admin JWT | /opt/videoop/.env | Pipeline → Worker API 通信 |
| Cloudflare API Token | videoop/CLOUDFLARE_CREDENTIALS.md (源码) | wrangler deploy |
| SSL 证书 | /etc/letsencrypt/live/vip.mhana.top/ | HTTPS,自动续期 |
| 限制 | 说明 | 应对 |
|---|---|---|
| 单点故障 | VIP 服务器宕机时 VIP 线路���可用 | 用户前端可手动关闭 VIP 线路,回退到普通 CF 线路;普通线路不受影响 |
| 磁盘空间有限 | 4.5TB 总容量,当前视频约 1.5TB | 按日增 5-8GB 估算,可用约 1-1.5 年;需要定期监控 |
| CLIP 模型内存 | ViT-B-32 加载约需 2GB 内存 | 32GB 内存足够,但注意不要同时运行太多内存密集任务 |
| 签名 URL 有效期 | 默认 1 小时 | 用户长时间挂机后 URL 会过期,刷新 feed 即可获取新签名 |
| 多 Tab 计时叠加 | 每个标签页独立计时 | 这是设计如此,Profile 页面有提示 |
| Telegram Session | videoop_session.session 文件需要与旧服务器一致 | 已随代码一起传输;若出现认证问题,需重新运行 auth_telegram.py |