Skip to content

Liu-Hong-Wei/Blog

Repository files navigation

全栈个人博客系统 (Full-Stack Personal Blog)

这是一个基于现代化前后端分离架构构建的个人博客系统。本项目旨在提供一个极简、高性能且易于维护的写作与展示平台。整个项目完全容器化,集成了自建图床服务,并使用了自动化 HTTPS反向代理解决方案。

💡 核心亮点与工程化实践

  • ⚡ 前端工程化体系: 基于 React 19 + Vite 搭建,结合 TypeScript 实现组件级类型约束与高复用设计;统一 ESLint 与 Prettier 规范,大幅提升代码一致性与维护效率。
  • 🚀 性能全链路优化:
    • 首屏提速: 基于路由懒加载与组件拆分降低初始包体积,并按页面维度进行核心指标 (如 LCP) 优化,使主页面加载迅捷。
    • 打包优化: 基于 Vite (Rollup) 配置 manualChunks 拆分第三方依赖与业务模块,优化缓存粒度并提升长期缓存命中率,显著降低重复加载成本。
  • 🔄 数据缓冲与状态管理: 基于 React Suspense 与自定义缓存策略 (Hooks) 封装数据请求层,减少网络冗余请求。在多篇文章跳转的场景下,降低了冗余网络开销,切换极致流畅。
  • 📝 高阶 Markdown 架构: 深度整合 Unified.js 生态构建 Markdown 渲染流水线。支持解析 GFM、自动生成标题锚点、Shiki 代码高亮与定制化语法扩展;配合 Framer Motion 的出场与滚动动效,提供沉浸式阅读体验。
  • 🐳 基础设施基建: 全面采用 Docker / Docker Compose 容器化部署;配合 nginx-proxyacme-companion 实现自动 HTTPS 证书签发与流量分发;单独搭建 Chevereto 作为图床基建。

🛠️ 技术栈构成

Frontend (前端架构)

  • 框架体系: React 19, TypeScript, React Router 7
  • 工程化工具: Vite (集成 manualChunks), ESLint, Prettier
  • 视觉体系: Tailwind CSS 4, Motion (Framer Motion)
  • 数据缓冲机制: React Suspense + Context/Custom Hooks
  • Markdown 渲染: Unified.js 生态 (remark-parse, rehype-react, Shiki 等)

Backend (后端)

  • 框架: Python 3.12, Django 5, Django REST Framework
  • 数据库: PostgreSQL 18
  • WSGI Server: Gunicorn

Infrastructure (基础设施体系)

  • 反向代理: Nginx, jwilder/nginx-proxy
  • SSL证书: nginxproxy/acme-companion
  • 容器化: Docker, Docker Compose
  • 独立图床: Chevereto + Redis + MariaDB

🏗️ 系统架构图

本项目采用了典型的微服务/多容器协同架构,由 Nginx-Proxy 作为统一的流量入口。

+-------------------+       HTTP/HTTPS      +-------------------------------------------+
|   用户浏览器 / 客户端 |---------------------> |              云服务器 (VPS)                 |
+-------------------+                       | +-----------------------------------------+ |
                                            | |         Docker Engine                 | |
                                            | +-----------------------------------------+ |
                                            |                      |                      |
                                            |      监听宿主机 80 & 443 端口                |
                                            |                      |                      |
                                            | +--------------------V--------------------+ |
                                            | |      nginx-proxy (统一反向代理网关)        | |  <------->+--------------------+
                                            | +--------------------|--------------------+ |           |  acme-companion    |
                                            |                      |                      |           | (SSL 证书自动管理)   |
                                            |     读取 Host 请求头,进行虚拟主机路由分发       |           +--------------------+
                                            |                      |                      |
+-------------------------------------------/                      \-----------------------------------+
| Host: liuhongwei.org (博客主站域名)                                  | Host: img.liuhongwei.org (图床主域名)|
|                                                                    |                                   |
V                                                                    V                                   V
+-------------------------------------------------+          +-----------------------------------+
|               博客前端容器 (React + Vite)          |          |     Chevereto 图床应用容器           |
| +---------------------------------------------+ |          | +-------------------------------+ |
| | Nginx (托管静态文件,提供 /api 反代至后端)        | |          | | PHP-FPM / Apache              | |
| +---------------------|-----------------------+ |          | +---------------|---------------+ |
|                       | (透传 API 请求至后段)     |          |                 |                 |
|                       V                         |          |                 V                 V
| +---------------------V-----------------------+ |          | +---------------V---------------+ +---------------+
| |             博客后端容器 (Django)               | |          | |      MariaDB (关系型数据库)    | |  Redis (缓存)   |
| +---------------------|-----------------------+ |          | +-------------------------------+ +---------------+
|                       | (操作与查询)             |          |
|                       V                         |          |
| +---------------------V-----------------------+ |          |
| |          PostgreSQL 容器 (博客核心数据)         | |          |
| +---------------------------------------------+ |          |
+-------------------------------------------------+          +-----------------------------------+

🚀 本地开发与运行 (Quick Start)

项目配置了完整的本地开发镜像编排文件 (docker-compose.dev.yml)。

1. 克隆代码与初始配置

git clone <repository_url>
cd Blog

# 配置环境变量 (请参考 .env.example)
cp .env.example .env

2. 启动开发环境

使用 Docker Compose 一键启动前后端以及数据库。

# 启动所有服务 (前端:Vite开发服务器 / 后端:Django runserver / DB:PostgreSQL)
docker compose -f docker-compose.dev.yml up --build

此时,前端将运行在并映射出对应端口(如 http://localhost:5173),后端 API 及 Admin 面板运行在 http://localhost:8000

注:如果需要在本地安装依赖进行 IDE 提示支持,可在宿主机分别进入 frontendbackend 目录运行 npm installpip install -r requirements.txt


🚢 生产环境部署说明

生产环境部署侧重于安全性、隔离性与自动化:

  1. 网络隔离: 所有的 Docker 服务(应用后端、数据库等)都配置在内部对应的 bridge 网络中,仅将必需的端口通过 nginx-proxy 暴露。
  2. 环境配置: 必须正确配置根目录以及图床项目中的 .env,包含如 DJANGO_SECRET_KEY、生产数据库密码、域名绑定等敏感配置。
  3. 构建发布:
    # 使用生产级别的 Dockerfile (Frontend 的多阶段构建 + Backend 的 Gunicorn)
    docker compose up -d --build

(详情请参考项目中源码内的部署注记)


📚 项目总结与核心突破 (For Interviewers)

作为全栈独立负责的闭环项目,它不仅体现了我的多端协作能力,更帮助我深化了前端性能优化与工程化落地的能力:

  • 从“跑通”到“高性能”的跃升: 围绕 Web Vitals 指标,从路由级包拆分、依赖项 manualChunks 控制,到首图渲染优先级。确保在 3G/慢网环境下,主页 LCP 依然能维持在极速范围 (稳定在 2.5s 以内)。
  • 渲染与交互深度定制: 攻克了 React 环境下定制化 Markdown 抽象语法树 (AST) 的挑战,基于 Unified.js 生态链实现了代码块高亮排版、内容图片灯箱拦截分析。
  • 全局状态与冗余开销削减: 依托于高可复用的 TypeScript 强类型泛型 Hooks (如 usePosts, usePost),配合自定义内存级请求池与 React Suspense,实现了极其流畅的多级跳开机制与最小化的重复网络消耗。
  • 全自动的基建赋能: 深入运用了 Docker 多阶段构建与底层跨容器网络通信 (Bridge Networks),搭配自动化证书和独立图床处理机制,独立解决了繁琐的跨域(CORS)与 Nginx 转发透传等服务端痛点。

About

个人博客系统,仍在建设中... personal blog system, still under construction...

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors