梨窝与梨记介绍

梨窝是什么

梨窝(lily-nest) 是一个基于 Rust + Axum 的个人网站项目。

它跑在一台玩客云(Armv7l Cortex-A5 4C4T,1G DDR3 内存)上,在未加入梨记模块的时候,冷启动只吃 684KB 内存,稳定运行常驻 3.3MB。本地回路 QPS 可以跑到 65 万(HTTP/1.1)。

没有数据库、没有前端框架、没有 Docker——就是 Rust 编译出来的一个 6.9MB 二进制,扔到服务器上稍微配置下就能跑。

技术栈

  • 后端:Rust 2024 + Axum + Tokio
  • 前端:原生 HTML + Material You CSS,零 JS 框架依赖
  • 配置:TOML 文件驱动(site.toml / projects.toml / changelog.toml / config.toml)
  • TLS:rustls,release 模式强制 HTTPS
  • 安全:CSP、HSTS、JWT 管理后台认证、Rate Limit、HPACK bomb 32KB 协议层防御

主要功能

  • 首页动态渲染(项目展示、关于我、更新日志时间轴)
  • 管理后台(/admin):在线编辑 TOML 配置 + 笔记 CRUD,JWT 鉴权
  • 静态资源预压缩(Gzip / Brotli / Zstd)
  • 三级缓存:内存缓存 → 304 协商 → CDN 边缘
  • RFC 9116 security.txt 安全披露支持
  • RESTful API(health / profile / admin)

梨记是什么

梨记(lily-note) 是 v0.3.0 引入的轻量级笔记模块。

每篇笔记就是一个带 frontmatter 的 .md 文件,放在 notes/ 目录下。没有 MySQL,没有 Redis,只有纯文本文件。

纯文件驱动

写 markdown 就是写笔记,直接 scp 进去也能用

100% 异步非阻塞

基于 tokio::fs,不阻塞事件循环

全文检索

原生 JS 实现,零网络请求,支持标题 / 摘要 / #标签 过滤

管理后台

在线编辑器新建、编辑、删除笔记,实时落盘

Markdown 原文直出

支持 ?format=markdown 或 Accept: text/markdown 返回原始 .md

缓存友好

详情页 CF 边缘缓存 1h,列表页实时更新

部署

梨窝目前跑在玩客云(OneCloud / armv7l)上,通过 systemd 管理,WG 隧道 + Cloudflare 代理对外服务。二进制约 6.9MB(tar.xz 打包后 2.4MB),部署就是 scp + 重启服务的事。

/etc/systemd/system/lily-nest.service

[Unit]
Description=Lily Nest Rust Web Service
After=network.target

[Service]
Type=simple
ExecStart=/data/lily-nest/lily-nest
WorkingDirectory=/data/lily-nest/
Restart=always
RestartSec=5
User=lily-nest
Group=lily-nest
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

注意:梨记的缓存目前关闭了,迁就这个 Accept: text/markdown 请求头。