Thanks to visit codestin.com
Credit goes to github.com

Skip to content

imengying/blog_r

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

博客系统

一个现代化的博客系统,基于 Next.js + Rust + PostgreSQL 构建,支持 Markdown 文件上传和数据库存储。

✨ 功能特性

核心功能

  • 📝 Markdown 文件上传和管理
  • 💾 数据库存储文章内容
  • 🗂️ 侧边栏文件导航
  • 🏠 默认 README 首页
  • 🎨 代码高亮(Shiki)
  • 🎭 毛玻璃 UI 效果
  • 🔍 Markdown 扩展支持(GFM、自动链接标题等)

UI 特性

  • 毛玻璃效果
  • 渐变背景
  • 实时文章列表
  • 现代化界面

🛠️ 技术栈

前端

  • Next.js 16 - React 框架(App Router)
  • React 19 - UI 库
  • TypeScript - 类型安全
  • Tailwind CSS - 样式框架
  • MDX Remote - Markdown 渲染
  • Shiki - 代码高亮

后端

  • Rust - 系统编程语言
  • Axum - Web 框架
  • SQLx - 数据库客户端
  • PostgreSQL - 关系型数据库
  • Tokio - 异步运行时

🚀 快速开始

前置要求

  • Node.js >= 18
  • Rust >= 1.75 (安装指南)
  • PostgreSQL >= 14

1. 配置数据库

# 创建数据库
sudo -u postgres psql
CREATE DATABASE blog;
CREATE USER bloguser WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE blog TO bloguser;
\q

2. 配置后端

cd apps/api
cp .env.example .env
# 编辑 .env 文件,设置 DATABASE_URL

.env 示例:

DATABASE_URL=postgresql://bloguser:your_password@localhost:5432/blog
PORT=2600

3. 启动服务

# 启动后端
./scripts/start-backend.sh

# 启动前端(新终端)
./scripts/start-frontend.sh

4. 访问应用

📖 使用指南

访问管理后台

  1. 在浏览器访问:http://localhost:2500/manage
  2. 使用默认账号登录:
    • 用户名admin
    • 密码123456
  3. 登录后可以管理文章和修改账号信息

⚠️ 安全提示:首次登录后请立即修改默认密码!

管理文章

  • 创建文章:点击"新建文章"按钮,填写文章信息
  • 编辑文章:在列表中点击"编辑"
  • 删除文章:在列表中点击"删除"
  • 发布控制:通过"发布"复选框控制文章可见性

文章字段说明

  • slug: URL 标识符(必填,创建后不可修改)
  • title: 文章标题(必填)
  • content: Markdown 内容(必填)
  • summary: 文章摘要(可选)
  • tags: 标签,逗号分隔(可选)
  • published: 是否发布(默认发布)

管理员设置

在管理后台点击"设置"按钮可以:

  • 修改管理员用户名
  • 修改管理员密码

📁 项目结构

blog/
├── apps/
│   ├── api/                    # Rust 后端
│   │   ├── src/
│   │   │   ├── main.rs        # 主程序
│   │   │   ├── db.rs          # 数据库连接 + SQL 迁移
│   │   │   ├── auth.rs        # 认证模块
│   │   │   ├── models.rs      # 数据模型
│   │   │   └── posts.rs       # 文章逻辑
│   │   └── .env               # 环境配置
│   └── web/                    # Next.js 前端
│       ├── app/
│       │   ├── layout.tsx     # 布局
│       │   ├── page.tsx       # 首页(README)
│       │   └── [slug]/        # 文章详情
│       ├── components/         # 组件
│       │   ├── ClientLayout.tsx
│       │   └── Sidebar.tsx
│       └── lib/
│           └── api.ts         # API 客户端
├── scripts/                    # 脚本文件
│   ├── start-backend.sh       # 后端启动脚本
│   ├── start-frontend.sh      # 前端启动脚本
│   └── build-production.sh    # 生产构建脚本
├── README.md                  # 本文件
└── SETUP.md                   # 详细配置指南

🔌 API 接口

后端提供 RESTful API:

公开 API

  • GET /api/posts - 获取所有文章列表
  • GET /api/posts/:slug - 获取单篇文章

认证 API

  • POST /api/auth/login - 管理员登录
  • POST /api/auth/logout - 管理员登出
  • GET /api/auth/verify - 验证 token

管理员 API(需要认证):

  • POST /api/admin/posts - 创建文章
  • PUT /api/admin/posts/:slug - 更新文章
  • DELETE /api/admin/posts/:slug - 删除文章
  • PUT /api/admin/password - 修改密码
  • PUT /api/admin/username - 修改用户名

健康检查

  • GET /health - 服务健康检查
  • GET /db/health - 数据库健康检查

🗄️ 数据库结构

Posts 表(文章)

CREATE TABLE posts (
    id SERIAL PRIMARY KEY,
    slug VARCHAR(255) UNIQUE NOT NULL,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    summary TEXT,
    tags TEXT[],
    published BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

Admins 表(管理员)

CREATE TABLE admins (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

Sessions 表(登录会话)

CREATE TABLE sessions (
    id SERIAL PRIMARY KEY,
    admin_id INTEGER NOT NULL REFERENCES admins(id) ON DELETE CASCADE,
    token VARCHAR(255) UNIQUE NOT NULL,
    expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

🔧 常见问题

数据库连接失败

检查以下内容:

  1. PostgreSQL 是否运行:sudo systemctl status postgresql
  2. .env 中的 DATABASE_URL 是否正确
  3. 数据库用户权限是否足够

React 版本冲突

如果遇到版本错误:

cd apps/web
rm -rf node_modules package-lock.json
npm install

端口被占用

修改端口配置:

  • 前端:apps/web/package.json 中的 dev 脚本
  • 后端:apps/api/.env 中的 PORT

📚 更多文档

详细的配置和使用说明请查看 SETUP.md

🚀 生产环境部署

构建生产版本

./scripts/build-production.sh

这会创建 dist/ 目录,包含:

  • api/ - 后端可执行文件(已优化)
  • web/ - 前端构建文件
  • start.sh - 一键启动脚本(可选,手动创建)
  • README.md - 部署说明

部署到服务器

# 1. 复制到服务器
scp -r dist/ user@server:/path/to/blog/

# 2. 配置数据库
cd /path/to/blog/dist/api
cp .env.example .env
nano .env  # 设置 DATABASE_URL

# 3. 安装前端依赖
cd ../web
npm install --production

# 4. 启动服务
cd ..
./start.sh

系统要求

  • 操作系统: Linux / macOS
  • Node.js: 18+
  • PostgreSQL: 14+

🎯 下一步计划

可以添加的功能:

  • 文章搜索
  • 标签筛选
  • 图片上传
  • 评论系统
  • RSS 订阅
  • 深色模式

📄 许可证

MIT


Happy Blogging! 📝✨

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published