312 lines
11 KiB
Markdown
312 lines
11 KiB
Markdown
# 栖云个人服务部署方案 v2
|
||
|
||
> 2026-06-15 | 基于当前服务器状态(2C/4G/59G SSD,已用 13G,可用 45G)制定
|
||
|
||
---
|
||
|
||
## 一、当前状态
|
||
|
||
### 已部署服务(11 个)
|
||
|
||
| 服务 | 域名 | 端口 | 部署方式 | 状态 |
|
||
|:---|:---|:---|:---|:---|
|
||
| Halo 博客 | www.xybkwd.top | 8090 | Docker | 运行中 |
|
||
| Gitea | gitea.xybkwd.top | 3000 | Docker | 运行中 |
|
||
| Beast Dashboard | dashboard.xybkwd.top | 9000 | Docker | 运行中 |
|
||
| Memos | memo.xybkwd.top | 5230 | Docker | 运行中 |
|
||
| 栖云导航 | nav.xybkwd.top | 80/443 | Caddy 静态 | 运行中 |
|
||
| 要闻 | brief.xybkwd.top | 80/443 | Caddy 静态 | 运行中 |
|
||
| Vaultwarden | vault.xybkwd.top | 8088 | Docker | 运行中 |
|
||
| Calibre-Web | books.xybkwd.top | 8083 | Docker | 运行中 |
|
||
| Freqtrade | — | — | Docker | 运行中 |
|
||
| 灵感收集器 | — | — | cron+Python | 运行中 |
|
||
| AI Chat | chat.xybkwd.top | — | Caddy 反代 | 运行中 |
|
||
|
||
### 基础设施
|
||
|
||
- **反向代理**:Caddy(自动 HTTPS)
|
||
- **认证**:Caddy basicauth(fxy / Qiyun2025!),覆盖除博客和 Vaultwarden 外的所有服务
|
||
- **防火墙**:ufw(默认 deny incoming)
|
||
- **代理**:Shadowsocks-libev(31567)
|
||
- **DNS**:腾讯云泛解析 `*.xybkwd.top` → 43.163.225.30
|
||
|
||
### 资源余量
|
||
|
||
- **内存**:3.6G 总量,已用 2.1G,可用 ~1.5G
|
||
- **磁盘**:59G 总量,已用 13G,可用 45G
|
||
- **CPU**:2 核,负载较低
|
||
|
||
---
|
||
|
||
## 二、8 个部署方向方案
|
||
|
||
### 1. 全文搜索 — Meilisearch
|
||
|
||
**定位**:给 Gitea 仓库、Memos 灵感、博客文章、Calibre 书库提供统一搜索入口。
|
||
|
||
**选型**:Meilisearch(Rust 编写,内存友好,自带 Web UI,中文分词支持好)
|
||
|
||
**部署方案**:
|
||
- Docker:`getmeili/meilisearch:latest`
|
||
- 端口:7700
|
||
- 域名:`search.xybkwd.top`
|
||
- 内存占用:~200MB
|
||
- 磁盘:索引数据 ~500MB(按当前内容量估算)
|
||
|
||
**数据源接入**:
|
||
- Gitea:通过 API 拉取仓库 README 和文档
|
||
- Memos:通过 API 拉取所有 memo
|
||
- Halo 博客:通过 API 拉取文章
|
||
- Calibre-Web:通过 API 拉取书目元数据
|
||
|
||
**实现路径**:
|
||
1. 部署 Meilisearch Docker 容器
|
||
2. 写一个 Python 脚本,定时从各数据源拉取内容推入 Meilisearch
|
||
3. 做一个简单的搜索页面(纯 HTML,放在 `/var/www/nav/search.html`)
|
||
4. Caddy 反代 `search.xybkwd.top` → localhost:7700
|
||
|
||
**资源评估**:内存 +200MB,磁盘 +500MB,完全可行。
|
||
|
||
---
|
||
|
||
### 2. 书影音管理 — 已有 Calibre-Web + 扩展
|
||
|
||
**当前状态**:Calibre-Web 已部署(books.xybkwd.top),仅覆盖电子书。
|
||
|
||
**扩展方向**:
|
||
- **电影/剧集**:不推荐在 2C/4G 服务器上跑 Jellyfin/Plex(太重)。建议用 **Ryot**(Rust 编写的轻量级媒体追踪器),追踪已看/想看的电影剧集,不托管媒体文件
|
||
- **音乐**:Navidrome 太吃内存。建议用 Ryot 统一管理书影音"已读/已看/已听"记录
|
||
|
||
**部署方案**:
|
||
- Docker:`ghcr.io/ignisda/ryot:latest`
|
||
- 端口:8555
|
||
- 域名:`media.xybkwd.top`
|
||
- 内存占用:~150MB
|
||
- 数据库:SQLite(无需额外容器)
|
||
|
||
**与 Calibre-Web 的关系**:Calibre-Web 管"书库本身",Ryot 管"阅读/观看记录和评分"。两者互补。
|
||
|
||
**资源评估**:内存 +150MB,磁盘 +200MB,可行。
|
||
|
||
---
|
||
|
||
### 3. n8n — 自动化工作流引擎
|
||
|
||
**定位**:可视化的自动化编排工具,替代零散的 cron 脚本。
|
||
|
||
**选型**:n8n(开源,自部署,节点丰富,支持 AI 节点)
|
||
|
||
**部署方案**:
|
||
- Docker:`n8nio/n8n:latest`
|
||
- 端口:5678
|
||
- 域名:`n8n.xybkwd.top`
|
||
- 内存占用:~300-500MB(⚠️ 较重)
|
||
- 磁盘:~1GB(含数据库和工作流)
|
||
|
||
**可替代的 cron 任务**:
|
||
- 灵感收集器每日分析
|
||
- 交易日报生成
|
||
- 新闻抓取和摘要
|
||
- DeepSeek 余额检查
|
||
- 备份脚本
|
||
|
||
**⚠️ 资源警告**:n8n 是 8 个方向中最吃资源的。当前可用内存 ~1.5G,部署 n8n 后剩余 ~1G。如果后续还要加其他服务,可能需要取舍。
|
||
|
||
**替代方案**:如果资源紧张,可以用 **Activepieces**(更轻量)或保持 cron 脚本不变。
|
||
|
||
**资源评估**:内存 +400MB,磁盘 +1GB,勉强可行但需关注。
|
||
|
||
---
|
||
|
||
### 4. RSS Hub — 信息聚合
|
||
|
||
**定位**:把微信公众号、网站、社交媒体等没有 RSS 的信息源转成 RSS 订阅。
|
||
|
||
**选型**:RSSHub(Node.js,社区庞大,路由覆盖广)
|
||
|
||
**部署方案**:
|
||
- Docker:`diygod/rsshub:latest`
|
||
- 端口:1200
|
||
- 域名:`rss.xybkwd.top`
|
||
- 内存占用:~200-300MB
|
||
- 磁盘:缓存 ~200MB
|
||
|
||
**推荐路由**:
|
||
- 微信公众号(需 cookie)
|
||
- 知乎专栏/用户
|
||
- GitHub Trending/Release
|
||
- 加密货币相关(CoinDesk、The Block)
|
||
- 政策文件(中国政府网、发改委)
|
||
|
||
**配套阅读器**:推荐 **Miniflux**(Go 编写,极简,~50MB 内存)
|
||
- Docker:`miniflux/miniflux:latest`
|
||
- 端口:8080
|
||
- 域名:`reader.xybkwd.top`
|
||
|
||
**资源评估**:RSSHub + Miniflux 合计内存 +300MB,磁盘 +300MB,可行。
|
||
|
||
---
|
||
|
||
### 5. 图床 — 私有图片托管
|
||
|
||
**定位**:替代腾讯云 COS 的私有图片存储,Markdown 写作时直接引用。
|
||
|
||
**选型**:Lsky Pro(兰空图床,PHP,功能完整)
|
||
|
||
**部署方案**:
|
||
- Docker:`halcyonazure/lsky-pro:latest`
|
||
- 端口:8089
|
||
- 域名:`img.xybkwd.top`
|
||
- 内存占用:~100MB
|
||
- 磁盘:取决于图片量(初始 ~100MB)
|
||
|
||
**功能**:
|
||
- Web 上传 / API 上传 / 剪贴板粘贴
|
||
- 自动生成 Markdown/HTML/URL 链接
|
||
- 相册管理、角色权限
|
||
- 支持 S3/COS 等外部存储(可后续对接腾讯云 COS 做备份)
|
||
|
||
**⚠️ 注意**:图片存储在服务器本地磁盘上。如果图片量大,建议定期备份到 COS 或本地。
|
||
|
||
**资源评估**:内存 +100MB,磁盘按需增长,可行。
|
||
|
||
---
|
||
|
||
### 6. 自动化抓取 — 定向信息采集
|
||
|
||
**定位**:定时抓取特定网站的信息,结构化存储,供 AI 分析。
|
||
|
||
**选型**:**changedetection.io**(监控网页变化)+ 自定义 Python 爬虫
|
||
|
||
**部署方案 A — 网页变化监控**:
|
||
- Docker:`ghcr.io/dgtlmoon/changedetection.io:latest`
|
||
- 端口:5000
|
||
- 域名:`watch.xybkwd.top`
|
||
- 内存占用:~200MB
|
||
- 功能:监控任意网页变化,支持 CSS 选择器定位,变化时发通知
|
||
|
||
**部署方案 B — 定向爬虫**:
|
||
- 用 Python(BeautifulSoup/httpx)写轻量爬虫
|
||
- 目标:政策文件、行业报告、竞品动态
|
||
- 输出:结构化 JSON → Gitea 仓库 → AI 分析
|
||
- 调度:cron(或 n8n,如果部署了的话)
|
||
|
||
**推荐组合**:changedetection.io 做"监控",Python 脚本做"采集",灵感收集器做"分析"。
|
||
|
||
**资源评估**:内存 +200MB,磁盘 +200MB,可行。
|
||
|
||
---
|
||
|
||
### 7. 语音助手 — 个人 AI 语音交互
|
||
|
||
**定位**:通过语音与 AI 对话,适合开车、做家务等场景。
|
||
|
||
**选型**:**Open WebUI + Piper TTS**(本地语音合成)
|
||
|
||
**部署方案**:
|
||
- Open WebUI:`ghcr.io/open-webui/open-webui:main`(端口 3001)
|
||
- Piper TTS:本地语音合成引擎(~100MB 模型)
|
||
- 域名:`voice.xybkwd.top`
|
||
|
||
**⚠️ 现实约束**:
|
||
- 2C/4G 服务器跑不了本地 LLM,语音识别和生成仍需调用 DeepSeek API
|
||
- Open WebUI 本身内存占用 ~500MB+,较重
|
||
- 手机端已有 DeepSeek App 支持语音输入,体验更好
|
||
|
||
**替代方案**:
|
||
- **不部署服务端**,直接用 DeepSeek App 的语音功能
|
||
- 或者部署一个极简的 **Web 语音对话页面**(浏览器 SpeechRecognition API + DeepSeek API),无需额外 Docker 容器,内存占用接近零
|
||
|
||
**推荐**:极简 Web 页面方案。写一个单页 HTML,用浏览器原生语音 API,后端只做 API 转发。部署在 `/var/www/nav/voice.html`。
|
||
|
||
**资源评估**:极简方案几乎零资源占用;Open WebUI 方案内存 +500MB,不推荐。
|
||
|
||
---
|
||
|
||
### 8. 微信读书同步 — 阅读数据归集
|
||
|
||
**定位**:把微信读书的划线、笔记、书评同步到 Gitea,与 Calibre-Web 书库打通。
|
||
|
||
**选型**:**weread-exporter**(Python,社区维护)
|
||
|
||
**部署方案**:
|
||
- 不部署服务,用 Python 脚本 + cron 定时同步
|
||
- 脚本:`~/scripts/weread_sync.py`
|
||
- 输出:Markdown 格式的划线/笔记 → Gitea 仓库 `fxy/weread-notes`
|
||
- 频率:每日一次
|
||
|
||
**实现路径**:
|
||
1. 获取微信读书 Cookie(浏览器登录后导出)
|
||
2. 部署 weread-exporter 脚本
|
||
3. 配置 cron 每日同步
|
||
4. 输出到 Gitea 仓库,可在 nav 页面加一个"读书笔记"入口
|
||
|
||
**与 Calibre-Web 的关系**:
|
||
- Calibre-Web 管"自有电子书"(文石阅读器上的书)
|
||
- 微信读书同步管"微信读书 App 上的书"
|
||
- 两者互补,覆盖全部阅读场景
|
||
|
||
**资源评估**:几乎零资源占用(一个 Python 脚本 + cron)。
|
||
|
||
---
|
||
|
||
## 三、部署优先级建议
|
||
|
||
按资源消耗、实用价值、实现难度综合排序:
|
||
|
||
| 优先级 | 方向 | 理由 |
|
||
|:---:|:---|:---|
|
||
| **P0** | 微信读书同步 | 零资源占用,高实用价值,快速落地 |
|
||
| **P0** | 图床 | 轻量,解决 Markdown 写作刚需 |
|
||
| **P1** | 全文搜索 | 打通已有数据孤岛,提升信息检索效率 |
|
||
| **P1** | 自动化抓取 | 信息采集是 AI 分析的原料 |
|
||
| **P2** | RSS Hub | 信息聚合,但需配合阅读器使用 |
|
||
| **P2** | 书影音管理 | Calibre-Web 已覆盖书,扩展影音记录 |
|
||
| **P3** | 语音助手 | 极简方案可行,但手机 App 已够用 |
|
||
| **P3** | n8n | 功能强大但吃资源,当前 cron 够用 |
|
||
|
||
---
|
||
|
||
## 四、资源预算
|
||
|
||
如果全部部署(不含 n8n 的完整方案):
|
||
|
||
| 项目 | 内存增量 | 磁盘增量 |
|
||
|:---|:---|:---|
|
||
| 微信读书同步 | ~0 | ~50MB |
|
||
| 图床 (Lsky Pro) | +100MB | +100MB |
|
||
| 全文搜索 (Meilisearch) | +200MB | +500MB |
|
||
| 自动化抓取 (changedetection.io) | +200MB | +200MB |
|
||
| RSS Hub + Miniflux | +300MB | +300MB |
|
||
| 书影音管理 (Ryot) | +150MB | +200MB |
|
||
| 语音助手 (极简 Web) | ~0 | ~0 |
|
||
| **合计** | **+950MB** | **+1.35GB** |
|
||
|
||
**当前可用**:内存 ~1.5G,磁盘 45G。全部部署后内存剩余 ~550MB,磁盘剩余 ~43.6GB。**可行,但内存偏紧。**
|
||
|
||
---
|
||
|
||
## 五、建议分批推进
|
||
|
||
**第一批(本周)**:微信读书同步 + 图床 + 全文搜索
|
||
- 内存增量:+300MB
|
||
- 解决三个高频刚需
|
||
|
||
**第二批(下周)**:自动化抓取 + RSS Hub
|
||
- 内存增量:+500MB
|
||
- 信息采集基础设施
|
||
|
||
**第三批(后续)**:书影音管理 + 语音助手
|
||
- 内存增量:+150MB
|
||
- 锦上添花
|
||
|
||
**n8n**:单独评估,如果部署则需停掉部分 cron 任务释放资源,或者等服务器升级后再上。
|
||
|
||
---
|
||
|
||
## 六、后续可考虑
|
||
|
||
- **服务器升级**:当前 2C/4G 跑 11 个服务已用 2.1G 内存,再加 7-8 个服务会到 3G+。如果后续要上 n8n 或本地 LLM,建议升级到 4C/8G
|
||
- **监控告警**:目前没有服务健康监控(除 freqtrade 有 health_check.sh),建议加一个 Uptime Kuma(轻量,~100MB)
|
||
- **备份策略**:当前有每日备份脚本,建议定期验证备份可恢复性
|