feat: 实现 AIO 容器部署

This commit is contained in:
SkyJourney
2026-07-26 16:55:36 +08:00
parent d1b5880a5b
commit 15dd2acfc0
13 changed files with 425 additions and 32 deletions
+31 -14
View File
@@ -19,6 +19,7 @@ main
已有提交:
```text
d1b5880 feat: 实现 Chromium PDF 导出与精确预览
d625523 fix: 修复长文档分页与滚动同步
1d93f31 feat: 实现真实分页预览
52cf816 feat: 完善导出设置与打印预览
@@ -177,6 +178,18 @@ ec48bce chore: 初始化项目骨架
- 65 页附件的主要耗时来自 Mermaid 渲染、Paged.js 分页和 Chromium PDF 打印。
- PDF 缓冲区直接返回,避免无意义的二次 `Buffer` 复制。
### 3.5 AIO 容器部署
- 使用多阶段 Dockerfile 构建前端、后端和共享包。
- 基于 Node.js 22 Debian 构建运行镜像,并由项目锁定的 Playwright
`1.62.0` 安装精确匹配的 Chromium 与系统依赖。
- 单容器内由 Nginx 提供前端并代理 Fastify API。
- Playwright 通过同一 Nginx 地址加载精确预览运行时。
- 容器以非 root `pwuser` 运行并提供 1 GiB 共享内存。
- Compose 支持端口、只读主题目录、PDF 并发、队列和超时配置。
- 增加容器健康检查和统一进程退出处理。
- Nginx 显式以 JavaScript MIME 类型提供 PDF.js `.mjs` Worker。
## 4. 已执行验证
2026-07-26 在当前完整工作区成功执行:
@@ -218,11 +231,26 @@ git diff --check
- KaTeX、代码高亮和 Mermaid 正常显示;
- 浏览器控制台无警告或错误。
为方便用户继续检查,开发服务当前仍在后台运行,前端监听 5173,后端监听 3001。
2026-07-26 已在 Docker Desktop 完成 AIO 容器验证:
- Docker Compose 配置展开、镜像构建、启动、健康检查和重启恢复通过;
- 运行镜像约 611 MBNode.js、Nginx、Fastify 和 Chromium 均以非
root UID 999 运行;
- Nginx 首页、分页运行页、API、主题 CSS 和 PDF.js Worker 均正常;
- 默认只读挂载识别 1 个内置主题和 3 个本地主题;
- 周报通过容器导出为 4 页,附件通过容器导出为 65 页,Mermaid
错误数均为 0
- 两份 PDF 的所有页面均包含可搜索文字,附件共提取 68,434 个字符;
- 抽查周报第 1、4 页和附件第 1、33、65 页,未发现裁切、重叠、
黑块或空白页;
- 浏览器快速预览、主题切换、精确 PDF.js 预览和导出交互通过;
- 修复 Nginx 缺少 `.mjs` MIME 映射导致精确预览 Worker 加载失败的问题。
为方便用户继续检查,AIO 容器当前运行在 `http://localhost:8080`
## 5. 当前注意事项
- `output/` 可能包含本地 PDF 验证产物,不得提交。
- `output/` 可能包含本地 PDF 验证产物,已被 Git 忽略,不得提交。
- `apps/web/src/App.tsx` 负责分页 iframe 生命周期和父页面消息处理。
- `apps/web/src/paged-document-runtime.ts` 是快速预览和 PDF 共用的 Mermaid、资源等待和 Paged.js 分页运行时。
- `apps/web/src/paged-preview-frame.ts` 负责 iframe 消息协议和运行目标选择。
@@ -241,7 +269,7 @@ git diff --check
- `.local/theme-backups` 中保留 GitHub、Pixyll 和 Whitey 的可恢复备份;Newsprint 和 Night 的当前副本及备份已按用户要求删除。
- Typora 官方资源是 All Rights Reserved,仅限当前用户本机使用,不进入 Git、容器或发布包。
- 资源目录上传、本地相对图片、临时目录和路径安全尚未实现。
- Dockerfile 和 Compose 尚未实现
- AIO 容器已经通过 Docker Desktop 构建、端到端和浏览器验证
## 6. 推荐接手顺序
@@ -260,17 +288,6 @@ git diff --check
- 浏览器本地配置预设;
- 配置 JSON 导入和导出。
### 阶段三:容器化与交付
- Dockerfile
- Docker Compose
- Chromium 字体与中文字体;
- 非 root 用户;
- 健康检查;
- 临时目录容量限制;
- 内网部署说明;
- 完整 PDF 样例和视觉回归验证。
## 7. 首版验收目标
- 可以选择或粘贴 Markdown