# 部署与运维 ## 实现方式 nginx 自带 **njs**(`ngx_http_js_module`),`/md/` 下的请求全部交给它处理: ```nginx location / { js_content mdview.handler; # 目录 -> 首页;.md -> 渲染页;其他 -> 内部转发给静态 } ``` - **首页**:读目录项(目录优先,文件按修改时间倒序)生成卡片页; 若目录下有 `README.md`,同时渲染成正文 - **文档页**:原始 markdown 以 JSON 字符串嵌入页面,交给浏览器里的 marked.js 渲染 - 磁盘上不落任何转换产物,改完文件刷新即生效 ## 路径规则 | 请求 | 结果 | | --- | --- | | `/` | 301 → `/md/` | | `/md/` | 首页(卡片列表 + README 正文) | | `/md/xxx.md` | 渲染后的文档(`?raw=1` 看源文件) | | `/md/docs/` | 子目录同样出首页 | | `/md/图片.png` | njs 内部转发到 `/__static/`,原样静态返回 | `__static/` 标记为 `internal`,外部直接访问是 404。 ## 首页怎么改好看 - 样式:`/app/mdview/assets/style.css`(hero 渐变、卡片网格、角标配色都在里面) - 结构:`/app/mdview/mdview.js` 的 `indexPage()` - 交互:`/app/mdview/assets/render.js`(筛选框、目录生成、外链新窗口) 改完 `systemctl reload nginx`,静态资源刷新浏览器即可。 ## 换端口 / 换前缀 - 端口:改 `/etc/nginx/nginx.conf` 里的 `listen 80` - 前缀:改 `mdview.js` 里的 `PREFIX`(默认 `/md`)和 `nginx.conf` 里对应的 location ## 离线可用 marked.min.js、render.js、style.css 都在 `/app/mdview/assets` 下由 nginx 直接 `alias` 出去, 不依赖任何 CDN,断网环境也能渲染。 ## 运行方式(主机直跑,不用容器) | 项 | 位置 | | --- | --- | | 主配置 | `/etc/nginx/nginx.conf` | | 文档目录 | `/app/markdown`(`mdview.js` 里的 `ROOT`) | | 渲染资源 | `/app/mdview/assets` → `/_md/` | | njs 脚本 | `/app/mdview/mdview.js`(`js_import` 直接引用,改完 reload 生效) | | 服务 | `systemctl enable --now nginx` |