💡 灵感来源:纸鹿 blog-v3
Dawnlight 是基于 Nuxt 4 的现代化博客系统,采用 SSR 渲染 + 文件存储,兼顾性能与体验。
| 层级 | 技术 |
|---|---|
| 后端 | Nuxt 4 + Nitro |
| 前端 | Vue 3 + TypeScript |
| 存储 | JSON + Markdown |
| 渲染 | Marked.js + KaTeX + Highlight.js |
- 📝 内容系统 — Markdown 驱动、全文搜索、精选文章、归档分类、标签云、阅读进度、自动 TOC
- 💬 互动功能 — 三态审核评论、QQ 头像、IP 归属地、友链系统、Toast 通知
- 🎨 视觉设计 — 毛玻璃风格、三段式主题、代码双色高亮、精细动画、全平台响应式
- 🛡️ 安全机制 — PBKDF2 密码存储、XSS 防护、CSRF 防护、速率限制
- ⚡ 性能优化 — 前后端缓存、懒加载、原子写入、ETag 缓存
- Node.js ≥ 18.0.0
- npm ≥ 9.0.0
# 克隆项目
git clone https://github.com/Perimsx/Dawnlight.git
cd Dawnlight
# 安装依赖
npm install
# 启动开发服务
npm run dev访问 http://localhost:3000 查看前台,http://localhost:3000/admin 进入管理后台。
| 命令 | 说明 |
|---|---|
npm run dev |
开发模式 |
npm run build |
生产构建 |
npm run preview |
预览构建 |
npm run generate |
静态生成 |
Fork 仓库后直接导入到 Vercel 或 Netlify,平台会自动检测 Nuxt 项目并配置。
Vercel 一键部署:
# 安装 PM2
npm install -g pm2
# 构建项目
npm run build
# 启动服务
pm2 start .output/server/index.mjs --name dawnlight
pm2 startup && pm2 saveNginx 反向代理配置:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}HTTPS 配置(Let's Encrypt):
apt install certbot python3-certbot-nginx
certbot --nginx -d yourdomain.comFROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM node:18-alpine AS runner
WORKDIR /app
COPY --from=builder /app/.output ./
ENV HOST=0.0.0.0 PORT=3000
EXPOSE 3000
CMD ["node", "server/index.mjs"]docker build -t dawnlight .
docker run -p 3000:3000 dawnlight- 修改
config/site.json站点信息 - 确保
storage/data/目录可写 - 配置 HTTPS 证书
- 设置数据备份计划
编辑 config/site.json:
{
"site": {
"name": "您的博客名称",
"title": "博客标题",
"slogan": "博客口号"
},
"author": {
"name": "您的名字",
"bio": "简介",
"avatar": "头像URL"
},
"siteInfo": {
"startTime": "2024-01-01",
"icp": "备案号",
"domain": "域名"
}
}文章存放在 content/posts/ 目录,命名规则:post-{timestamp}-{slug}.md
---
title: 文章标题
date: 2024-01-01
category: technology
tags: ["tag1", "tag2"]
featured: true
---
# 文章内容
使用 Markdown 编写内容,支持 GFM、KaTeX 公式、代码高亮。├── app/ # 前端源码(components/pages/layouts)
├── server/ # 后端 API(middleware/utils)
├── content/posts/ # Markdown 文章
├── config/ # 配置文件
├── storage/data/ # 运行时数据(评论、日志)
└── public/ # 静态资源
| 机制 | 实现 |
|---|---|
| 密码存储 | PBKDF2 (SHA-512) |
| XSS 防护 | DOMPurify + CSP |
| CSRF 防护 | Origin/Referer 验证 |
| 速率限制 | 全局 + 写操作分离 |
| 原子写入 | 临时文件 + rename |
访问 /admin 进入后台管理:
- 仪表盘 — 数据概览、图表统计
- 文章管理 — 双视图、Markdown 编辑器、自动保存
- 评论管理 — 状态筛选、批量审核、IP 归属地
- 站点设置 — 8 大模块配置
- 操作日志 — 多维过滤、CSV 导出
# 定期备份重要目录
tar -czf backup_$(date +%Y%m%d).tar.gz \
storage/data/ \
content/posts/ \
config/如何修改管理员密码?
登录后台 → 站点设置 → 密码修改
如何自定义主题色?
编辑 app/assets/css/style.css 中的 CSS 变量
如何重置配置?
登录后台 → 站点设置 → 配置重置
灵感来自 纸鹿 blog-v3
感谢以下开源项目:
Nuxt · Vue · TypeScript · Marked.js · Highlight.js · KaTeX · Chart.js · DOMPurify