Astro SSR 方案技术报告
915 字
5 分钟
Astro SSR 方案技术报告
Astro SSR 方案技术报告
一、背景与目标
1.1 项目背景
当前 Firefly 主题博客系统采用 SSG(静态站点生成)模式,文章内容在构建时生成静态 HTML 文件。Django 作为后端博客管理系统,通过以下方式与 Firefly 集成:
- Django Admin 管理文章
- 同步脚本将 Django 文章生成 Markdown 文件到 Firefly
- Firefly 构建时读取本地 Markdown 文件生成静态页面
1.2 存在的问题
开发模式下使用 pnpm dev(热加载),文章更新可以实时同步。但上线后存在以下问题:
- 更新延迟:修改文章后需要重新 build 才能生效
- 部署复杂:需要手动 trigger 或配置 Webhook 自动部署
- 用户体验:无法实现真正的”即改即见”
1.3 目标
实现 Firefly 的 SSR(服务器端渲染)模式,使得:
- 文章更新无需重新 build
- 用户访问时实时获取最新内容
- 保留静态博客的高性能优势(可选 hybrid 模式)
二、现有架构分析
2.1 当前技术栈
| 组件 | 技术 | 说明 |
|---|---|---|
| 前端 | Astro + Firefly 主题 | 静态站点生成器 |
| 后端 | Django | 博客管理 |
| 数据库 | MySQL | 存储文章数据 |
| 评论系统 | Artalk | Docker 部署在 8888 端口 |
2.2 当前数据流
Django Admin 保存文章 ↓同步脚本生成 django-{id}.md ↓Astro 构建时读取 Markdown ↓生成静态 HTML ↓用户访问静态页面三、SSR 方案详解
3.1 SSG vs SSR vs Hybrid
SSG(静态站点生成)- 当前模式
- 优点:性能最快,部署简单
- 缺点:更新需要重新 build
SSR(服务器端渲染)
- 优点:内容实时更新,无需 rebuild
- 缺点:每次访问都需要服务器处理,性能较低
Hybrid(混合模式)
- 优点:兼顾性能与动态性
- 缺点:配置相对复杂
3.2 推荐方案:Hybrid 模式
推荐使用 output: 'hybrid' 模式,理由:
- 保留静态性能:大部分页面(如首页、关于页、友链)保持静态
- 动态文章内容:文章页面实时从 API 获取
- 平滑过渡:可以逐步迁移,无需完全重构
四、实现步骤
4.1 环境准备
# 进入 Firefly 目录cd /home/bahua/blog/Firefly
# 安装 SSR 适配器pnpm add @astrojs/node4.2 配置 Astro
修改 astro.config.mjs:
import { defineConfig } from 'astro/config';import node from '@astrojs/node';
export default defineConfig({ output: 'hybrid', adapter: node({ mode: 'standalone' }),});4.3 修改文章页面逻辑
文件:src/pages/posts/[...slug].astro
需要修改的部分:
- 移除
getStaticPaths- SSR 模式下不再需要在构建时生成所有路径 - 动态获取文章数据 - 根据 slug 判断来源,从本地文件或 Django API 获取
4.4 运行 SSR 模式
# 开发模式(推荐)pnpm dev
# 或构建后运行pnpm buildnode dist/server/entry.mjs五、部署方案
5.1 本地部署
cd /home/bahua/blog/Fireflypnpm dev服务运行在 http://localhost:4321
5.2 服务器部署
# 构建pnpm build
# 运行 SSR 服务器node dist/server/entry.mjs可以使用 PM2 管理进程:
pm2 start dist/server/entry.mjs --name firefly六、优缺点对比
| 特性 | SSG(当前) | SSR | Hybrid |
|---|---|---|---|
| 内容实时性 | 需要 rebuild | 实时 | 实时(动态部分) |
| 性能 | 最快 | 较慢 | 中等 |
| 部署复杂度 | 简单 | 中等 | 中等 |
| 服务器要求 | 低(静态托管) | 高(Node.js) | 中等 |
七、总结
实施方案
- 安装依赖:
pnpm add @astrojs/node - 修改配置:
astro.config.mjs设置为hybrid模式 - 调整代码:修改
[...slug].astro动态获取文章 - 测试验证:确保本地运行正常
- 部署上线:选择合适的部署方式
预期效果
- ✅ Django Admin 修改文章后,Firefly 立即可见
- ✅ 无需手动 rebuild 或 Webhook 触发
- ✅ 保留静态页面性能优势(Hybrid 模式)
- ✅ 开发体验与上线后一致
报告生成时间:2026-03-09
作者:bahua
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
Astro SSR 方案技术报告
https://astro.bahua.de/posts/astro-ssr-report/ 相关文章 智能推荐
1
Firefly 代码块示例
文章示例 在Firefly中使用表达性代码的代码块在 Markdown 中的外观。
2
Firefly 一款清新美观的 Astro 博客主题模板
文章示例 Firefly 是一款基于 Astro 框架和 Fuwari 模板开发的清新美观且现代化个人博客主题模板,专为技术爱好者和内容创作者设计。该主题融合了现代 Web 技术栈,提供了丰富的功能模块和高度可定制的界面,让您能够轻松打造出专业且美观的个人博客网站。
3
在文章中嵌入视频
文章示例 这篇文章演示如何在博客文章中嵌入视频。
4
Firefly 布局系统详解
博客指南 深入了解 Firefly 的布局系统,包括侧边栏布局(左侧/双侧)和文章列表布局(列表/网格),以及自适应网格列数。
5
Firefly 简单使用指南
博客指南 如何使用 Firefly 博客模板。
随机文章 随机推荐