内容导航

Project

个人云服务与自动化工作台

以云服务器和本地 Debian 为核心的个人服务平台,整合静态博客、n8n 自动化、跨设备通知、远程桌面、服务监控和后续文件同步能力。

个人基础设施 自托管自动化Dockerntfyn8nRustDesk
本文目录

状态:持续维护

个人云服务与自动化工作台

这个项目用于把个人常用服务从零散的本机工具迁移到一套可维护的基础设施中。核心目标是:云服务器负责公网入口和中转,本地 Debian 负责主要应用运行,Windows/Mac/iOS/Android/Linux 作为使用端,通过受控的通知、远程连接和文件传输方式协同。

项目不追求把所有服务暴露到公网,而是强调最小端口、认证隔离、临时入口可关闭,以及重要服务可以在域名备案和 HTTPS 完成后平滑切换到正式形态。

目标

  • 将 MyBlog、n8n、小程序服务从临时本机环境迁移到本地 Debian + 云服务器入口。
  • 用 ntfy 建立短信、服务器告警、n8n 结果和跨设备文本通知通道。
  • 用 RustDesk 自建服务器解决多设备远程控制,不依赖第三方公共中继。
  • 用云 Nginx 保留备案 fallback,避免本地服务离线时站点完全不可访问。
  • 在校园网环境下尽量降低端口暴露和局域网文件传输风险。
  • 为后续 Syncthing、LocalSend、KDE Connect 等文件与剪切板工具预留集成位置。

当前架构

用户设备
  - Windows 工作机
  - Mac / iPhone
  - Android
  - Debian 图形桌面

云服务器
  - Nginx
  - frps
  - RustDesk hbbs/hbbr
  - ntfy
  - 备案 fallback 页面

本地 Debian
  - Docker Compose
  - n8n + PostgreSQL + Redis + Worker
  - MyBlog 静态站点
  - 小程序服务
  - sing-box 代理
  - RustDesk 被控服务

公网访问在正式域名完成后收敛为:

jesiyar.com       -> MyBlog
n8n.jesiyar.com   -> n8n
mini.jesiyar.com  -> 小程序服务
ntfy.jesiyar.com  -> ntfy

备案未完成前,临时保留 IP + 端口访问。临时端口均应有关闭脚本或清理记录。

已完成模块

MyBlog 静态部署

MyBlog 在 Windows 本地写作和构建,通过 Git 推送到 Debian 后由 Docker/Nginx 托管。

常用流程:

cd C:\Software\MyBlog
npm run build
git add .
git commit -m "Update blog"
git push

Debian 部署:

cd /opt/apps/myblog
git pull
docker compose up -d --build
curl -I http://127.0.0.1:18080

云服务器通过 FRP/Nginx 将站点临时转发到公网。域名完成后改走 https://jesiyar.com

n8n 自动化工作流

n8n 使用队列模式部署:

n8n-main
n8n-worker-1
PostgreSQL
Redis

这种结构比单容器更适合长期运行:

  • PostgreSQL 保存工作流、凭据和执行历史。
  • Redis 负责队列。
  • Worker 负责执行任务。
  • n8n-main 保持 Web UI 和 webhook 稳定。

当前重点工作流是多源信息获取与摘要推送。它从 YouTube、Bilibili、科技媒体、论文接口和热榜接口获取信息,再统一字段、过滤 24 小时内的新内容,最后交给 LLM 做摘要、分类和推送。

信息获取链路:

Schedule Trigger
  -> 来源配置
  -> Split Out
  -> RSS / HTTP Request
  -> XML 解析或 RSS 结构化输出
  -> Code 统一字段
  -> Merge append
  -> 24 小时过滤
  -> LLM 摘要
  -> 飞书 / ntfy / HTTP 推送

Bilibili 使用本地 RSSHub:

n8n -> http://rsshub:1200/bilibili/user/video/<uid>

RSSHub 运行在 Debian Docker 中,并挂到 n8n 的 Docker 网络。Bilibili Cookie 只保存在服务器本地 .env,不进入仓库或公开文章。

YouTube 当前不用 RSS Feed Read 节点,而是:

HTTP Request -> XML -> Code 拉平

原因是 RSS Feed Read 在当前环境里容易超时,而 HTTP Request 能稳定拿到官方 RSS XML。YouTube URL 使用:

https://www.youtube.com/feeds/videos.xml?channel_id={{ String($json.feeds).trim() }}

进入 LLM 前统一字段:

source
 title
 link
 published
 updated
 author
 summary
 thumbnail
 views
 raw

24 小时过滤统一使用 published,不用 updated,避免因为标题、描述或统计数据更新导致旧内容被误认为新内容。

n8n 已接入 ntfy 通知通道。工作流完成、失败或需要人工查看时,可以向 j-n8n-* topic 发送消息。发送账号使用只写权限,降低凭据泄露后的影响范围。

ntfy 多端通知

ntfy 运行在云服务器,临时地址为:

http://<cloud-ip>:2586

正式域名预期为:

https://ntfy.jesiyar.com

权限模型:

jesiyar          -> j-* 读写
MacbookAir2019  -> mba-* 读写
sms-jesiyar      -> 只写 j-sms-*
n8n-jesiyar      -> 只写 j-n8n-*
server-alert     -> 只写 j-alert-*
mba-inbox        -> 只写 mba-inbox-*

该模型的重点是把接收账号和发送账号分离。手机短信转发、服务器脚本、快捷指令等发送端即使泄露,也只能写入指定 topic,不能读取历史消息。

服务器日报与告警

云服务器日报脚本检查:

  • 服务状态:nginxfrpsntfyrustdesk-hbbsrustdesk-hbbr
  • 入口健康:主站、n8n、小程序、FRP 本地入口、ntfy health。
  • 资源状态:负载、内存、磁盘。
  • 安全状态:SSH 失败登录、非预期监听端口。
  • 备案 fallback 文件是否存在。

发送方式从飞书改为 ntfy:

server-alert -> j-alert-*

敏感信息放在:

/etc/server-report.env

不写入仓库。

RustDesk 自建中继

RustDesk Server 已迁移到云服务器运行。这样被控设备不再依赖本地 Debian 的防火墙和校园网随机端口开放。

核心端口:

21115/tcp
21116/tcp
21116/udp
21117/tcp

Debian 被控端需要保持 Xfce 图形会话可用,并禁用自动休眠、挂起和锁屏。

跨设备文本同步

文本同步通过 ntfy topic 实现:

j-inbox-*
mba-inbox-*

适合:

  • 从 iPhone 快捷指令发送剪切板。
  • 从 Windows/Mac/Linux 脚本发送当前剪切板。
  • 在多端查看统一消息历史。

ntfy iOS App 主要负责接收,不是聊天输入框。发送端通过快捷指令 POST 到 topic URL。

待完成模块

LocalSend 临时文件传输

目标:解决局域网内临时传大文件,不经过云服务器,不开放公网端口。

计划配置:

  • 所有设备安装 LocalSend。
  • 自动接收关闭。
  • 每次接收手动确认。
  • 开启 PIN 验证。
  • 设备名不使用真实姓名、手机号、学号。
  • 接收目录单独隔离。

校园网环境下,Debian 不长期开放 53317 给整个网段。必要时只临时允许可信网段或可信设备。

Syncthing 长期同步

目标:为固定目录建立长期同步能力。它和 LocalSend 的定位不同:

LocalSend  -> 临时发文件
Syncthing  -> 固定文件夹持续同步

初步目录规划:

/srv/syncthing/jesiyar-share
/srv/syncthing/jesiyar-inbox
/srv/syncthing/mba-share
/srv/syncthing/mba-inbox
/srv/syncthing/shared

后续需要重点设计:

  • 设备 ID 配对。
  • 文件夹权限。
  • 版本保留策略。
  • 删除保护。
  • 是否以 Debian 作为中枢。

KDE Connect 剪切板

目标:局域网内自动或半自动同步剪切板、小文本、链接和小文件。

由于 iOS/macOS 的系统限制,剪切板自动同步能力可能弱于 Android 和 Linux/Windows。实际使用时可以和 ntfy 快捷指令互补。

安全边界

项目的安全原则:

  1. 公开文章不记录真实密码、token、完整 topic、私钥。
  2. 临时端口必须有关闭记录。
  3. 云服务器安全组不允许“所有流量全端口”。
  4. 自动化发送账号只给 write-only
  5. 管理端口尽量限制来源 IP。
  6. 本地服务默认监听 127.0.0.1,由 Nginx 或 FRP 代理暴露。
  7. 校园网视为不可信局域网,文件传输默认手动确认。
  8. 域名 HTTPS 完成后关闭 258690019002 等临时入口。

维护清单

日常检查:

systemctl status nginx --no-pager
systemctl status frps --no-pager
systemctl status ntfy --no-pager
systemctl status rustdesk-hbbs --no-pager
systemctl status rustdesk-hbbr --no-pager
sudo /usr/local/bin/server-daily-report.sh

本地 n8n:

cd /opt/n8n
docker compose ps
docker compose logs --tail 80 n8n
docker compose logs --tail 80 n8n-worker

MyBlog:

cd /opt/apps/myblog
git pull
docker compose up -d --build
curl -I http://127.0.0.1:18080

ntfy 权限:

sudo ntfy access
sudo ntfy user list

后续计划

近期计划按优先级排列:

  1. 完成 LocalSend 多端安装和校园网安全策略。
  2. 设计 Syncthing 长期同步目录和版本策略。
  3. 给 Windows/Mac/iPhone 增加一键发送剪切板到 ntfy 的脚本或快捷指令。
  4. 域名备案完成后迁移所有临时 IP 入口到 HTTPS。
  5. 关闭云服务器临时端口,最终公网入口收敛到 80/443 和必要的 RustDesk 端口。

系列笔记

这个系列还没有公开笔记。

评论

Giscus 评论尚未配置。填写 GitHub Discussions 的仓库和分类 ID 后,这里会显示评论区。