Skip to content

博客部署方案

记录本博客的部署架构和踩坑经验。

部署架构

本地 git push → CNB 仓库 → .cnb.yml 流水线
→ npm ci + VitePress build → rsync 同步 docs/.vitepress/dist
→ Nginx 静态服务

为什么改为 CNB 构建

  • 构建阶段由 CNB 承担,服务器不再执行 npm run docs:build
  • 服务器只接收静态产物,降低 CPU 和内存占用。
  • Nginx 站点目录保持为 docs/.vitepress/dist

服务器环境

项目说明
OSOpenCloudOS
面板宝塔面板
Web 服务器Nginx
发布方式CNB 构建后 rsync 同步
站点目录/www/wwwroot/blog-cven-cn/docs/.vitepress/dist

踩坑记录

服务器构建资源不足

小规格服务器同时运行 MySQL、Docker、Python/Node 服务时,VitePress 构建可能导致 CPU 打满或 SSH 无响应。

处理方式:

bash
pm2 stop blog-webhook

后续由 CNB 构建产物并同步到服务器。

服务器依赖版本不同步

服务器旧 node_modules 可能出现:

bash
vitepress@2.0.0-alpha.17 invalid: "^2.0.0-alpha.18"

当前主流程不依赖服务器 node_modules,由 CNB 执行 npm ci 后构建。

.user.ini 与 .well-known 目录保护

服务器站点目录中可能存在受保护文件:

  • .user.ini
  • .well-known/

rsync 同步时排除这些路径:

bash
rsync -az --delete \
  --exclude='.user.ini' \
  --exclude='.well-known/' \
  docs/.vitepress/dist/ \
  root@服务器:/www/wwwroot/blog-cven-cn/docs/.vitepress/dist/

网站返回 403

确认静态入口存在:

bash
ls -lh /www/wwwroot/blog-cven-cn/docs/.vitepress/dist/index.html

确认宝塔站点目录:

text
/www/wwwroot/blog-cven-cn/docs/.vitepress/dist

旧 webhook 停用

当前部署链路不再依赖 deploy-webhook.js。如 PM2 中仍有旧进程,可停用:

bash
pm2 stop blog-webhook
pm2 delete blog-webhook