补齐后端最小功能和前端
This commit is contained in:
1 parent
0e347aad9e
commit
3e7c9420fe
60 files changed
+8181
-329
No files matched your search
@@ -2,7 +2,7 @@
|
||||
|
||||
## 状态与日期
|
||||
|
||||
已接受,2026-10-16。替代 ADR-001 中共享仓库、slug 前缀隔离与固定正文路径的决定;唯一 Git 写入口、SSH 双重授权和账户存储现状不变。
|
||||
已接受,2026-10-16。索引格式与多页行为现由 [ADR-004](0004-toml-multipage-staging.md) 替代。替代 ADR-001 中共享仓库、slug 前缀隔离与固定正文路径的决定;唯一 Git 写入口、SSH 双重授权和账户存储现状不变。
|
||||
|
||||
## 决定
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# ADR-004:TOML 元信息、多页文章与索引暂存
|
||||
|
||||
## 状态与日期
|
||||
|
||||
已接受,2026-10-16。替代 ADR-003 中三列文本索引、Frontmatter 和入口缺失拒绝推送的约定。作者仓库隔离及唯一 Git 写入口保持有效。
|
||||
|
||||
## 决定
|
||||
|
||||
根索引使用 `index.toml`,每篇文章由 `[[articles]]` 登记。`id` 和 `folder` 为结构字段,作者可指定的元信息限于 `title`、`description`、`tags`、`cover`、`public` 和 `entry`,其中入口默认 `main.md`。拒绝未知字段,作者与系统时间不从 TOML、Markdown 或 Git author/date 读取。正文直接保存文本,不再解析 Frontmatter。
|
||||
|
||||
服务器从入口遍历同目录相对文档链接,导入最多 64 个可达页面及其图片,并额外导入封面。允许页面互相链接和锚点,不允许跨目录读取。未登记目录、不可达文档及未使用图片仍接受安全和容量检查,但不进入阅读快照或数据库。
|
||||
|
||||
接收校验区分安全失败和索引失败。非法路径、文件模式、危险内容及配额违规拒绝整个推送。TOML 缺失、语法错误、未知字段、元信息错误以及缺失的页面链接目标暂存提交,不替换该作者已有文章。索引有效但某篇入口不存在时,该文章视为不存在,不保留其旧公开版本。
|
||||
|
||||
服务端首次成功导入时生成创建时间,首次公开时生成发布时间。实际元信息、有效页面或图片变化时更新修改时间。修改无关文件、索引排版或其他文章不改变时间。系统时间与生效提交映射保存在私有 `collection.json`,同时同步到数据库。索引错误不会更新文章时间。
|
||||
|
||||
接收仓库 HEAD 可以是暂存版本,生效集合独立记录最后成功导入的作者提交。私有集合保存暂存提交和错误,进程重启后仍保留原生效文章。管理员状态接口返回暂存信息。数据库仍只保存生效文章、页面及标签的派生索引,索引失败自动重试,不阻塞已导入文章阅读。
|
||||
|
||||
## 取舍
|
||||
|
||||
坏索引不会导致旧文章消失,作者必须修复索引并正常推送下一提交。索引有效时,删除入口或删除文章条目才会撤回文章。清空全部文章需显式写入 `articles = []`,空 TOML 文件作为缺少结构字段处理。
|
||||
|
||||
系统时间无法仅从作者可伪造的 Git 提交时间恢复,必须备份私有集合。丢失集合后,当前 Git HEAD 若为坏索引,也不足以找回先前生效版本。备份恢复流程必须保留生效提交和系统元信息。
|
||||
|
||||
多页接口返回正文源文本、页面清单和资源地址,前端负责相对链接映射与安全渲染。`public = false` 暂时阻止所有公共读取;登录阅读内部文章和站长审核继续列入 TODO,不在本轮实现。
|
||||
|
||||
索引格式、迁移和操作示例见[文章发布](../publishing.md)与[运维与迁移](../operations.md)。
|
||||
@@ -0,0 +1,23 @@
|
||||
# ADR-005:Astro 阅读前端与同源部署
|
||||
|
||||
## 状态与日期
|
||||
|
||||
已接受,2026-10-16。按维护者要求增加简单前端,不改变 Git 唯一文章写入口。
|
||||
|
||||
## 决定
|
||||
|
||||
使用 Astro、TypeScript 与 Node 适配器进行服务端渲染,不增加 React 或浏览器状态框架。首页全部居中,展示施工标题、已完成和未完成部分及导航。文章列表和正文在服务端读取现有公开 API,筛选和分页状态保存在 URL。
|
||||
|
||||
注册、登录、公钥、密码与站长授权使用浏览器同源请求。会话继续由后端 Cookie 管理,CSRF 仅保存在当前页面内存。前端不获得数据库口令,不承担权限校验,也不提供在线文章编辑。
|
||||
|
||||
Markdown 禁止原始 HTML 并清理渲染结果。相对文档链接和图片只映射到同文章已导入的资源。前端设置 CSP 与禁用缓存,错误时展示真实故障或空状态,不填充示例文章。
|
||||
|
||||
Docker Compose 增加独立 Node 前端服务,Caddy 将页面转发到前端,将 `/api/*` 转发到 Rust。前端、API 与数据库只连接内部网络,不暴露宿主端口。ChuSQL 仅运行数据库服务,不启动其 Web 管理端。
|
||||
|
||||
通过 `REGISTRY_PREFIX` 选择容器镜像前缀,示例配置采用腾讯云内网镜像。非腾讯云环境需清空或调整该配置,项目不修改宿主 Docker 守护进程。
|
||||
|
||||
## 取舍
|
||||
|
||||
服务端渲染增加一个轻量 Node 服务,但避免静态构建后文章更新不同步。首页不依赖数据库或文章服务,仍能在服务故障时提供导航。单独运行生产 Node 服务不代理 `/api`,完整部署使用 Caddy;开发模式由 Vite 代理 API。
|
||||
|
||||
系统字体保持浏览器本地渲染,不引入外部字体与跟踪请求。评论、互动、内部文章阅读、审核、暗色模式和完整 SEO 继续列入 TODO。
|
||||
@@ -6,6 +6,8 @@
|
||||
| --- | --- |
|
||||
| [ADR-001](0001-git-only-publishing.md) | Git 唯一写入口与身份隔离;共享仓库方案已由 ADR-003 替代 |
|
||||
| [ADR-002](0002-external-dependencies.md) | 外部依赖子模块、固定提交与 HTTPS 回退 |
|
||||
| [ADR-003](0003-author-repositories-and-manifest.md) | 作者独立仓库与文章清单 |
|
||||
| [ADR-003](0003-author-repositories-and-manifest.md) | 作者独立仓库;文本索引方案由 ADR-004 替代 |
|
||||
| [ADR-004](0004-toml-multipage-staging.md) | TOML 元信息、多页正文、系统时间与索引暂存 |
|
||||
| [ADR-005](0005-astro-reading-frontend.md) | Astro 前端、同源 API 与 Docker/Caddy 编排 |
|
||||
|
||||
旧决策保留其历史背景;当前作者隔离与文章索引规则以 ADR-003 为准。
|
||||
旧决策保留其历史背景;当前作者隔离与文章索引规则以 ADR-003 和 ADR-004 为准。
|
||||
Reference in new issue
Block a user