logo Taro Cake 芋头糕
好友 FRIENDS · 互关私聊
加载中…
通知

TaroCake

芋头糕

一个自托管的小社区:聊天室、频道、博客、文库、个人主页,都收在同一个入口里。另有一个只在被 @ 时才开口的伙伴 taro。

正在看看谁在…
01 / 08

它到底是什么

一个把公共聊天室、私密频道、博客、文库、个人主页和仪表盘收进同一个入口的小站点。它不追求功能多,追求的是——一个人的时间,也维护得住。

尽量少的技术
整站只有 nginx、PHP 和一个 Node 进程,没有中间件,也没有排队等依赖的服务。
读得懂的数据
数据是纯文本:JSON 存结构,消息按追加式日志往后写。
一个人维护
迁移和备份就是复制目录,出问题可以 grep 出原因。
02 / 08

五条原则

没有数据库
数据直接落在文件系统里:结构化数据用 JSON,消息用追加式文本。任何一台机器 cat 一下就能读懂。
没有前端框架
页面由服务端渲染,交互用原生 JavaScript 渐进增强。首屏可见即用,脚本挂了也不至于白屏。
单机自托管
一台服务器跑完全部组件,不做分布式,不引入中间件。
可读优先
格式是人和程序都能读的纯文本,十年后依然能打开。
算力在端侧
重计算放在浏览器里跑,服务器只负责把资源可靠送到,不为算力长期付费。
03 / 08

一次请求经过什么

浏览器 BROWSER
服务端渲染的页面 + 原生 JS 增强;语音识别在这一端推理。
接入层 NGINX 1.26
统一入口:TLS、静态资源、路由与反向代理。动态请求交给应用层,长连接交给实时层。
应用层 PHP 8.2
业务逻辑与页面渲染;鉴权、权限、门禁都在这一层完成。
存储层 FILES
文件系统即数据库:JSON 元数据、追加式消息日志、上传文件,按频道与模块分目录。

旁路:实时层 Node 20 + ws 维持全员长连接,负责广播与增量推送;
资源层把图片、音视频与语音模型单独存放,由接入层直接分发。

04 / 08

一条长连接,
消息毫秒级到人

服务端以「监听数据文件的增量」作为广播来源,所以无论消息从哪个入口进来,都能被统一广播,不必为每类消息单独接线。客户端只维护增量状态,历史一律按需分页补拉。

毫秒级在线成员
断线重连自动补拉
首屏裁剪按需分页
单一来源统一广播
05 / 08

用什么搭的

PHP8.2 · FPM
Node.js20 + ws · PM2
nginx1.26 · TLS
原生 HTML / CSS / JS无构建步骤
文件系统JSON + 追加日志
Chart.js仪表盘图表
Transformers.jsONNX · 端侧推理
CSS 变量主题多套配色
06 / 08

里面有什么

聊天与频道
公共聊天室 + 凭邀请码加入的私密频道,各有成员与权限。
博客
发文、评论、点赞、关注与浏览统计。
文库
书架 + 阅读器,支持分章发布与全书导出。
仪表盘
站点动态、统计图表、每日一句。
个人主页
资料展示、签到积分、等级徽章与称号。
语音消息
录制、播放,一键转成文字。
07 / 08

现在进来看看。

不用挑日子,随时都有人在。第一次来,注册之后就有自己的头像和签到了。

© 2024 芋头糕 · Love Will Continue. PHP 8.2 · Node 20 · nginx · 原生 JS / CSS
08 / 08