需要修改js里的 authentication API token 和数据库部署的URL地址
node create-categories-tags.js
node import-md-with-relations.js我目前情况:
✔ 有非常多文章(上万篇)
✔ 内容以 Markdown 为主
✔ 有技术背景(Node.js、CI/CD、Prisma、Next.js 都熟)
✔ 想要性能好、可扩展
最优解:Next.js + Strapi(Headless CMS) + Meilisearch
优势非常明显:
功能 实现方式
内容管理 Strapi(超级方便)
存储 PostgreSQL
前台展示 Next.js
搜索 Meilisearch(极速)
部署 Vercel/Cloudflare 或你自己的 VPS
性能:
上万篇文章毫无压力
不再有静态构建卡死
可扩展为门户网站级别
一步一步搭建一个最适合上万篇文章的 Headless CMS 架构。
为了简单、稳定、扩展性强,我建议:
这是现在“上万篇文章网站”最常用、可扩展性最强的组合。
Strapi 是基于 Node.js 的 Headless CMS,很容易用。
本地或服务器(建议 Linux)安装 Node.js(18 或以上)。
npx create-strapi-app blog-cms --quickstart运行后打开:
http://localhost:1337/admin
即可进入后台。
在 Strapi 后台里:
-
Content-Type Builder → Create new collection type
-
名字:
article -
添加字段:
title(文本)slug(唯一文本)content(Rich Text 或 Markdown)date(日期)tags(多选)category(单选)
保存后 Strapi 会自动生成 API:
GET /api/articles
GET /api/articles/:id
你已经有一个可供前端使用的 API 了。
你可能已有大量 markdown 文件。
你可以用命令行脚本批量导入,例如:
const fs = require('fs');
const axios = require('axios');
async function uploadMD() {
const files = fs.readdirSync('./posts');
for (const file of files) {
const md = fs.readFileSync(`./posts/${file}`, 'utf8');
const title = file.replace('.md', '');
await axios.post('http://localhost:1337/api/articles', {
data: {
title,
content: md,
}
});
}
}
uploadMD();这可以把所有 markdown 文章导入 Strapi 的数据库。
你有多少篇文章都没关系,10 万篇都能存。
Next.js 负责展示文章页面。
npx create-next-app blog-web在 Next.js 页面中 API 调用:
const res = await fetch('http://localhost:1337/api/articles');
const data = await res.json();const res = await fetch(`http://localhost:1337/api/articles/${slug}`);让页面自动更新而无需全站构建:
export async function getStaticProps() {
const res = await fetch('http://localhost:1337/api/articles');
const data = await res.json();
return {
props: { articles: data },
revalidate: 60, // 每 60 秒自动更新一次
};
}你可以用:
安装:
curl -L https://install.meilisearch.com | sh
./meilisearch或
docker run -it --rm \
-p 7700:7700 \
-e MEILI_MASTER_KEY="masterKey" \
getmeili/meilisearch:latest同步 Strapi 内容:
- 安装 strapi-plugin-meilisearch
- 自动 push 数据到搜索索引
前端调用搜索 API 即可。
docker run -p 1337:1337 strapi/strapi- Vercel(最简单)
- Cloudflare Pages(免费)
- Netlify
- VPS 上 Docker
- 或 Meilisearch Cloud
你写文章(Markdown)
↓
Strapi (CMS) —— PostgreSQL
↓
Meilisearch (全文搜索)
↓
Next.js 前端网站 (ISR/SSR)
↓
用户访问
无论几千篇、上万篇文章,都能秒级访问、稳定运行。