现代化的前后端分离博客系统,采用最新技术栈:
- 前端:Vite + React 18 + TanStack Query(JavaScript)
- 后端:FastAPI + SQLAlchemy 2.0(Python 异步)
- 数据库:PostgreSQL 16
- 部署:Docker Compose 一键启动
最简单的方式,一键启动数据库和后端:
# 1. 启动数据库和后端服务
docker compose up -d --build
# 2. 查看服务状态
docker compose ps
# 3. 查看后端日志
docker compose logs -f backend后端将在 http://localhost:8000 运行,数据库在 localhost:5432。
然后启动前端(需要单独运行):
cd frontend
npm install
npm run dev前端将在 http://localhost:5173 运行。
选项 A:使用 Docker 启动 PostgreSQL
docker run -d \
--name personal-blog-db \
-e POSTGRES_USER=blog \
-e POSTGRES_PASSWORD=blog \
-e POSTGRES_DB=personal_blog \
-p 5432:5432 \
postgres:16选项 B:使用本地已安装的 PostgreSQL 确保 PostgreSQL 已安装并运行,创建数据库:
CREATE DATABASE personal_blog;
CREATE USER blog WITH PASSWORD 'blog';
GRANT ALL PRIVILEGES ON DATABASE personal_blog TO blog;# 进入后端目录
cd backend
# 创建虚拟环境(Windows)
python -m venv .venv
.\.venv\Scripts\activate
# 或 Linux/Mac
python3 -m venv .venv
source .venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
copy env.example .env # Windows
# 或
cp env.example .env # Linux/Mac
# 编辑 .env 文件,确保 DATABASE_URL 正确
# DATABASE_URL=postgresql+asyncpg://blog:blog@localhost:5432/personal_blog
# 启动后端服务
uvicorn app.main:app --reload后端将在 http://localhost:8000 运行,访问 http://localhost:8000/docs 查看 API 文档。
# 进入前端目录
cd frontend
# 安装依赖
npm install
# 配置环境变量(可选)
copy env.example .env # Windows
# 或
cp env.example .env # Linux/Mac
# 编辑 .env 文件,设置后端 API 地址(如果后端不在默认端口)
# VITE_API_BASE_URL=http://localhost:8000
# 启动开发服务器
npm run dev前端将在 http://localhost:5173 运行。
APP_NAME=Personal Blog API
DEBUG=true
DATABASE_URL=postgresql+asyncpg://blog:blog@localhost:5432/personal_blog
CORS_ORIGINS=["http://localhost:5173"]VITE_API_BASE_URL=http://localhost:8000- 后端健康检查:访问
http://localhost:8000/health,应返回{"status": "ok"} - API 文档:访问
http://localhost:8000/docs查看 Swagger UI - 前端页面:访问
http://localhost:5173查看博客首页
personal-blog/
├── backend/ # Python 后端
│ ├── app/
│ │ ├── api/ # API 路由
│ │ ├── core/ # 核心配置
│ │ ├── db/ # 数据库模型和会话
│ │ └── services/ # 业务逻辑层
│ ├── requirements.txt # Python 依赖
│ └── Dockerfile # 后端 Docker 镜像
├── frontend/ # React 前端
│ ├── src/
│ │ ├── api/ # API 客户端
│ │ ├── components/ # React 组件
│ │ ├── pages/ # 页面组件
│ │ └── hooks/ # 自定义 Hooks
│ └── package.json # Node.js 依赖
├── database/ # 数据库相关
│ └── sql/ # SQL 脚本和种子数据
├── nginx/ # Nginx 配置(可选)
└── docker-compose.yml # Docker Compose 配置
# 启动所有服务
docker compose up -d
# 停止所有服务
docker compose down
# 查看日志
docker compose logs -f backend
# 重建并启动
docker compose up -d --build
# 清理数据卷(⚠️ 会删除数据库数据)
docker compose down -v# 开发模式(热重载)
uvicorn app.main:app --reload
# 生产模式
uvicorn app.main:app --host 0.0.0.0 --port 8000
# 运行数据库初始化(如果需要)
python -m app.db.init_db# 开发模式
npm run dev
# 构建生产版本
npm run build
# 预览生产构建
npm run preview- 检查 PostgreSQL 是否正在运行
- 确认
DATABASE_URL环境变量配置正确 - 检查数据库用户权限
- 确认后端服务已启动(访问
http://localhost:8000/health) - 检查
VITE_API_BASE_URL环境变量 - 查看浏览器控制台的 CORS 错误
- 检查端口是否被占用(8000, 5432)
- 查看容器日志:
docker compose logs backend - 尝试重建镜像:
docker compose build --no-cache
- 添加用户认证和授权
- 实现文章创建和编辑功能
- 添加评论系统
- 配置 Nginx 反向代理
- 部署到生产环境