Ongwu笔记 - 一个简洁、高效、安全的在线笔记管理平台
1. 项目构想
Ongwu笔记是一个基于GitHub + Vercel + PostgreSQL的Web笔记应用,旨在提供一个简洁、高效、安全的在线笔记管理平台。
项目地址:https://github.com/ongwu/Ongwu-Note
核心需求
- 提供用户注册与登录功能
- 支持笔记的创建、编辑、删除和搜索
- 支持笔记分类管理
- 提供笔记导入导出功能
- 确保数据安全与隐私保护
- 提供良好的用户体验和界面设计
技术选型
- 前端框架:Next.js 13+(React 18+)
- 编程语言:TypeScript
- 样式框架:Tailwind CSS
- 后端服务:Vercel Functions(API路由)
- 数据库:Supabase PostgreSQL
- 认证方案:JWT (JSON Web Token)
- 部署平台:Vercel
- 代码托管:GitHub
2. 项目架构
技术栈架构
- 前端:Next.js 13+ App Router + React 18+ + TypeScript + Tailwind CSS
- 后端:Next.js API Routes + Node.js
- 数据层:PostgreSQL (Supabase) + pg客户端库
- 认证授权:JWT认证 + 自定义中间件
- 部署环境:Vercel Cloud Platform
项目结构
├── app/ # Next.js 13+ 应用目录 |
核心模块设计
用户认证模块
- 提供用户注册、登录、注销功能
- 基于JWT的身份验证机制
- 会话管理与安全保障
笔记管理模块
- 笔记CRUD操作
- 笔记分类管理
- 笔记搜索与过滤
数据导入导出模块
- 支持笔记批量导入
- 支持笔记导出为Markdown格式
系统管理模块
- 数据库初始化与维护
- 系统状态监控
- 用户权限管理
3. 项目实现
数据库设计
项目使用PostgreSQL作为数据存储,主要包含以下数据模型:
用户模型 (OngwuUser)
- id: 用户唯一标识
- username: 用户名
- password: 密码(加密存储)
- email: 邮箱地址
- created_at: 创建时间
- updated_at: 更新时间
分类模型 (OngwuCategory)
- id: 分类唯一标识
- name: 分类名称
- description: 分类描述
- user_id: 所属用户ID
- created_at: 创建时间
- updated_at: 更新时间
笔记模型 (OngwuNote)
- id: 笔记唯一标识
- title: 笔记标题
- content: 笔记内容
- category_id: 所属分类ID
- user_id: 所属用户ID
- created_at: 创建时间
- updated_at: 更新时间
系统状态模型 (OngwuSystemStatus)
- key: 状态键
- value: 状态值
- description: 状态描述
- updated_at: 更新时间
核心功能实现
数据库连接实现
- 使用pg库创建连接池
- 采用单例模式确保连接池唯一性
- 实现连接错误处理和超时设置
认证系统实现
- 基于JWT的身份验证
- 密码加密存储与验证
- 访问控制中间件
API接口设计
- RESTful API设计风格
- 统一的错误处理机制
- 请求参数验证
前端界面实现
- 使用Next.js 13+ App Router
- React函数式组件与Hooks
- Tailwind CSS响应式设计
笔记编辑器实现
- Markdown编辑器集成
- 实时预览功能
- 自动保存机制
4. 项目实施
部署教程:GitHub + Vercel + PostgreSQL
环境准备
- GitHub账号:创建项目仓库
- Vercel账号:用于应用部署
- Supabase账号:创建PostgreSQL数据库
1. GitHub配置
- 直接点击链接fork仓库: https://github.com/ongwu/Ongwu-Note/fork
2. Supabase PostgreSQL信息获取:
- 登录Supabase,创建新项目
- 在Project Settings > Database >顶部Connect 中获取数据库连接信息
- type选择PSQL,选择 Session pooler ,你会获得如下信息:
- Host
- Port
- Database Name
- Username
- Password (创建sql时的密码)
3. Vercel部署配置
登录VERCEL:https://vercel.com
导入第三方 Git 仓库
登录Vercel,导入GitHub仓库
配置环境变量(在Settings > Environment Variables)
ONGWU_NOTE_DB_HOST=xxxxxxxxxxx.pooler.supabase.com
ONGWU_NOTE_DB_PORT=5432
ONGWU_NOTE_DB_NAME=postgres
ONGWU_NOTE_DB_USER=postgres.xxxxxxxxxxxxx
ONGWU_NOTE_DB_PASSWORD=xxxxxxxxxxxx
ONGWU_NOTE_JWT_SECRET=xxxxxxxxxxxxxxxxxxxxxx
NODE_ENV=production
JWT 密钥 (用于用户登录令牌签名,必须保密),生成方法:访问 https://generate-secret.vercel.app/32
应用环境 (production=生产环境, development=开发环境)配置构建设置默认即可
点击”Deploy”按钮部署应用,等待1分钟左右部署完成获得url访问
这时候你无法登陆,需要初始化,初始化后你会获得管理员用户名和密码,登陆后台后续可修改!
初始化: 域名/init,例如:https://sss.com/init
注意事项与最佳实践
安全性:
- 妥善保管数据库凭证和JWT密钥
- 定期更新密码和密钥
- 避免在前端代码中暴露敏感信息
性能优化:
- 使用数据库连接池
- 实现API缓存机制
- 优化数据库查询
维护与监控:
- 定期备份数据库
- 监控应用性能和错误日志
- 及时更新依赖包版本
评论