# 2026-02-25

## Gitea 迁移 Tarek → netcup ✅
- 从 155.103.66.237(Tarek) 迁移到 159.195.41.188(netcup)
- Docker 部署: gitea/gitea:latest, 端口 3001→3000, 2222→22
- 数据打包 443K，恢复后 app.ini 域名改为 mjjtop.com
- Nginx 配好短链(/oc /dd /ss /bbr /bk /bak) + Gitea 反代
- certbot HTTPS 签发成功，到期 2026-05-25，自动续期
- 旧服 Gitea 容器+数据卷+镜像+Nginx配置全部清理
- 测试机(31.22.111.168)验证5个短链全部正常

## netcup 备份 → OVH ✅
- vps-snapshot 配置: REMOTE_IP=145.239.143.92, /data/backup/netcup/
- 踩坑: 手写配置文件用了 REMOTE_HOST，脚本实际读 REMOTE_IP
- 快照 1.7G (12G原始数据压缩)，120MB/s 同步到 OVH
- Cron: 0 3 * * * 每天自动备份
- TG 通知已配置

## Jellyseerr 求片系统部署 (OVH) ✅
- 地址: https://req.088520.xyz | 标题: 顶尖求片
- Docker: jellyseerr(:5055) + radarr(:7878) + sonarr(:8989) + prowlarr(:9696)
- compose: /data/docker-compose-arr.yml
- Caddy 反代 req.088520.xyz → jellyseerr:5055 (自动HTTPS)
- 对接 Emby(emby:8096, urlBase=/emby) + qB(qbittorrent:8080)
- Radarr root: /movies | Sonarr root: /tv
- 管理员: admin (Emby账号登录)
- 默认配额: 每用户每月10部电影+10部剧集
- 中文界面, 发现区域CN, 原始语言zh
- API keys: Prowlarr=306e863ef5fc41979f6e701a3f659526 | Radarr=13312d6d56ed48f78ba692204390b67c | Sonarr=8432ee6ca3174279858fbe839541b1eb
- 踩坑: Emby API 需要 urlBase=/emby 才能连通; hostname 参数是 IP 不含协议
- 待完成: Prowlarr 配 M-Team 索引器 → 已完成 ✅

## M-Team 索引器对接 Prowlarr ✅
- M-Team API Token: 019c9278-390d-7583-8ae8-4451ef5ed57c (从浏览器CDP操作创建+clipboard拦截获取)
- Prowlarr 添加 M-Team-TP 索引器, baseUrl=https://api.m-team.io
- Prowlarr → Radarr(fullSync) + Sonarr(fullSync) 应用关联完成
- Radarr/Sonarr 均已收到 "M-Team (Prowlarr)" 索引器
- 全链路: Jellyseerr求片 → Radarr/Sonarr → Prowlarr/M-Team搜索 → qB下载 → Emby入库
- 踩坑: M-Team API 需要 HMAC-SHA1 签名+JWT; JWT 会过期; 页面令牌脱敏需用clipboard拦截拿完整值

## 脚本修改约定
- 以后改脚本以 Mac 本地为源头，改完 push Gitea + GitHub
- 不在服务器上直接改

## 求片系统全链路打通 ✅
- 自动批准: 用户权限改为160(REQUEST+AUTO_APPROVE)，求片直接自动通过
- 已有用户(muzichen/sistercon/xmg0828)权限都已更新
- 默认quality profile: Any(优先最高质量)
- 首批下载: X(恐怖X档案)28.4GB已完成入库 | The Shadow's Edge 37.1GB下载中

## Emby 四库分类 ✅
- 电影(/data/media/电影) → Radarr /movies
- 电视剧(/data/media/电视剧) → Sonarr /tvshows
- 动漫(/data/media/动漫) → Sonarr /anime (Jellyseerr默认)
- 动画(/data/media/动画) → /tv (儿童,手动管理,求片不进此库)
- Emby库: 电影(id:5) | 电视剧(id:1878) | 动漫(id:1887) | 动画(id:3)
- Jellyseerr配了两个Sonarr: 默认→/anime(动漫) | Sonarr-电视剧→/tvshows
- 已有动漫(Chained Soldier/Fights Break Sphere/Man's Inhumanity)从动画库移到动漫库

## 刮削完成 ✅
- OVH连不上TMDB，封面需从Mac下载再base64上传(OVH直接curl TMDB只得2KB错误页)
- 魔都精兵的奴隶(Tmdb:139060) | 斗破苍穹(Tmdb:79481) | 人间非人(Tmdb:308085) — 中文名+简介+封面
- 恐怖X档案 | 庇护之地(Shelter) | 疯狂动物城 | 疯狂动物城2 — 已刮削
- 踩坑: Emby POST Items/{id} 写Name时如果Name变null会导致后续更新报"Value cannot be null"，需带ForcedSortName一起写
- HEARTBEAT.md已加自动刮削任务: 每次心跳检查缺元数据的新片，从Mac端web_fetch TMDB→base64上传封面

## 人间非人归类修正 ✅
- 人间非人是电视剧不是动漫，从动漫库移到电视剧库
- Sonarr路径: /anime → /tvshows
- 移库后Emby重建item(ID变了: 系列1915, E17→1917, E20→1918)，需重新刮削
- 目前只有2集(E17/E20)，M-Team资源不全，Sonarr持续监控

## 动漫集级刮削 ✅
- 19集全部补上中文集名+简介+缩略图(ffmpeg 40%位置截取480p)
- Emby更新Episode需先GET完整item再POST回去(直接POST少字段会400)
- 魔都精兵的奴隶: S1×9集 + S2×7集 = 16集
- 斗破苍穹: 仅S5E105(1集/271集)，M-Team资源极少，Sonarr持续监控
- 人间非人: E17+E20(2集/21集)

## 封面上传踩坑
- OVH服务器curl TMDB图片只得2KB错误页(连不上TMDB)
- 正确流程: Mac下载封面 → base64 -i → pipe到SSH → curl POST Emby
- macOS base64命令: `base64 -i file`(不是`base64 file`)

## oc-monitor 迁移 Tarek → netcup ✅
- 从 155.103.66.237:3800 迁移到 159.195.41.188:3800
- Docker: oc-monitor:latest, 镜像66MB+数据5MB+源码1.2MB
- Nginx反代 + certbot HTTPS: https://openclaw.mjjvps.com (到期2026-05-26)
- 5个节点agent全部更新上报地址: Mac mini/HDY/Tarek/N100/netcup
- N100是OpenWrt，agent跑在Docker容器里的Node.js版(oc-monitor-agent.js)
- Ciallo(155.103.67.87)节点已从面板删除
- Tarek旧容器+数据卷+镜像已清理
- Auth Token: D2DE595D2F9A6F12926212B326DA68BF
- 踩坑: Nginx WebSocket配置不能写死Connection "upgrade"，需用map变量

## sub-bot 新部署 netcup ✅
- Bot Token: 8756357783:AAHKrQE7nuFxAbdyCW38X2wBu2tmVNrBBuw (来自155.103.67.87旧OpenClaw)
- 部署: /opt/sub-bot, systemd sub-bot.service, python3
- 域名: https://substore.mjjtop.com (certbot到期2026-05-26)
- HTTP订阅: https://substore.mjjtop.com/ead79f4a096586851100c5a39c2983b8/download?target=ClashMeta
- SUB_SECRET: ead79f4a096586851100c5a39c2983b8
- 管理员: 165067365
- 这是新装的独立实例，xianyu上的旧sub-bot(@mjjvps_bot)不动

## 155.103.67.87 (Ciallo) 状态
- SSH连接超时，机器可能没开
- 上面的OpenClaw待卸载(等机器恢复后处理)

## Tarek (155.103.66.237) 清理为测试机 ✅
- OpenClaw/Nginx/oc-monitor-agent/DStatus/certbot 全部卸载
- Docker容器和镜像清空(回收440MB)
- 只剩基础系统+Docker引擎+fail2ban
- 19G磁盘用9.5G，2G内存用389MB
- 以后作为测试机使用

## Ciallo (155.103.67.87) 清理 ✅
- OpenClaw/oc-monitor-agent/DStatus/哪吒/playwright 全部卸载
- npm清理703 packages，crontab清空
- 只剩基础系统+Docker引擎
- 20G磁盘用3.5G，2G内存用372MB
- oc-monitor面板已删除Ciallo和Tarek节点

## 财经快讯机器人 news-bot ✅
- Bot: @bookooobot_bot | Token: 8339960949:AAEbzWuGC81Ew4FN9Ple11J3QCwYooi3fXY
- 部署: netcup /opt/news-bot, systemd news-bot.service
- Mac源码: ~/.openclaw/workspace/projects/news-bot/
- 7个信息源: 金十数据/华尔街见闻/36氪/新浪财经/Google News/Finviz/TechCrunch
- 国际源英文自动翻译中文(Google Translate免费API)
- 新闻标题带可点击链接跳转原文
- AI评分过滤: >=8秒发, 6-7每30分钟汇总, <6不推
- 定时总结: 08:00/11:30/20:00
- 交互命令: /start /news /summary /sources /keywords /settings
- 管理员: 165067365

## NodeSeek 签到
- 朦胧: +5鸡腿，累计428
- VP404: 今天已签过，重复被拦截

## News Bot 链接功能 ✅
- 所有7个源新闻标题加了可点击URL跳转原文
- 金十: flash_detail/{id}.html | 华尔街见闻: uri字段 | 36氪: 构造/newsflashes/{id}
- 新浪: url字段 | Google/TechCrunch: RSS link标签 | Finviz: HTML href提取
- parse_mode 全部从 Markdown 改为 HTML（支持<a>标签）
- 已部署到 netcup

## Sub-Bot 分组管理功能 ✅
- 新增订阅分组功能，561行→812行(+260行)
- 数据结构: sub_groups[] 每组有 id/name/secret/nodes
- 功能: 创建/删除/重命名分组、添加节点到分组、独立订阅链接、重置链接(旧链接失效)
- HTTP端点: /{group_secret}/download 自动匹配分组
- 三处同步: netcup(159.195.41.188) + xianyu(185.218.6.38) + Gitea(321bb43)
- Mac备份: ~/.openclaw/workspace/scripts/gitea-backup/sub-bot/bot.py

## Sub-Bot 后续修复 ✅
- 检测改为只更新状态不删除节点(auto_cleanup不再自动删)
- UI重构: 主菜单3入口(默认节点池/分组管理/全部检测)
- 返回按钮修复: menu_back→sg_back 避免pattern冲突
- 分组检测+删除节点功能
- 默认池显示订阅链接+重置按钮(get_default_secret()从data.json读)
- auto_cleanup完全移除，只保留手动检测
- 三态检测: 🟢通/🟡未知/🔴不通 + IEPL专线提示
- 最终同步: Gitea ea233c3 + netcup + xianyu + Mac备份

## News-Bot 重复推送修复 ✅
- batch_items 立即 mark_pushed（不等到推送时）
- _batch_queue 加 existing_ids 去重
- 清空数据重启

## VPS-Reminder 恢复 ✅
- 从 HDY 备份(/data/backup/hdy/ on OVH)提取 vps-reminder 代码
- Bot token: 8300905342:AAH3Q78FuR5Exrw2zWYJHFRyVeLlws3xnww
- 部署到 netcup /opt/vps-reminder/，systemd 启动
- 10台VPS数据完整恢复，每天09:00自动检查到期
- 改进续费功能: 新增自动续期选项(根据周期自动算下一到期日) + 手动输入日期
- 依赖: python-telegram-bot, python-dotenv, python-dateutil
- Mac备份: ~/.openclaw/workspace/scripts/gitea-backup/vps-reminder/

## Stock-Monitor (HDY备份)
- 从 HDY 备份发现 /opt/tg-stock-monitor/ (商品库存监控Bot)
- 暂未部署，待顶尖决定是否需要

## EvoMap.ai 账号查看
- 账号: mf0@msn.com / @a110110
- 4个节点全部Offline: node_01885560ab27(OC2) / node_32e35d004633(OC3) / node_b59cc237cee2(HDY) / node_904d2652b8e2(Mac mini)
- Published Assets: 0 | Credits: 0 | 每节点 Reputation 50
- My Questions: 1 (之前提过一个问题)
- 当时注册了节点但没有成功发布Capsule/Gene

## OpenClaw 更新
- 2026.2.21-2 → 2026.2.24

## Koipy 迁移 HK优→netcup (失败，已回滚)
- 157.254.53.55 → 159.195.41.188 迁移尝试
- 错误1: 直接 docker pull latest 而不是用 koipy-linux-amd64.zip 覆盖二进制
- 错误2: sub-store 端口改成3002(因Gitea占3001)，但外网访问不通
- 最终: netcup上Koipy+sub-store全部删除清理，迁移取消
- ⚠️ 教训: Koipy正确部署方式是 docker create基础镜像 → unzip koipy-linux-amd64.zip → docker cp覆盖 koipy/pyrogram/resources → 补i18n

## Koipy 部署 155.103.66.237 (Tarek测试机)
- 用户提供 builtin.rar + koipy-linux-amd64.zip + config.yaml + sub-store-data
- 解压builtin.rar(需装unrar)，unzip koipy-linux-amd64.zip
- docker create koipy-app(host网络) → docker cp覆盖binary/pyrogram/resources → 补i18n
- sub-store: xream/sub-store, 端口映射 3001:3001 + 3000:3000
- ⚠️ sub-store v2.21.27: 后端3000 前端3001，Koipy config backend应指向3000不是3001
- config.yaml里 backend 已改为 http://172.17.0.1:3000/...
- i18n: 从173.249.199.16(朋友机)拷贝zh-CN.yml覆盖(自定义菜单文字:流媒体解锁/拓扑测试/点我开始顶尖等)
- Bot: @speedbot01_bot (7905907097)
- 173.249.199.16是朋友的Koipy，只看不改，做参考用

## ⚠️ Koipy 部署教训
- koipy-linux-amd64.zip 是正确的更新包，不是docker save/load镜像
- sub-store新版后端端口3000，前端3001，别搞混
- i18n文件在 resources/localization/zh-CN.yml，需拷贝到 resources/i18n/zh-CN.yml
- 155.103.66.237 SSH用密码(fJ7#vP9s@tL2qX!d)，koipy_key连不上
- config.yaml最终用157.254.53.55的原始配置覆盖（不要乱改别人的后端节点配置）

## netcup (159.195.41.188) 服务清单
Docker:
- Gitea (gitea/gitea:latest, 端口3001→3000, SSH 2222→22)
- oc-monitor (oc-monitor:latest, 端口3800)

Systemd服务:
- openclaw.service — OpenClaw Gateway (TG bot 8390351834)
- news-bot.service — 财经快讯机器人 (@bookooobot_bot)
- sub-bot.service — 订阅管理 Bot
- vps-reminder.service — VPS到期提醒 Bot
- oc-monitor-agent.service — OC Monitor Agent
- nginx.service — 反代(mjjtop.com) + 短链
- docker.service
- fail2ban.service

## news-bot 免打扰功能
- 设置菜单(/settings)新增免打扰按钮
- 默认21:00-8:30，可调整开始/结束时间
- 免打扰=静音通知(disable_notification)，不是停止推送
- TG streaming已改off，解决持续"正在输入"问题
