想清楚要什么
一开始的需求其实就一句话:我想有一个自己的地方,能写东西,也能存东西。
写东西是对外的,谁都能看;存东西是对内的,只有自己和少数几个人能碰。这两件事在大多数人的方案里是分开的——博客托管在静态平台,文件丢进网盘。但我不想把数据交给第三方,于是它们必须长在同一套基础设施上,共用一套账号。
整体结构
最终形态是一个 Next.js 应用,跑在家里一台物理服务器上。云端只留一台轻量服务器,上面跑 OpenResty,负责 TLS 终止、缓存和限流,然后把请求回源到家里。
访客 ──HTTPS──> 云端 OpenResty ──DDNS 回源──> 家里服务器
(TLS/缓存/限流) (Next.js + PostgreSQL + 硬盘)
为什么要绕这一层?因为家里宽带封了 80/443 端口,也没有固定公网 IP。直接暴露家里的服务是不可能的,必须有一个云上的入口来卸载 TLS、扛住扫描和低频攻击,再把干净的流量送回家里。
一条账号贯穿
四个模块共用一套 better-auth 账号:
| 模块 | 谁可以访问 |
|---|---|
| 博客 | 所有人 |
| 网盘 | 受邀者(按身份只读或可写) |
| 知识库 | 受邀者(按身份只读或可写) |
| 工作台 | 登录后 |
受邀者不是自己注册的,而是我发一个邀请码出去。码里已经写死了身份和可访问范围——你能看到什么、能改什么,在我生成这个码的那一刻就定了,登录后改不了。
边界
有几件事刻意不做:不做评论系统(至少现在不做)、不做文章浏览量统计、不做任何需要往第三方上报的东西。这个空间的价值在于它是自己的,每接一个外部依赖,这个价值就少一分。