全方位个人知识库/信息管理系统,支持:
- 📝 笔记/文章 - 富文本编辑,知识整理
- 📔 生活日记 - 日常记录,支持心情/天气标签
- 📚 收藏摘录 - 保存文章摘录,支持来源链接和个人批注
- 🏷️ 灵活标签系统 - 多维度分类整理所有内容
- 🔍 全文搜索 - 跨内容类型搜索
- 🔐 单用户密码认证 - 保护隐私
- 📤 完整数据导出 - 全量 JSON 备份
- 🌓 深色/浅色主题 - 跟随系统自动切换
- 🐳 Docker Compose 一键部署
- 后端: Python FastAPI + SQLAlchemy + SQLite(单文件零依赖)
- 前端: React 18 + TypeScript + Tailwind CSS + TipTap 富文本编辑器
- 数据库: SQLite
- 部署: Docker Compose
# 克隆项目
git clone https://github.com/SimenYY/personal-knowledge
cd personal-knowledge
# 复制环境变量示例
cp backend/.env.example backend/.env
# 编辑 backend/.env 设置 SECRET_KEY
# 可以用这个命令生成:openssl rand -hex 32
# 一键启动
docker-compose up -d启动后需要手动创建第一个用户(账号密码):
# 进入数据库
cd backend/data
sqlite3 pim.db
# 插入用户(替换成你自己的用户名和密码哈希)
INSERT INTO users (username, password_hash) VALUES ('你的用户名', 'bcrypt加密后的密码');python -c "
from passlib.context import CryptContext
ctx = CryptContext(schemes=['bcrypt'], deprecated='auto')
print(ctx.hash(input('输入密码: ')))
"后端:
cd backend
pip install -r requirements.txt
uvicorn app.main:app --reload前端:
cd frontend
npm install
npm run devbackend/
├── app/
│ ├── api/ # API 路由处理器
│ ├── crud/ # CRUD 操作
│ ├── __init__.py
│ ├── auth.py # JWT 认证
│ ├── database.py # 数据库连接
│ ├── main.py # FastAPI 入口
│ ├── models.py # SQLAlchemy 模型
│ └── schemas.py # Pydantic 模型
frontend/
├── src/
│ ├── components/ # React 共享组件
│ ├── pages/ # 页面组件
│ ├── hooks/ # React Hooks
│ ├── services/ # API 服务调用
│ ├── types/ # TypeScript 类型定义
│ ├── utils/ # 工具函数
│ ├── App.tsx # 根组件
│ └── main.tsx # 入口
| 功能 | 说明 |
|---|---|
| 笔记/文章 | 富文本编辑,适合长篇知识整理 |
| 日记/生活记录 | 按月份浏览,支持心情和天气标签,适合日常感悟 |
| 摘录收藏 | 保存网页文章片段、好句摘录,支持来源 URL 和个人批注 |
| 标签管理 | 创建/编辑/删除标签,任何内容都可以打多个标签 |
| 全文搜索 | 搜索所有内容类型的标题和内容 |
| 数据导出 | 一次性导出所有数据为 JSON 备份 |
| 认证 | 单用户密码登录,JWT 保持登录 |
MIT