跳到主要内容

自托管 Next.js 博客 CMS 实战指南(2026)

· 阅读需 4 分钟
reactpress
reactpress

ReactPress — Publish with React. Ship like WordPress.

「我们要一个自托管的 Next.js 博客」听起来简单。实操上往往会拆成三个项目:CMS、Admin、主题 — 外加备份、SEO 与鉴权。本指南给出一条务实的 2026 路径:数据留在自有基础设施上,体验仍像产品,而不是周末硬拼。

一句话: 用已经接好 Admin + API + Next.js 主题的发布平台。ReactPressreactpress init60 秒拉起本地栈,默认 SQLite(无需 Docker)。

相关文档: 面向 React 的自托管 CMS · 60 秒 Next.js 博客 · 生产部署


「自托管 Next.js CMS」应包含什么

层级为什么重要
Next.js 访客站SSR/ISR 支撑 SEO 与 Core Web Vitals
Admin非 Git 的编辑发布
API / 数据库你能掌控的持久内容
媒体上传到本地磁盘或对象存储
SEO 管道标题、canonical、sitemap、OG
运维备份、doctor/logs、反代

少任何一层,你又回到 Strapi + create-next-app + 自研上传路由。


方案 A — DIY(灵活,慢)

典型栈:

  1. Strapi / Payload / 仓库里的 MDX
  2. 自建 Next.js App Router 站点
  3. 预览模式、Webhook 重建、图片流水线
  4. 自研鉴权与角色

优点: 控制力最大。缺点: 编辑能安全发文前可能要数周;每个 CVE 与升级都归你。

DIY 适合平台团队,对公司博客往往过贵。


方案 B — ReactPress(产品化自托管)

ReactPress 是面向 React 开发者的开源发布系统

  • NestJS API(默认 Headless REST)
  • Vite Admin(文章、页面、媒体、评论、主题、插件)
  • 带 SSR SEO 的 Next.js 主题
  • Hook 插件(SEO、摘要、图片优化等)
  • 可选 Electron 桌面端离线写作
npm i -g @fecommunity/reactpress@beta
mkdir my-blog && cd my-blog
reactpress init
界面地址
博客http://localhost:3001
Adminhttp://localhost:3001/admin/
APIhttp://localhost:3002/api

默认账号:请立即修改 admin / admin


自托管的数据库选择

阶段建议
笔记本 / 小站SQLite(默认)— 零运维
增长 / 共享库MySQL
容器Docker 指南

务必备份数据库 + uploads/。配置说明:配置项


自托管 Next.js 博客 SEO 清单

  1. 启用 SEO 插件并填写单篇 meta
  2. 确认主题 /sitemap.xmlrobots.txt
  3. 生产环境写好公网站点 URL
  4. 使用 SSR/ISR — 避免纯客户端文章页
  5. 压缩图片(内置 image-optimizer 可辅助)

详情:站点设置与 SEO


生产环境提纲

  1. VPS 或 Node 主机 + 反代(Caddy/Nginx)
  2. 进程管理或 Docker 跑 API + 主题
  3. TLS、限制 Admin 暴露、轮换密钥
  4. 定时备份 DB + uploads
  5. 部署后跑 reactpress doctor

完整指南:生产环境部署


自托管 vs SaaS

自托管 ReactPressSaaS Headless
数据驻留你的磁盘 / 你的库厂商云
成本模型仅基础设施(MIT 软件)席位 + API + 流量
访客站内置 Next 主题通常另建
离线写作桌面客户端少见

要零运维选 SaaS;要数据主权与 React 栈统一选自托管。


常见问题

需要 Kubernetes 吗?
不需要。很多博客跑在单台 VM 上。

能保留自己的 Next.js 应用吗?
可以 — Headless API + API Key。见 Headless API

4.0 能上生产吗?
active beta;请先预发。FAQ · 3→4 迁移


从这里开始

npm i -g @fecommunity/reactpress@beta
mkdir my-blog && cd my-blog
reactpress init

接着阅读 ReactPress 是什么?面向 React 的自托管 CMS

English