11 KiB
栖云个人服务部署方案 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 拉取书目元数据
实现路径:
- 部署 Meilisearch Docker 容器
- 写一个 Python 脚本,定时从各数据源拉取内容推入 Meilisearch
- 做一个简单的搜索页面(纯 HTML,放在
/var/www/nav/search.html) - 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 - 频率:每日一次
实现路径:
- 获取微信读书 Cookie(浏览器登录后导出)
- 部署 weread-exporter 脚本
- 配置 cron 每日同步
- 输出到 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)
- 备份策略:当前有每日备份脚本,建议定期验证备份可恢复性