Skip to content

linjonh/TechBlog

Repository files navigation

Next-js Blog Project

导入makerdown文件到数据库记录

需要修改js里的 authentication API token 和数据库部署的URL地址

node create-categories-tags.js
node import-md-with-relations.js

博客框架:strapi + PostgreSQL + nextjs-blog

我目前情况:

✔ 有非常多文章(上万篇)
✔ 内容以 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(后端 CMS) + PostgreSQL(数据库) + Next.js(前端)

这是现在“上万篇文章网站”最常用、可扩展性最强的组合。


✅ 第一步:搭建 Strapi(内容后台)

Strapi 是基于 Node.js 的 Headless CMS,很容易用。

1. 安装 Node.js 18+

本地或服务器(建议 Linux)安装 Node.js(18 或以上)。

2. 新建 Strapi 项目

npx create-strapi-app blog-cms --quickstart

运行后打开:

http://localhost:1337/admin

即可进入后台。


✅ 第二步:创建“文章模型”

在 Strapi 后台里:

  1. Content-Type Builder → Create new collection type

  2. 名字:article

  3. 添加字段:

    • title(文本)
    • slug(唯一文本)
    • content(Rich Text 或 Markdown)
    • date(日期)
    • tags(多选)
    • category(单选)

保存后 Strapi 会自动生成 API:

GET /api/articles
GET /api/articles/:id

你已经有一个可供前端使用的 API 了。


✅ 第三步:让 Strapi 支持 markdown 批量导入(上万篇文章)

你可能已有大量 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 前端

Next.js 负责展示文章页面。

新建 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}`);

Next.js 里用 ISR(Incremental Static Regeneration)

让页面自动更新而无需全站构建:

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 秒自动更新一次
  };
}

✅ 第五步:加入搜索(上万篇文章必须要有)

你可以用:

Meilisearch(极速、开源、强烈推荐)

安装:

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 即可。


✅ 第六步:部署方案(最稳)

Strapi(后端)部署到 VPS 或 Docker:

docker run -p 1337:1337 strapi/strapi

Next.js(前端)部署到:

  • Vercel(最简单)
  • Cloudflare Pages(免费)
  • Netlify

搜索(Meilisearch)部署到:

  • VPS 上 Docker
  • 或 Meilisearch Cloud

✅ 整体架构图(超简单版本)

     你写文章(Markdown)
             ↓
      Strapi (CMS) —— PostgreSQL
             ↓
      Meilisearch (全文搜索)
             ↓
      Next.js 前端网站 (ISR/SSR)
             ↓
           用户访问

无论几千篇、上万篇文章,都能秒级访问、稳定运行。


About

技术博客,软件研发相关的技术文章网站

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published