凝神全栈
NINGSHEN-FULLSTACK
一个个人作品集/博客网站
一套完整的工程化解决方案
不仅仅是网站
涵盖开发、测试、构建、部署、运维全生命周期。
开发
前端 + 后端代码
网站的"门面"和"大脑"
测试
代码质量检查
确保无低级错误
构建
Docker 容器化
打包成"集装箱"
部署
蓝绿部署
用户无感知更新
运维
监控、日志、告警
第一时间发现
技术栈
构建这个项目所使用的所有技术工具的集合。
前端技术
用户看到的界面Nuxt.js 4
支持服务端渲染(SSR),对搜索引擎友好。基于 Vue.js 的全栈框架。
Vue 3
学习曲线平缓,生态丰富,国内普及度高。
TypeScript
带类型的 JavaScript。能在编码时发现错误,代码更可靠。
Tailwind
原子化 CSS 框架。快速编写样式,无需切换文件。
后端技术
FastAPI
Python Web 框架。性能高、自动生成 API 文档。
Python 3.10
语法简单易学,生态完善。
SQLAlchemy
ORM 工具,用 Python 代码操作数据库。
asyncpg
PostgreSQL 异步驱动,支持高并发。
存储 & 基础设施
PostgreSQL 15
Redis 7
Docker
Nginx
GitHub Actions
线上环境
NOTE:
应用镜像由 CI/CD 构建推送。基础镜像通过 GitHub Actions 中转拉取官方源后推送至 ACR,避免服务器直连 Docker Hub 超时。
系统架构
总览
SYSTEM ARCHITECTURE
什么是系统架构?
系统架构就像房屋的设计图纸,它定义了:有哪些"房间"(组件)、每个房间做什么用(职责)、房间之间怎么连通(通信)。
本项目架构风格
本项目采用「模块化单体 + 前后端分离」的架构风格。
简单但难扩展
适中,易维护 ✅
复杂但高度灵活
为什么选择这种架构?
系统架构图
用户请求从发起到响应的完整流程。
用户
浏览器 / 手机
核心职责
- • 接收所有 HTTP/HTTPS 请求
- • SSL/TLS 加密解密
- • 蓝绿部署流量切换
路由规则
🎨 前端服务
:3000Nuxt.js
- • 渲染网页界面
- • 服务端渲染(SSR)
- • 与后端 API 通信
BLUE: :3001 | GREEN: :3002
⚙️ 后端服务
:8000FastAPI
- • 处理业务逻辑
- • 数据增删改查
- • 用户认证授权
BLUE: :8001 | GREEN: :8002
💾 PostgreSQL
:5432- • 用户信息、文章、评论
- • 持久化存储,ACID保证
⚡ Redis
:6379- • 会话数据、缓存
- • 内存存储,极快速度
请求处理流程示例
以「用户访问首页」为例。
用户在浏览器输入 https://ningshen.top
请求发起
DNS 解析域名 → 获得服务器 IP 地址
寻找目的地
建立 HTTPS 连接(SSL/TLS 握手)
安全握手
请求到达 Nginx(端口 443)
Nginx 检查路径:/ → 匹配 /* 规则,决定转发到前端服务
Nginx 转发请求到 Nuxt.js(端口 3000)
执行服务端渲染(SSR),获取数据,渲染组件为HTML
响应返回用户,浏览器渲染页面 ✅
整个过程通常在 100-500ms 内完成
后端架构
设计
BACKEND ARCHITECTURE
什么是后端?
后端就是网站的"幕后工作者"。
后端应用结构
分层架构解析
📡 路由层 (Routers)
接收 HTTP 请求,调用处理函数,返回响应
async def health_check(): ...
⚙️ 业务逻辑层 (Services)
处理具体业务逻辑:验证、计算、数据转换
💾 数据访问层 (Models)
与数据库交互,执行增删改查操作
id = Column(UUID, primary_key=True)
🗄️ 数据库 (PostgreSQL)
存储所有持久化数据
数据库设计
规划"数据怎么存储",就像设计一个档案柜。
设计特点与最佳实践
分布式友好、不暴露数据量、合并数据无冲突
所有表都有 created_at 和 updated_at
使用 status 字段而非物理删除,数据可恢复
API 接口设计
程序之间的"沟通语言",就像餐厅的菜单。
响应格式规范
前端架构
设计
FRONTEND ARCHITECTURE
什么是前端?
前端是用户直接看到和操作的部分——网页的界面。
好不好看
好不好用
内容是否正确显示
为什么选择 Nuxt.js?
SEO 友好
支持SSR,搜索引擎可以抓取页面内容
首屏加载快
服务端返回渲染好的HTML,无需等待JS
开发效率高
文件系统路由、自动导入、内置状态管理
TypeScript
原生支持,类型安全,减少运行时错误
部署灵活
支持 SSR、SSG、SPA 多种模式
前端项目结构
核心概念解析
4.4.1 服务端渲染 (SSR) vs 客户端渲染 (CSR)
客户端渲染 (CSR)
传统 SPA 方式
服务端渲染 (SSR)
Nuxt.js 默认模式
4.4.2 Tailwind CSS 原子化样式
前端配置详解
前端与后端的通信
前端
后端
运维与部署
架构
DEVOPS & DEPLOYMENT
什么是 DevOps?
Development(开发)+ Operations(运维) = 全流程自动化。
Docker 容器化架构
就像"集装箱"系统,保证环境一致性。
蓝绿部署详解
零停机部署,像换房子一样切换版本。
初始状态 - Blue 环境在线
backend-blue :8001
流量切换 - Green 环境上线
backend-green :8002
CI/CD 流水线
GitHub Actions 自动化工作流。
1. 登录阿里云 ACR
2. docker build -t ningshen-backend:latest .
3. docker push registry.../backend:latest
1. SSH 连接服务器
2. ./deploy-blue-green.sh
3. curl health check
服务器资源规划
2GB 内存限制下的精细分配。
操作系统运行、文件系统缓存、突发流量缓冲、避免 OOM。
安全架构
设计
SECURITY ARCHITECTURE
为什么安全很重要?
网站安全就像家庭安防——你不会把家门敞开着,同样网站也需要各种"锁"来保护数据和用户。
安全防护体系
传输层安全 (HTTPS)
所有数据传输加密,防止窃听。
免费、自动续期。Certbot 每 12 小时检查,到期前 30 天续期。
仅 TLSv1.2 / TLSv1.3。
HTTP 强制跳转 HTTPS。
HTTP 安全头
强制 HTTPS,防止降级攻击。
禁止 iframe 嵌入,防止点击劫持。
禁止 MIME 类型猜测。
启用浏览器 XSS 过滤器。
跨域资源共享 (CORS)
配置"哪些域名可以访问我的 API"。
密钥与敏感信息管理
硬编码在代码里
.env 环境变量
- •.env 文件不提交到 Git (.gitignore)
- •Docker Compose 自动注入
- •生产环境独立配置
容器安全
非 root 用户运行
限制攻击者权限
Alpine 最小化镜像
减少攻击面
仅暴露 Nginx 80/443
内部服务不对外
监控与
可观测性
MONITORING & OBSERVABILITY
什么是可观测性?
可观测性就像汽车的仪表盘,让你随时知道系统状态。
请求量
资源使用率
服务健康状态
错误和告警
监控系统已完成配置,但考虑到服务器仅 2GB 内存,监控组件需额外 500MB,因此设计为独立部署、按需启用。
监控体系架构
数据采集层
- • CPU 使用率
- • 内存使用
- • 磁盘 I/O
- • 容器 CPU
- • 容器内存
- • 网络流量
- • 请求延迟
- • 错误率
- • 业务指标
数据存储层
时序数据库 · PromQL 查询 · 保留 15 天
可视化层
告警层 (规划中)
- • CPU > 80% 持续5分钟
- • 错误率 > 1%
- • 健康检查失败
- • 邮件
- • 钉钉/企业微信
- • Slack
健康检查机制
定期询问服务"你还好吗?"
日志管理
日志的作用
架构评估
与总结
EVALUATION & SUMMARY
架构评分
核心优点
架构设计
- • Monorepo 统一管理,版本一致性好
- • 前后端分离,职责清晰
- • 模块化设计,易于理解维护
部署能力
- • 蓝绿部署,零停机更新
- • 一键回滚,10秒内恢复
- • CI/CD 全自动化
运维友好
- • 监控体系完善(按需启用)
- • 结构化日志,排查有据
- • 中文注释,门槛低
成本优化
- • 2GB 内存精细规划
- • Alpine 镜像,存储成本低
- • Let's Encrypt 零证书费
待改进点与演进方向
当前:仅有代码风格检查
建议:添加单元测试、集成测试
当前:无自动备份
建议:pg_dump 定时备份到 OSS
当前:仅收集指标
建议:配置 Alertmanager
当前:.env 文件存储
建议:HashiCorp Vault / Secrets Manager
当前:各容器独立日志
建议:接入 ELK 或 Loki
接入 Cloudflare / 阿里云 CDN
主从复制、读写分离
迁移到 K8s 实现弹性伸缩