Appearance
博客部署方案
记录本博客的部署架构和踩坑经验。
部署架构
本地 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。
服务器环境
| 项目 | 说明 |
|---|---|
| OS | OpenCloudOS |
| 面板 | 宝塔面板 |
| 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