路仔小屋

快乐每一天^_^

nas主力编辑hexo并git push

aluz 2026年10月01日 编辑

准备把nas作为主力了。终于成功了。编辑复杂。

Hexo-NAS 编辑器・项目备忘录

用途:出问题直接发给我,我可以快速复现场景、看懂整套环境,不用反复问你信息

一、硬件 & 平台

  • NAS:极空间
  • 硬盘:机械硬盘,存放 Hexo 博客文件
  • 文章总量:2000 篇 Markdown 文章,_posts 支持子目录嵌套
  • 前端页面:hexo-nas.html,内置编辑器,列表加载 / 编辑 / 删除 / Git 推送

二、Docker 容器信息

  • 容器名称:node
  • 镜像:node 基础镜像
  • 容器自启设置:✅【开机后自动启动此容器】已开启(极空间,无 unless-stopped 选项)
  • CPU 分配:4 核
  • 内存分配:16384MB(16G)
  • 定时启停容器:❌ 全部不勾选

挂载目录(重要)

  1. /hexo-editor:存放 server.js、hexo-nas.html、start.sh(持久化,NAS 硬盘,重建容器不会丢失)
  2. /blog-hexo:Hexo 博客根目录,source/_posts 文章目录
  3. /ssh-key:SSH 密钥目录(挂载 NAS,重建容器密钥不丢失,仅需修复权限)

容器内预装依赖

  • nodejs / express
  • git
  • openssh-client
  • netcat-openbsd(nc,用于 Mihomo 代理推送的 SSH ProxyCommand)

三、核心文件说明

  1. server.js

    • 后端服务,端口 3000
    • 接口:

      • /api/post-meta:读取文章 frontmatter 元数据(带内存缓存 + NAS 重启后台预加载缓存;保存 / 删除文章自动清空缓存)
      • /read:读取单篇 md 全文
      • /save:保存文章,保存后清空缓存
      • /delete:删除文章,删除后清空缓存
      • /git-status:查看 git 状态
      • /git-push:原生直连推送,执行脚本 /blog-hexo/hexo_push_auto.sh
      • /git-push-proxy:PC Mihomo SOCKS5 代理推送
    • 代理推送逻辑:临时写入/root/.ssh/config,使用 PC Mihomo 代理,推送完成自动恢复 ssh 配置
    • PC Mihomo 信息:PC_IP=192.168.0.103,SOCKS 端口 7897;PC 端 Mihomo 需要开启【允许局域网连接】
    • 注意:代理推送如果中途中断,ssh 配置不会自动回滚
  2. start.sh:容器启动脚本,用于拉起 node server.js;可选:增加 while 循环进程守护,node 崩溃自动重启
  3. /blog-hexo/hexo_push_auto.sh:Hexo 构建 + git 自动推送脚本

四、环境行为(NAS 重启流程)

  1. NAS 开机 → Docker 启动 → node 容器自动拉起
  2. 容器执行start.sh,启动 node server.js,监听 3000 端口
  3. server 启动 1 秒后,后台异步预扫描全部 2000 篇 md,填充文章元数据缓存
  4. 网页访问:首次加载慢(7~9 秒,机械盘 2000 文件扫描);后续刷新直接读内存缓存,毫秒级
  5. 编辑 / 保存 / 删除文章:自动清空内存缓存,下一次访问重新扫描获取最新列表

五、已知限制 & 坑点(故障排查重点)

  1. 极空间 Docker:仅 NAS 开机自动启动容器;如果 node 进程内部崩溃,容器不会自动重启,需要 start.sh 做进程守护
  2. 代理推送前提:PC 必须开机、Mihomo 运行,开启局域网允许连接;防火墙放行 7897 端口
  3. 代理推送异常中断风险:脚本中途卡死 / 断开请求,/root/.ssh/config 不会自动恢复,ssh 会一直走代理
  4. 容器删除重建会丢失:容器内部 git 全局配置 user.name/user.email(SSH 密钥在挂载目录,不会丢)
  5. 瓶颈:2000 篇 md + 机械盘,文件遍历 IO 慢;靠内存缓存解决页面加载速度

六、故障排查清单(出问题按顺序自查)

  1. 网页打不开:检查容器是否运行,端口 3000,查看容器日志看 node 服务是否正常启动
  2. 文章列表加载很慢:大概率缓存失效,首次全量扫描 2000 文件(机械盘固有问题)
  3. 代理推送失败:PC 是否开机、Mihomo 局域网开关、IP 和端口是否正确、容器内是否有 nc 命令
  4. 普通 git 推送失败:检查 git 仓库、ssh 密钥权限、hexo 脚本
  5. 保存 / 删除文章不更新列表:缓存未正常清空,查看 save/delete 接口返回

七、Git 相关

  • 仓库:github ssh 协议推送
  • 两种推送按钮:【推送(直连)】、【代理推送 (PC Mihomo) 绿色按钮】
  • 前端页面:hexo-nas.html,按钮调用对应后端接口,弹出日志面板,可关闭日志

八、前端页面改动记录

hexo-nas.html 改动:

  1. 按钮精简压缩为 2 行:博客已加载、新建、移动、删除、媒体
  2. Git 栏新增绿色【代理推送 (PC Mihomo)】按钮
  3. Git 执行后弹出日志面板,底部【关闭日志】一键收起日志面板
  4. 前端请求 /git-push-proxy 后端接口