🔔 一个轻量级的备忘提醒推送系统,支持多种通知渠道,内置管理后台。
基于 deadline 项目重构,从 Cloudflare Pages 架构迁移至 Node.js + Express + SQLite 纯本地化方案,开箱即用。
- 📋 提醒管理 — 卡片式前台 + 管理后台,支持增删改查
- 🔁 循环提醒 — 单次 / 每周 / 每月 / 每3个月 / 每6个月 / 每年
- ⏱️ 自动推送 — 内置
node-cron每分钟检查,到期自动推送 - 📡 6种通知渠道 — Telegram / 企业微信 / Bark / 飞书 / 钉钉 / 自定义Webhook
- 🔐 安全设置 — 前台访问密码、管理员账户和管理员密码管理
- 🛡️ 管理后台 — HeroUI 风格后台,提醒管理 / 数据总览图表 / 渠道配置 / 通知日志 / 测试发送
- 🏠 前后台跳转 — 后台导航可直接打开前台首页
- 📦 数据迁移 — 后台 JSON 备份导出 / 合并导入 / 覆盖导入
- ☁️ WebDAV 备份 — 保存 WebDAV 设置后可一键远端备份和恢复
- 🧾 日志管理 — 通知日志支持关键词、平台、状态、时间筛选和删除
- ©️ 项目信息 — 前台和后台展示 GitHub 项目版权链接
- ♻️ 在线更新 — 后台检查 Git 远端版本、执行更新并查看进度日志
- 💾 SQLite 持久化 — 使用
sql.js,无需编译,跨平台运行
- Node.js >= 16.x
- npm >= 7.x
git clone https://github.com/logdns/mymsgpush.git
cd mymsgpushnpm installnode server.js服务默认运行在 3009 端口:
- 🏠 前台地址:
http://你的IP:3009 - ⚙️ 后台地址:
http://你的IP:3009/admin.html
| 类型 | 账号/密码 |
|---|---|
| 后台管理员 | admin / admin123 |
| 前台访问密码 | mjj123 |
⚠️ 首次登录后请立即修改默认密码!
后台新管理员密码会使用 PBKDF2 哈希保存;旧版本明文密码在成功登录后会自动迁移。
旧版本如果没有后台导入/导出功能,请直接迁移数据库文件。项目数据默认在:
data/reminders.db升级前先停服务并备份:
pm2 stop mymsgpush
cp -a data data.backup.$(date +%Y%m%d-%H%M%S)如果是在原目录升级:
git pull --ff-only
npm install --omit=dev
pm2 restart mymsgpush如果是部署到新目录:
git clone https://github.com/logdns/mymsgpush.git mymsgpush-new
cd mymsgpush-new
npm install --omit=dev
mkdir -p data
cp /旧项目路径/data/reminders.db ./data/reminders.db
pm2 start server.js --name mymsgpush启动新版后会自动补齐缺失的数据表,不会清空已有提醒。旧版明文管理员密码会在第一次成功登录后自动迁移为 PBKDF2 哈希。
新版后台提供 设置 -> 数据备份与迁移:
- 导出备份 JSON:导出提醒、通知渠道、日志、设置和管理员账户。
- 合并导入:重复主键会更新,未重复的数据会新增。
- 覆盖导入:只覆盖备份文件中包含的数据表;如果备份里没有管理员账户,会保留当前登录账户,避免锁死后台。
建议以后每次升级前先在后台导出 JSON,再保留一份 data/reminders.db 文件级备份。
进入后台 设置 -> WebDAV 备份与恢复:
- 填写 WebDAV 地址、用户名、密码、远端目录和备份名前缀。
- 点击「保存 WebDAV 设置」。
- 点击「测试连接」确认可访问。
- 点击「备份到 WebDAV」会上传当前 JSON 备份,文件名会自动追加当时操作的时间戳,例如
mymsgpush-backup-20260608-153012-123.json。 - 在「恢复文件」里选择备份,或保留「最新备份」,再点击「合并恢复」或「覆盖恢复」导入。
WebDAV 备份文件使用后台导出的同一 JSON 格式,包含提醒、通知渠道、通知日志、设置和管理员账户。
# 安装 PM2
npm install -g pm2
# 启动应用
pm2 start server.js --name mymsgpush
# 设置开机自启
pm2 save
pm2 startuppm2 status # 查看状态
pm2 logs mymsgpush # 查看日志
pm2 restart mymsgpush # 重启
pm2 stop mymsgpush # 停止-
安装 Node.js
- 宝塔面板 → 软件商店 → 搜索
Node.js版本管理器→ 安装 - 进入管理器,安装 Node.js
18.x或20.x
- 宝塔面板 → 软件商店 → 搜索
-
上传项目
cd /www/wwwroot git clone https://github.com/logdns/mymsgpush.git cd mymsgpush npm install
-
添加 Node 项目
- 宝塔面板 → 网站 → Node项目 → 添加Node项目
- 项目目录:
/www/wwwroot/mymsgpush - 启动文件:
server.js - 端口:
3009 - 运行用户:
root - 点击「提交」
-
配置反向代理(可选,绑定域名)
- 宝塔面板 → 网站 → 添加站点 → 填写域名
- 进入站点设置 → 反向代理 → 添加反向代理
- 代理名称:
mymsgpush - 目标URL:
http://127.0.0.1:3009 - 发送域名:
$host
-
配置 SSL(可选)
- 站点设置 → SSL → Let's Encrypt → 申请证书
- 开启强制 HTTPS
-
安装 Node.js 和 PM2
npm install -g pm2
-
部署项目
cd /www/wwwroot git clone https://github.com/logdns/mymsgpush.git cd mymsgpush npm install pm2 start server.js --name mymsgpush pm2 save pm2 startup
-
宝塔放行端口
- 宝塔面板 → 安全 → 系统防火墙 → 放行端口
3009
- 宝塔面板 → 安全 → 系统防火墙 → 放行端口
-
配置反向代理(同方法一步骤4)
location / {
proxy_pass http://127.0.0.1:3009;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}mymsgpush/
├── server.js # 入口文件
├── db.js # 数据库模块 (sql.js)
├── scheduler.js # 定时任务调度
├── notifier.js # 通知发送模块
├── package.json # 依赖配置
├── routes/
│ ├── admin.js # 管理后台 API / 统计图表 / 备份恢复 / 在线更新
│ ├── auth.js # 前台密码验证
│ ├── frontendAuth.js # 前台访问 Cookie 鉴权
│ ├── notify.js # 通知触发 API
│ └── reminders.js # 提醒 CRUD API
├── public/
│ ├── index.html # 前台页面
│ ├── admin.html # 管理后台
│ ├── style.css # 前台样式
│ ├── logo.png # Logo
│ └── bg.png # 背景图
└── data/
└── reminders.db # SQLite 数据库(自动生成)
在后台 📡 通知渠道 页面配置:
| 渠道 | 配置项 |
|---|---|
| Telegram | Bot Token + Chat ID |
| 企业微信 | Webhook URL |
| Bark | 推送地址 + Key |
| 飞书 | Webhook URL |
| 钉钉 | Webhook URL |
| 自定义Webhook | URL + Method + Content-Type + Body模板 |
💡 Body模板使用
{{message}}作为消息内容占位符
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/reminders |
获取提醒列表 |
| POST | /api/reminders |
添加提醒 |
| PUT | /api/reminders/:id |
编辑提醒 |
| DELETE | /api/reminders/:id |
删除提醒 |
| POST | /api/verify-password |
验证前台密码 |
| POST | /api/notify/trigger |
手动触发通知检查 |
| GET | /admin/data/export |
后台导出数据备份 JSON |
| POST | /admin/data/import |
后台导入数据备份 JSON |
| GET | /admin/webdav |
获取 WebDAV 设置 |
| PUT | /admin/webdav |
保存 WebDAV 设置 |
| POST | /admin/webdav/test |
测试 WebDAV 连接 |
| GET | /admin/webdav/backups |
获取 WebDAV 备份文件列表 |
| POST | /admin/webdav/backup |
备份数据到 WebDAV |
| POST | /admin/webdav/restore |
从 WebDAV 恢复数据 |
| GET | /admin/logs |
筛选通知日志 |
| DELETE | /admin/logs/:id |
删除单条通知日志 |
| POST | /admin/logs/delete |
删除选中、筛选或全部通知日志 |
| GET | /admin/update/check |
后台检查远端更新 |
| POST | /admin/update/start |
后台启动在线更新 |
| GET | /admin/update/status |
读取更新进度日志 |
在线更新会执行
git fetch、git pull --ff-only,依赖文件变化时执行npm install --omit=dev。如果更新包含后端代码变更,需要重启 Node/PM2 进程后完全生效。 如果服务器目录存在本地覆盖文件,在线更新会先把这些文件备份到 Git stash,再拉取远端版本;数据库目录data/不会被纳入备份或覆盖。 后台点击「开始更新」后,更新成功会自动刷新当前后台页面,确保加载最新静态资源。 如果本次更新新增或修改了后端接口,页面刷新后仍需要重启 Node/PM2 进程;否则新页面调用新接口时会失败。
本项目基于以下开源项目重构:
- deadline — 原始项目
- deadline (logdns fork) — Fork 版本
感谢原作者的创意和贡献!
MIT License