# 栖云数字城堡 · 全景架构手册 > 冯先生个人数字基建,始于 2026 年 6 月 7 日 > 最后更新:2026-06-24 --- ## 一、整体拓扑 ``` ┌─────────────────────────────────────┐ │ 东京 VPS(43.163.225.30) │ │ Caddy 网关 → 各项服务 + 统一认证 │ │ 主力运行:新闻管线、Gitea、Memos、 │ │ 播客、阅读、日记、todo、代理 │ └──────────────┬──────────────────────┘ │ ┌──────────────┴──────────────────────┐ │ 北京 VPS(81.70.93.78) │ │ 知识库:Meilisearch + AI 问答 │ │ 每天凌晨 3 点从东京备份 │ └─────────────────────────────────────┘ ``` --- ## 二、域名与服务清单 所有服务统一域名 `*.xybkwd.top`,经 Caddy 反向代理 + 统一认证(auth.xybkwd.top)。 ### 2.1 核心服务 | 域名 | 服务 | 端口 | 需要认证 | |:---|:---|:---:|:---:| | nav.xybkwd.top | 导航页 + 知识库搜索/问答 | 静态文件 | ✅ | | auth.xybkwd.top | 统一登录认证 | 9002 | — | | chat.xybkwd.top | 旧 AI 对话(已弃用) | 8900 | — | | gitea.xybkwd.top | Git 代码仓库 | 3000 | ✅ | | dashboard.xybkwd.top | 控制面板 | 9000 | ✅ | | memo.xybkwd.top | 备忘录 / 随手记 | 5230 | — | | search.xybkwd.top | 搜索(原 Meilisearch 直连,现指向8100) | 8100 | ✅ | ### 2.2 内容与阅读 | 域名 | 服务 | 端口 | |:---|:---|:---:| | brief.xybkwd.top | 每日简报 | 静态文件 | | books.xybkwd.top | 在线阅读 | 8083 | | podcast.xybkwd.top | 播客服务器 | 13378 | ### 2.3 同步与存储 | 域名 | 服务 | 端口 | |:---|:---|:---:| | dav.xybkwd.top | WebDAV 日记同步 | 8766 | | vault.xybkwd.top | 密码管理 | 8088 | ### 2.4 代理与工具 | 域名 | 服务 | |:---|:---| | ss.xybkwd.top | Shadowsocks 代理订阅 | | www.xybkwd.top | 主站 | 8090 | --- ## 三、Gitea 仓库清单 全部在 **fxy** 用户下,共 **17 个仓库**: ### 核心系统 | 仓库名 | 说明 | |:---|:---| | `server-ops` | 服务器运维脚本、配置归档、daily 日志 | | `nav-page` | 导航页前端代码 | | `dashboard` | 控制面板 | | `qiyun-portal` | 栖云个人门户 | | `todo-system` | 待办系统 | | `daily-brief` | 新闻采集管线(国内+国际+政策+研报) | ### 知识与笔记 | 仓库名 | 说明 | |:---|:---| | `inspiration-collector` | 灵感收集器(AI 日报/周报/随手记) | | `weread-notes` | 微信读书笔记 + 每日阅读日报 | | `obsidian-vault` | Obsidian 笔记库 | | `ebook-library` | 电子书库 | | `work-docs` | **工作文档归档**(2026-06-24 新增) | | `qa-archive` | **知识库问答记录归档**(2026-06-24 新增,自动同步) | ### 投研与交易 | 仓库名 | 说明 | |:---|:---| | `freqtrade-strategies` | 交易策略代码 | | `beast-trader-strategies` | Beast Trader 策略 | | `boox-notes` | BOOX 阅读笔记 | ### 其他 | 仓库名 | 说明 | |:---|:---| | `culture-sports` | 文体部 | | `boox-notes` | BOOX 同步笔记 | --- ## 四、数据流 ### 4.1 知识库备份(东京 → 北京) ``` 东京 server ├── repos/(灵感收集器、weread-notes、server-ops、daily-brief、nav-page、dashboard、work-docs) ├── configs/(Caddy 配置、脚本) ├── gitea_data/(数据库 + 仓库元数据) └── crontab/ ↓ 每天凌晨 3:00 rsync 北京 /home/ubuntu/backups/tokyo/ ├── repos/ ← 最新的裸仓库(供 indexer 索引) ├── repos_working/ ← 每日工作副本 ├── gitea_data/ ← 7 轮滚动备份 ├── configs/ └── logs/ ← 30 天日志 ``` ### 4.2 知识库索引(北京) ``` 北京 /home/ubuntu/backups/tokyo/repos/ ├── inspiration-collector/ai-insights/daily/ → 灵感文章/灵感日报 ├── weread-notes/notes/ → 阅读卡片 ├── weread-notes/daily/ → 阅读日报 └── work-docs/ → 工作文档 ↓ 每天凌晨 4:10 cron(indexer.py) Meilisearch(localhost:7700) → 全文搜索引擎 ``` ### 4.3 问答归档(北京 → 东京 Gitea) ``` 你提问 → kb_server.py(北京:8100) ↓ 实时 .md 文件写入 /home/ubuntu/kb/qa-archive/YYYY-MM/ ↓ 每 30 分钟 Tokyo rsync 拉取 → git commit → git push ↓ Gitea: fxy/qa-archive ``` ### 4.4 日报/新闻管线(东京) ``` 每小时 fetch_tencent_news.py → 腾讯新闻 每日 fetch_domestic_politics.py → 国内时政 每日 fetch_policy.py → 政策文件 每日 fetch_news.py → 国际新闻 每日 fetch_market.py → 行情数据 每日 fetch_research.py → 研报摘要 ↓ 汇总 → cn_merge.py → 精选 80 条 ↓ 每天 22:40 archive_daily_brief.py → Gitea daily-brief 仓库 ↓ 每天 23:00 fetch_market_daily.py → 指数/汇率/数字货币/宏观 ``` --- ## 五、服务器清单 ### 5.1 东京服务器 | 项目 | 信息 | |:---|:---| | IP | 43.163.225.30 | | 用户 | ubuntu | | SSH 密钥 | `C:\Users\32779\Desktop\保险箱\ssh_new.pem` | | 角色 | 主力服务 + Gitea + Caddy 网关 | | 服务 | Caddy、Gitea、Memos、freqtrade、audiobookshelf、WebDAV、SS 代理等 | ### 5.2 北京服务器 | 项目 | 信息 | |:---|:---| | IP | 81.70.93.78 | | 用户 | ubuntu | | SSH 密钥 | `C:\Users\32779\Desktop\保险箱\BJ.pem` | | 角色 | 知识库(Meilisearch + AI 问答)+ 备份 | | 服务 | Meilisearch(7700)、QA API(8100)、rsync 备份 | | SSH 到东京密钥 | `~/.ssh/tokyo_key.pem` | ### 5.3 安全规则 - **绝对不碰防火墙/安全组**。UFW 经验:启用后导致全部页面崩溃,直接禁用。 - 端口开放统一由云控制台安全组管理,需要开放端口时由冯先生自行操作。 - 腾讯云(北京)安全组允许东京 IP 访问 7700(Meilisearch)和 8100(QA API)。 --- ## 六、本机环境(Windows) ### 6.1 Python | 项目 | 路径 | |:---|:---| | 解释器 | `C:\Users\32779\.workbuddy\binaries\python\envs\default\Scripts\python.exe` | | Git Bash | `/c/Users/32779/.workbuddy/binaries/python/envs/default/Scripts/python.exe` | | 已装包 | mootdx, requests, pandas, stockstats, python-docx, PyMuPDF | | 编码 | 中文输出需 `PYTHONIOENCODING=utf-8` | ### 6.2 Ollama 本地模型 | 项目 | 值 | |:---|:---| | 程序路径 | C 盘(Windows 安装默认,不可选) | | 模型数据 | `D:\ollama\model_data\` | | 环境变量 | OLLAMA_MODELS=`D:\ollama\model_data\models` | | | OLLAMA_HOST=`0.0.0.0:11434` | | | OLLAMA_IGPU_ENABLE=`1`(Intel Arc 加速) | | | OLLAMA_CONTEXT_LENGTH=`65536` | | 已安装 | `qwen3.5:9b`(6.3GB,IQ4_NL 量化,来自 modelscope.cn) | | 运行 | `ollama run qwen3.5:9b` | ### 6.3 A 股数据工具栈 | 数据 | 接口 | 方式 | |:---|:---|:---| | K线/财务 | mootdx TCP 7709 | 不封IP,首选 | | 龙虎榜/解禁/融资融券/大宗 | datacenter-web.eastmoney.com | 可直连 | | 东财其他API | push2.eastmoney.com | ❌ TLS握手失败,走WebFetch | | 实时行情/PE/PB | qt.gtimg.cn(腾讯) | 待验证 | ### 6.4 doc2md 文档转换工具 | 项目 | 信息 | |:---|:---| | 位置 | `C:\Users\32779\WorkBuddy\Claw\doc2md.py` | | GUI | `C:\Users\32779\WorkBuddy\Claw\doc2md_gui.py` | | 启动 | 双击 `Claw\启动转换工具.bat` | | 输入目录 | `Claw\input\` | | 输出目录 | `Claw\output\` | | 功能 | Word(标题+表格)→ MD,PDF(字号识别+表格提取)→ MD | --- ## 七、知识库 RAG 问答 ### 7.1 架构 ``` 浏览器 nav.xybkwd.top/search.html │ ├─ 搜索 → /search-api/* → Caddy(东京)→ Beijing:7700(Meilisearch) │ └─ 问答 → /api/ask → Caddy(东京)→ Beijing:8100(kb_server.py) │ ├─ Meilisearch 检索 top 8 × 3 轮搜索 │ └─ DeepSeek API → 基于资料生成回答 ``` ### 7.2 检索优化 | 优化项 | 之前 | 现在 | |:---|:---:|:---:| | 单次检索文档数 | 3 篇 | 12 篇(3 搜索词 × 6 篇,去重) | | 搜索策略 | 单关键词 | 多轮检索:AI 自动拆成 3 个角度 | | 每篇截取 | 2000 字 | 4000 字 | | 提示词 | 简单指令 | 要求交叉验证多条资料 | | 输出上限 | 2000 tokens | 4000 tokens | ### 7.3 成本 - 单次问答约 ¥0.02(一次 DeepSeek 生成搜索词 + 一次生成回答) - 知识库增大不影响单次成本(始终只取 top 12) ### 7.4 前端功能 - 搜索/问答双标签切换 - Markdown 渲染(marked.js CDN) - 保存按钮 → 下载 .md 文件到本地 - 自动归档 → 同步到 Gitea `fxy/qa-archive` --- ## 八、踩坑汇总(血的教训) ### 🔥 最高优先级 1. **不碰防火墙安全组** — UFW 启用后全部服务崩溃,彻底禁用 2. **Caddy `handle_path` 会剥离路径前缀** — 代理 API 要用 `@matcher` + `handle @matcher`,不能用 `handle_path` 3. **Caddy 规则顺序敏感** — `/api/ask` 必须在 `@api`(匹配 `/api/*`)之前,否则被拦截 4. **服务器端口必须监听 `0.0.0.0`** — `127.0.0.1` 只能本机访问,跨服务器必须 `0.0.0.0` ### ⚠️ 重要 5. **`rsync --delete` 会删 .git 目录** — 同步非 Git 目录到 Git 仓库时不能用 `--delete` 6. **Ollama pull 受系统代理干扰** — Clash(127.0.0.1:7890)会阻断 Ollama CLI 的模型下载,需 `HTTP_PROXY=""` 清空 7. **Ollama `OLLAMA_MODELS` 路径格式** — Windows 必须用反斜杠 `D:\ollama\...`,Git Bash 的 `/d/` 前缀不生效 8. **模型默认上下文仅 4096** — 长文本会被无声截断,必须设 `OLLAMA_CONTEXT_LENGTH=65536` 9. **服务端中文 URL 编码** — Python `http.server` 对 URL 中的中文编码处理脆弱,需 `urllib.parse` 手动解析 ### 📝 常规注意事项 10. **Gitea API 不能自删用户** — 管理员用户也不能通过 API 删除自己 11. **Git 不跟踪空目录** — 需要 `.gitkeep` 占位文件 12. **Windows 下 Python 路径问题** — Git Bash 要用绝对路径调用 Python,且中文输出要设编码 13. **助理模式可能覆盖已有功能** — 修改 search.html 后,助理模式再次运行时可能覆盖 Q&A 代码 --- ## 九、构建时间线 ``` 2026-06-07 WorkBuddy 首次下载 2026-06-08 ~ 初步搭建导航页 + Memos 2026-06-09 ~ Gitea 搭建 + 仓库迁移 2026-06-10 ~ Caddy 网关 + 统一认证 2026-06-11 ~ 待办系统 + 新闻管线初建 2026-06-12 ~ 微信公众号同步 2026-06-13 ~ Shadowsocks 代理 2026-06-14 ~ 播客服务器 + OpenBSD 防火墙踩坑 2026-06-15 ~ 北京服务器加入,两地备份 2026-06-16 ~ 日记 WebDAV 同步 2026-06-17 ~ 新闻管线完善 + 灵感收集器 2026-06-18 ~ 培训周报自动化 2026-06-19 ~ 北京服务器加固 2026-06-20 ~ A 股数据工具栈 + 交易策略回测 2026-06-21 ~ 90 后培训班文档分析 2026-06-22 ~ Ollama 本地模型部署 2026-06-23 ~ 知识库索引(Meilisearch)+ 文档转换工具 2026-06-24 ~ 知识库 AI 问答 + 问答归档 + 工作文档仓库 ``` --- ## 十、交接备忘 如果某天需要重装或迁移,关键步骤顺序: 1. **东京服务器** → 部署 Caddy、Gitea(Docker)、Memos、各脚本 2. **域名 DNS** → 指向东京 IP 3. **北京服务器** → 部署 Meilisearch、kb_server.py、备份脚本 4. **安全组** → 北京开放 7700、8100 给东京 IP 5. **本机** → 装 Python 环境、Ollama、Claw 工具 6. **SSH 密钥** → 东京→北京互信(保险箱文件夹有备份) --- *文档生成于 2026-06-24,共 17 个 Gitea 仓库、2 台服务器、10+ 运行服务。*