多彩编程 多彩编程MZPH · CODE BLOG
全栈博客系统开发实战封面

全栈博客系统开发实战

Vue3 + Node/Python技术栈
10 周开发周期
1 人独立开发
完整上线交付成果

项目背景

作为一名独立开发者,我希望拥有一个完全自主的技术博客:前端可定制、后端可控、数据自留。市面博客系统要么太重、要么不够灵活,于是决定从零搭建一套全栈博客系统,前端用 Vue3,后端用 Node/Python,数据库 MySQL,一个人完成从设计到上线的全流程。这个项目也是全栈学习路线的终极实战。

全栈的真正意义,是能把一个想法完整地变成线上产品。

技术选型

独立开发追求效率与可控,选型兼顾熟悉度与生态:

  • 前端:Vue3 + Vite + Pinia,Markdown 渲染用 markdown-it + 代码高亮
  • 后端:Node.js(Express)做主服务,Python(Flask)做爬虫与数据分析辅助
  • 数据库:MySQL 存文章与用户,Redis 做缓存与访问统计
  • 鉴权:JWT,无状态登录,前后端分离友好
  • 部署:Docker Compose 编排前端、后端、数据库三件套
  • 图床:对象存储 + CDN,文章图片独立托管

架构设计

前后端分离,前端通过 RESTful 接口与后端通信。后端采用经典三层架构:路由层、业务层、数据层。后端接口示例:

// Node.js Express — 文章接口
const express = require('express')
const router = express.Router()
const auth = require('../middleware/auth')
const Article = require('../models/Article')

// 获取文章列表(分页)
router.get('/articles', async (req, res) => {
  const { page = 1, size = 10, category } = req.query
  const query = category ? { category } : {}
  const list = await Article.find(query)
    .skip((page - 1) * size)
    .limit(Number(size))
    .sort({ created_at: -1 })
  res.json({ code: 0, data: list })
})

// 新建文章(需登录)
router.post('/articles', auth, async (req, res) => {
  const article = await Article.create({
    ...req.body,
    author_id: req.userId
  })
  res.json({ code: 0, data: article })
})

module.exports = router

数据库设计遵循第三范式,文章表、分类表、标签表、用户表通过外键关联,文章与标签为多对多关系,独立中间表维护。

难点解决

前后端联调

独立开发时前后端联调主要卡在跨域与鉴权。开发期用 Vite proxy 代理后端接口,统一处理 CORS;生产期由 Nginx 反向代理,前后端同域,彻底规避跨域问题。

// vite.config.js — 开发期代理
export default {
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true
      }
    }
  }
}

Markdown 渲染与安全

文章正文用 Markdown 存储,前端渲染时需防 XSS。用 DOMPurify 清洗 HTML,并对代码块做语法高亮,兼顾安全与美观。

部署运维

一个人维护服务器精力有限,用 Docker Compose 一键编排,配合 GitHub Actions 自动构建推送,更新只需一条命令拉取新镜像重启。

# docker-compose.yml — 一键部署
services:
  web:
    build: ./frontend
    ports: ['80:80']
  api:
    build: ./backend
    ports: ['3000:3000']
    depends_on: [mysql, redis]
  mysql:
    image: mysql:8
    volumes: ['db-data:/var/lib/mysql']
  redis:
    image: redis:7

项目成果

博客系统完整上线,支持 Markdown 写作、分类标签、评论、访问统计与后台管理,前后端数据流畅联通。从需求到上线一个人 10 周完成,真正跑通了全栈学习路线的每个环节,成为后续接私单与产品孵化的基础平台。

  • 功能模块:文章、分类、标签、评论、后台 5 大模块
  • 交付周期:10 周独立完成
  • 部署方式:Docker Compose 一键编排
  • 持续维护:GitHub Actions 自动化构建
RELATED

相关 技术好文

延伸阅读,把案例里的知识点彻底吃透。