Files
server-ops/CHANGELOG.md

251 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CHANGELOG - 服务器运维日志
## v1.0.0 (2026-06-14)
### Added
- 初始化仓库README、CHANGELOG、DECISION_LOG
- 每日运维总结机制确立
- 首份总结2026-06-14 服务器功能变动总结
## v1.1.0 (2026-06-15)
### Added
- — Cookie session auth proxy 完整源码和 systemd 服务文件
- — Python HTTPServerbcrypt 密码验证HMAC-SHA256 token 签名
- — systemd 服务port 9002开机自启
### Changed
- **安全认证升级**Caddy basicauth → auth_proxy Cookie session
- 所有保护服务gitea/dashboard/books/nav/brief/todo改为走 auth_proxy:9002
- 新增 auth.xybkwd.top 子域作为登录入口
- Session cookie: 7天过期HttpOnlySameSite=LaxDomain=.xybkwd.top
- 密码验证不变bcrypttoken 签名防篡改HMAC-SHA256
- — 去掉所有 basicauth改为 reverse_proxy localhost:9002
- 服务清单更新books (Calibre-Web) 状态同步
### Fixed
- 移动端重复登录问题basicauth 每 ~1 小时要求重新输入密码
- Cookie 跨子域失效:缺 Domain=.xybkwd.top 导致各子域不共享 cookie
- Set-Cookie 值带多余引号:浏览器拒绝该 cookie
### Security
- 认证安全性不变bcrypt + HMAC-SHA256无明文密码传输
- 公开服务blog/vaultwarden/memos不经过 auth_proxy不受影响
## v1.1.0 (2026-06-15)
### Added
- — Cookie session auth proxy 完整源码和 systemd 服务文件
- — Python HTTPServerbcrypt 密码验证HMAC-SHA256 token 签名
- — systemd 服务port 9002开机自启
### Changed
- **安全认证升级**Caddy basicauth → auth_proxy Cookie session
- 所有保护服务gitea/dashboard/books/nav/brief/todo改为走 auth_proxy:9002
- 新增 auth.xybkwd.top 子域作为登录入口
- Session cookie: 7天过期HttpOnlySameSite=LaxDomain=.xybkwd.top
- 密码验证不变bcrypttoken 签名防篡改HMAC-SHA256
- — 去掉所有 basicauth改为 reverse_proxy localhost:9002
- 服务清单更新books (Calibre-Web) 状态同步
### Fixed
- 移动端重复登录问题basicauth 每 ~1 小时要求重新输入密码
- Cookie 跨子域失效:缺 Domain=.xybkwd.top 导致各子域不共享 cookie
- Set-Cookie 值带多余引号:浏览器拒绝该 cookie
### Security
- 认证安全性不变bcrypt + HMAC-SHA256无明文密码传输
- 公开服务blog/vaultwarden/memos不经过 auth_proxy不受影响
## v1.2.0 (2026-06-15) — rollback
### Removed
- **auth_proxy 对主服务的拦截**:恢复 Caddy 直接反向代理到后端
- gitea → localhost:3000, dashboard → localhost:9000, books → localhost:8083
- nav/brief → file_server静态文件nav/api/* → todo 9001
- auth.xybkwd.top 仍保留 auth_proxy:9002 作为登录门户(不影响其他服务)
### Added
- 认证方案待修复Caddy v2.11 basic_auth bcrypt hash 格式需要重新调试
### Lesson Learned (Critical)
- **🔴 铁律:所有配置变更必须先 commit 到 git再部署到生产环境**
- 本次事故的根因:直接修改 /etc/caddy/Caddyfile 后未及时 git commit
导致回滚时需要从 git 历史中找回正确版本commit 6c35f31
- git 历史在此次事故中挽救了服务:回滚前险些无法恢复
## 2026-06-16
### 要闻流水线改造 v0.3
**改动:**
1. fetch 脚本时效过滤 — fetch_news.py (48h) / fetch_policy.py (72h) / fetch_research.py (72h)
2. 新增 archive_daily_brief.py — 每日要闻归档到 daily-brief 仓库(含跨日去重)
3. 新增 cn_merge.py — 合并本地国内新闻到流水线
4. 所有新闻条目增加 [MM-DD] 日期标记(支持多种时间格式解析)
5. crontab 新增22:40 归档 / 05 3,9,15,21 cn_merge
**架构变更:**
- 新增本地抓取层WorkBuddy 本地运行 local_fetch_cn.py通过 SCP 推送到东京
- 数据源扩展新华网3路+ 微博热搜,约 113 条/轮
- 浏览器展示和归档共享同一数据源news_summary.json
**涉及文件:**
- 东京 ~/scripts/: fetch_news.py, fetch_policy.py, fetch_research.py, cn_merge.py(新)
- 东京 ~/daily-brief/: archive_daily_brief.py(新), archive/2026/06/2026-06-16.md
- 本地 Claw/: local_fetch_cn.py(新), local_fetch_daemon.py(新), start_cn_fetch.bat(新)
### 要闻流水线改造 v0.4 — 扩源 + RAW分层 + 精选器
**改动:**
1. fetch_news.py v2.0 — 新增 5 个国际源BBC, The Guardian, CNBC, FT中文, Bloomberg12源/轮约342条
2. local_fetch_cn.py v2.0 — 清理失效源(人民网/观察者网/腾讯/澎湃保留新华网3路+微博
3. cn_merge.py v2.0 — 分两路输出全量→news_raw.json+RAW ndjson精选→news.json送AI摘要
4. 新增 selector.py — 多策略评分精选器(来源权重+时效+多样性16主题分类
5. 行情数据采集 — 新增 fetch_market_daily.py31品种日线OHLCVdaily-brief/market_data/
6. RAW存档机制 — 所有新闻全量写入 daily-brief/raw/YYYY-MM-DD.ndjson逐行JSON0 token
**架构变更:**
- 抓取层从~200条/轮扩张至~500条/轮RAW全量存档
- AI摘要层从全量处理改为精选80条token成本不变
- 新增行情数据采集线(事件线+价格线双轨归档)
**crontab 更新:**
- 50 23 * * * — 行情日线采集(新增)
- 10 0 * * * — RAW存档推送到Gitea新增
- 05 3,9,15,21 — cn_merge v2含selector精选更新
**涉及文件:**
- 东京 ~/scripts/: fetch_news.py, cn_merge.py (更新), selector.py (新)
- 东京 ~/daily-brief/: fetch_market_daily.py (新), raw/ (新目录)
- 本地 Claw/: local_fetch_cn.py (更新)
### Hotfix 2026-06-16 — 新华网RSS下线 + URL日期提取防线
**问题:** 新华网 RSS3路返回300条2022年12月旧闻且 published 字段全为空绕过48h时效过滤导致浏览页面显示4年前旧闻。
**修复:**
1. 全面移除新华网 RSS — xinhuanet.com 和 news.cn 域名全线瘫痪返回2022年旧闻
2. 清理新浪新闻 RSS — 返回2018年旧闻"光纤之父"高锟离世...),一并移除
3. 新增 URL 日期提取防线 — `parse_published_time` 增加从 link URL 提取日期(`/YYYY-MM/DD/`),作为 published 为空时的第二道防线
4. 清洗 RAW 存档 — 从 ndjson 中移除 1186 条新华网旧数据
5. 清洗 news.json — cn_merge 重新精选确认0条旧闻
**当前中文源:** 36氪东京RSS+ FT中文东京RSS+ 微博热搜(本地页面抓取)
**国内RSS生态现状** 全线死亡。新华网/新浪/人民/澎湃/凤凰/环球/第一财经/界面 — 均无可用RSS。
### 中文新闻源改造 v3.0 — 全面非RSS抓取2026-06-16 17:30
**背景:** 国内主流媒体 RSS 已全线死亡新华网返回2022旧闻、新浪返回2018旧闻
需改用非RSS方式获取中文新闻。
**改造内容:**
1. 本地 local_fetch_cn.py 全面重写为 v3.0
2. 移除所有 RSS 源均失效改为5路非RSS抓取
**新增中文源5路**
| 源 | 方式 | 条数/轮 |
|---|------|-------:|
| 新浪新闻API | JSON API (7频道) | 40 |
| 新华网频道页 | 静态HTML解析 | 61 |
| 人民网栏目页 | 静态HTML解析 | 31 |
| 观察者网 | 静态HTML解析 | 50 |
| 微博热搜 | API JSON | 30 |
| **合计** | | **~207** |
**技术要点:**
- 新浪API返回Unix时间戳 → 精确发布时间
- 新华网/人民网/观察者网从URL提取日期 → 48h时效过滤
- 观察到三种URL日期格式YYYYMMDD、YYYY_MM_DD、YYYY/MMDD
- extract_date_from_url() 统一解析所有格式
**国际源(东京 fetch_news.py 12源**
NYT, CNN, Al Jazeera, TechCrunch, BBC, The Guardian, CNBC, Bloomberg
+ 36氪, FT中文中文
每轮 ~300条
**中英文源合并后每轮:~500条 → RAW存档 → 精选80条**
### Hotfix Batch 2026-06-16-2 — 修复三项数据问题
#### ① 新浪头条published为空修复
- **问题**新浪API返回的`ctime`是字符串`"1781604459"`而非数字,代码中`isinstance(ctime, (int, float))`判定False
`published`字段全为空 → selector无时效加分 → 10条新浪头条全部落选中国热点只有新华网
- **修复**`local_fetch_cn.py``int(ctime)`转换字符串时间戳
- **效果**:新浪-头条10条全部入选精选池中国热点恢复正常
#### ② 新闻来源被AI改写修复
- **问题**summarize_news.py调用DeepSeek后AI把`新浪-头条`改写为`新浪财经`
- **修复**:新增`build_source_lookup()` + `restore_source()`AI输出后按标题匹配恢复原始来源名
- **效果**:中国热点中新浪头条正确显示为"新浪-头条",而非"新浪财经"
#### ③ 微信读书阅读时长单位错误修复
- **问题**WeRead API返回的`readingTime`单位是秒代码当作分钟处理15分钟读书记录显示为"15小时"
- **修复**`sync.py``read_seconds // 60`转分钟
- **效果**GitHub入门与实践30小时24分钟→30分钟Python编程471小时→7小时51分钟
#### ④ 时间显示格式修复
- **问题**:今日新闻在摘要中只显示`HH:MM`无日期前缀
- **修复**`summarize_news.py` → 始终输出`MM-DD HH:MM`格式
- **效果**:所有条目统一显示`06-16 10:07`,跨日可辨
#### ⑤ selector权重优化
- **问题**selector.py缺少新增非RSS源新浪、观察者网、人民网的权重主题上限固定3条导致国内热点被筛
- **修复**新增SOURCE_WEIGHTS条目新浪-头条1.3最高主题上限改为差异化配置中国热点主题放宽至2x
- **效果**:中文精选从单一新华网变为新浪+新华网+观察者网混合
**涉及文件:**
- local_fetch_cn.py — ctime类型修复
- selector.py — 新源权重 + 主题差异化上限
- summarize_news.py — 来源恢复逻辑 + 时间格式修复
- sync.py — 阅读时长秒→分钟
## v1.3.0 (2026-06-20) — Audiobookshelf 有声书服务
### Added
- **Audiobookshelf** Docker 部署ghcr.io/advplyr/audiobookshelf:latest端口 13378
- Caddy 反代 `podcast.xybkwd.top`
- `archive_old_audio.sh` — 服务器端滚动淘汰脚本每节目保留3集
- `sync_archive.sh` — 本地 D 盘归档同步脚本
- `D:/服务器备份/有声书/` — 本地永久音频归档目录
- 文体部工作空间 — 播客/有声书/课程学习管理
### Changed
- 服务清单新增 Audiobookshelf (podcast.xybkwd.top)
### Lessons Learned (Critical)
- 🔴 数据库/cache 操作必须先问用户,不得擅自执行(造成 Audiobookshelf DB 误删)
- Audiobookshelf 章节排序依赖三层:文件名 + chapters[].start + audioFiles[].index
- 排序依据必须是源端 upload_date不准凭主观判断
- 容器有 watcher 自动检测文件变化,不需要重启
- B站无纯音频流`-f worstvideo+worstaudio/worst` 最小化下载量
## v1.4.0 (2026-06-17) — 个人服务三联部署
### Added
- WebDAV 服务dav.xybkwd.top:8766— bytemark/webdav 容器,日记同步后端
- Vaultwarden 密码管理vault.xybkwd.top:8088— 统一密码管理
- Halo 博客www.xybkwd.top:8090— 个人博客发布平台
- 个人数据中心四件套架构成型:存储/密码/阅读/发布
## v1.5.0 (2026-06-19) — Dashboard v1.4.0 + 双策略架构
### Added
- Dashboard 三 Tab 布局 + 震荡指标面板RSI/布林带/ATR/MFI
- 第二个 Telegram Bot震荡策略专用
- 双 Docker 实例 8081/8082
### Changed
- Freqtrade 从单策略升级为双策略并行(趋势 v2.2d + 震荡 v3.2
- 移除 BTC/USDT 监控
### Lessons Learned
- Dashboard 指标必须与策略逻辑统一,从代码提取而非手工维护
- 主任不得越俎代庖写代码部署服务
### 2026-06-28
- 修复inspiration-collector weekly_digest.py 路径 bug
- 第 82 行os.path.join(daily_root, date_str) → os.path.join(daily_root, parts[0], parts[1], parts[2])
- 每日摘要目录结构调整时漏了同步周报脚本