Skip to content

Self-hosted 自托管的想法记录及回顾服务,开源、免费、简单、专注于核心功能

License

Notifications You must be signed in to change notification settings

jerryshell/my-flomo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

248 Commits
 
 
 
 
 
 
 
 

Repository files navigation

My Flomo

My Flomo 是一个自托管的想法记录及回顾应用,提供与 Flomo 兼容的功能实现。该项目采用前后端分离架构,后端使用 Go 语言开发,前端使用 React 和 TypeScript 构建,支持数据完全自主控制。

功能特性

  • Memo 管理: 支持 Memo 的创建、编辑、删除和查看操作
  • 数据导入导出: 提供 Flomo 数据导入和 CSV 格式的数据交换功能
  • API 兼容: 实现与 Flomo 兼容的 API 接口规范
  • 邮件回顾: 配置定时任务发送每日 Memo 回顾邮件
  • Telegram Bot 回顾: 配置 Telegram Bot 接收每日 Memo 回顾消息
  • 插件支持: 通过 API 插件令牌支持第三方应用集成
  • 账户管理: 用户注册、登录、密码修改和账户注销功能
  • 数据安全: 支持用户账户及相关数据的永久删除

技术架构

后端实现

  • 编程语言: Go
  • Web 框架: Gin
  • 数据存储: SQLite 数据库,通过 GORM ORM 进行数据操作
  • 身份认证: JWT (JSON Web Token) 机制
  • 定时任务: Cron 表达式调度
  • 邮件服务: SMTP 协议支持
  • Telegram Bot: 通过 Telegram Bot API 发送每日回顾消息

前端实现

  • 编程语言: TypeScript
  • 前端框架: React
  • 状态管理: Recoil
  • 路由管理: React Router DOM
  • 构建工具: Vite
  • HTTP 客户端: Axios

项目结构

My Flomo/
├── api/                   # 后端服务
│   ├── config/            # 配置管理
│   ├── db/                # 数据库连接
│   ├── form/              # 表单结构定义
│   ├── handler/           # HTTP 请求处理器
│   ├── middleware/        # 中间件
│   ├── model/             # 数据模型
│   ├── result/            # 响应结果结构
│   ├── route/             # 路由定义
│   ├── service/           # 业务逻辑层
│   ├── store/             # 数据存储层
│   └── util/              # 工具函数
└── web/                   # 前端应用
    ├── src/
    │   ├── api/           # API 接口定义
    │   ├── atoms/         # Recoil 状态原子
    │   ├── components/    # React 组件
    │   ├── interfaces/    # TypeScript 接口定义
    │   └── pages/         # 页面组件
    └── public/            # 静态资源

安装与部署

后端服务部署

  1. 进入后端目录
cd api
  1. 安装项目依赖
go mod download
  1. 配置环境变量(可选配置)
export HOST=localhost                  # 服务监听地址,默认 localhost
export PORT=8060                       # 服务监听端口,默认 8060
export DSN=my-flomo.db                 # SQLite 数据库文件路径,默认 my-flomo.db
export JWT_KEY=YOUR_JWT_KEY            # JWT 签名密钥,默认 YOUR_JWT_KEY
export CRON_SPEC="0 20 * * *"          # 定时任务表达式,默认每天 20:00
export SMTP_HOST=smtp-mail.outlook.com # SMTP 服务器地址,默认 smtp-mail.outlook.com
export SMTP_PORT=587                   # SMTP 服务端口,默认 587
export SMTP_USERNAME=                  # SMTP 认证用户名,默认为空
export SMTP_PASSWORD=                  # SMTP 认证密码,默认为空
export SMTP_SUBJECT="My Flomo 每日回顾" # 邮件主题,默认 "My Flomo 每日回顾"
export LOG_PATH=                       # 日志文件路径,默认空(输出到控制台)
export LOG_LEVEL=debug                 # 日志级别,默认 info
  1. 启动后端服务
go run main.go

前端应用部署

  1. 进入前端目录
cd web
  1. 安装项目依赖
npm install
  1. 配置环境变量

编辑 .env 文件,配置后端 API 地址:

VITE_API_BASE_URL=http://localhost:8060
  1. 开发环境运行
npm run dev
  1. 构建生产版本
npm run build
  1. 预览构建结果
npm run preview

Telegram Bot 配置

创建 Telegram Bot

  1. 在 Telegram 中搜索并联系 @BotFather
  2. 发送 /newbot 命令创建新机器人
  3. 按照提示设置机器人的名称和用户名
  4. 创建完成后,BotFather 会提供 Bot Token,请妥善保存

配置每日回顾

  1. 获取 Chat ID:

    • 在 Telegram 中搜索并联系 @userinfobot
    • 发送任意消息,机器人会返回 Chat ID
  2. 在用户设置中配置 Telegram:

    • 登录 My Flomo 应用
    • 进入设置页面
    • 启用每日回顾功能
    • 填入 Telegram Bot Token 和 Chat ID
  3. 配置完成后,系统将在每日定时任务执行时,通过 Telegram Bot 发送一条随机 Memo 作为每日回顾

  4. 测试功能:

    • 在设置页面点击"测试每日回顾"按钮
    • 系统将立即发送一条随机 Memo 到 Telegram,用于验证配置是否正确

API 接口文档

认证相关接口

  • POST /auth/login - 用户登录或注册
  • POST /auth/verifyToken/token/:token - 验证令牌有效性

Memo 管理接口

  • GET /memo/list - 获取 Memo 列表(需认证)
  • POST /memo/create - 创建 Memo(需认证)
  • POST /memo/update - 更新 Memo(需认证)
  • POST /memo/delete/id/:id - 删除 Memo(需认证)
  • GET /memo/dailyReview - 触发每日回顾(邮件和 Telegram)

插件功能接口

  • GET /plugin/getToken - 获取插件令牌(需认证)
  • POST /plugin/createToken - 创建插件令牌(需认证)
  • POST /plugin/createMemo/:pluginToken - 通过插件令牌创建 Memo
  • GET /plugin/randomMemo/:pluginToken - 通过插件令牌获取随机 Memo

用户管理接口

  • GET /user/getSettings - 获取用户设置(需认证)
  • POST /user/updatePassword - 更新用户密码(需认证)
  • POST /user/updateSettings - 更新用户设置(需认证)

数据管理接口

  • POST /upload - 文件上传(需认证)
  • POST /deleteMyAccount - 删除用户账户(需认证)
  • GET /csvExport/token/:token - 导出 CSV 格式数据
  • POST /csvImport - 导入 CSV 格式数据(需认证)

开源协议

本项目采用 GNU Affero General Public License v3.0 开源协议。详细条款请参阅 LICENSE 文件。

贡献指南

欢迎提交 Issue 报告和 Pull Request 贡献代码。在提交代码前,请确保:

  1. 代码符合项目编码规范要求
  2. 添加必要的测试用例覆盖
  3. 更新相关文档内容

联系方式

如有问题或建议,请通过 GitHub Issues 页面提交反馈。

About

Self-hosted 自托管的想法记录及回顾服务,开源、免费、简单、专注于核心功能

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages