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(热加载),文章更新可以实时同步。但上线后存在以下问题:

  1. 更新延迟:修改文章后需要重新 build 才能生效
  2. 部署复杂:需要手动 trigger 或配置 Webhook 自动部署
  3. 用户体验:无法实现真正的”即改即见”

1.3 目标#

实现 Firefly 的 SSR(服务器端渲染)模式,使得:

  • 文章更新无需重新 build
  • 用户访问时实时获取最新内容
  • 保留静态博客的高性能优势(可选 hybrid 模式)

二、现有架构分析#

2.1 当前技术栈#

组件技术说明
前端Astro + Firefly 主题静态站点生成器
后端Django博客管理
数据库MySQL存储文章数据
评论系统ArtalkDocker 部署在 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' 模式,理由:

  1. 保留静态性能:大部分页面(如首页、关于页、友链)保持静态
  2. 动态文章内容:文章页面实时从 API 获取
  3. 平滑过渡:可以逐步迁移,无需完全重构

四、实现步骤#

4.1 环境准备#

Terminal window
# 进入 Firefly 目录
cd /home/bahua/blog/Firefly
# 安装 SSR 适配器
pnpm add @astrojs/node

4.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

需要修改的部分:

  1. 移除 getStaticPaths - SSR 模式下不再需要在构建时生成所有路径
  2. 动态获取文章数据 - 根据 slug 判断来源,从本地文件或 Django API 获取

4.4 运行 SSR 模式#

Terminal window
# 开发模式(推荐)
pnpm dev
# 或构建后运行
pnpm build
node dist/server/entry.mjs

五、部署方案#

5.1 本地部署#

Terminal window
cd /home/bahua/blog/Firefly
pnpm dev

服务运行在 http://localhost:4321

5.2 服务器部署#

Terminal window
# 构建
pnpm build
# 运行 SSR 服务器
node dist/server/entry.mjs

可以使用 PM2 管理进程:

Terminal window
pm2 start dist/server/entry.mjs --name firefly

六、优缺点对比#

特性SSG(当前)SSRHybrid
内容实时性需要 rebuild实时实时(动态部分)
性能最快较慢中等
部署复杂度简单中等中等
服务器要求低(静态托管)高(Node.js)中等

七、总结#

实施方案#

  1. 安装依赖pnpm add @astrojs/node
  2. 修改配置astro.config.mjs 设置为 hybrid 模式
  3. 调整代码:修改 [...slug].astro 动态获取文章
  4. 测试验证:确保本地运行正常
  5. 部署上线:选择合适的部署方式

预期效果#

  • ✅ Django Admin 修改文章后,Firefly 立即可见
  • ✅ 无需手动 rebuild 或 Webhook 触发
  • ✅ 保留静态页面性能优势(Hybrid 模式)
  • ✅ 开发体验与上线后一致

报告生成时间:2026-03-09
作者:bahua

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Astro SSR 方案技术报告
https://astro.bahua.de/posts/astro-ssr-report/
作者
bahua
发布于
2026-03-09
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
bahua
Hello, I'm bahua.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
40
分类
8
标签
45
总字数
19,835
运行时长
0
最后活动
0 天前

目录