接入自建后端 + Gitea CI/CD
部署到群晖 / deploy (push) Failing after 6m22s

- 新增 server/:Node + Express + SQLite + node-cron 实现登录、纪念日 CRUD 和定时订阅消息推送
- 新增 .gitea/workflows/deploy.yml:推送即触发群晖 Docker 部署,监听 15002
- utils/api.js:自动按 envVersion 切换本地/线上 BASE_URL
- app.js 与 add-anniversary.js 移除 wx.cloud 调用,改走自建后端
- cloudfunctions/ 暂保留以便回滚
- 一并提交此前未入库的首页 / 设置页 / 日历 / 万年历等改造

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
yuming
2026-06-01 15:44:09 +08:00
parent 6747ade9c4
commit 3965e542fc
49 changed files with 5616 additions and 670 deletions
+308
View File
@@ -0,0 +1,308 @@
# 生日提醒小程序 - 云开发部署检查清单
## ✅ 部署前检查
### 1. 环境准备
- [ ] 已注册微信小程序账号
- [ ] 已获取 AppID
- [ ] 已开通云开发(环境IDcloudbase-1gk3x0ia3a6b1f80
- [ ] 已创建订阅消息模板(模板ID6J7Stt-lu7DKU6jblJ0nZGq_D81z5glnksf7qWfy5Yw
### 2. 代码检查
- [ ] app.js 已初始化云开发
- [ ] app.js 中的环境ID正确
- [ ] add-anniversary.js 已添加订阅授权代码
- [ ] add-anniversary.js 中的模板ID正确
---
## 📤 上传云函数
### 1. login 云函数
```
□ 右键点击 cloudfunctions/login
□ 选择 "上传并部署:云端安装依赖"
□ 等待上传成功
□ 在云开发控制台确认已上传
```
### 2. syncAnniversary 云函数
```
□ 右键点击 cloudfunctions/syncAnniversary
□ 选择 "上传并部署:云端安装依赖"
□ 等待上传成功
□ 在云开发控制台确认已上传
```
### 3. sendReminder 云函数
```
□ 右键点击 cloudfunctions/sendReminder
□ 选择 "上传并部署:云端安装依赖"
□ 等待上传成功
□ 在云开发控制台确认已上传
□ 确认定时触发器已自动创建
```
**验证**
云开发控制台 → 云函数,应该看到3个云函数:
- ✅ login
- ✅ syncAnniversary
- ✅ sendReminder
---
## 🗄️ 创建数据库集合
### 1. anniversaries 集合
```
□ 进入云开发控制台 → 数据库
□ 点击"添加集合"
□ 集合名称:anniversaries
□ 权限设置:仅创建者可读写
□ 点击"确定"
```
### 2. remind_logs 集合
```
□ 点击"添加集合"
□ 集合名称:remind_logs
□ 权限设置:仅创建者可读写
□ 点击"确定"
```
**验证**
云开发控制台 → 数据库,应该看到2个集合:
- ✅ anniversaries
- ✅ remind_logs
---
## ⏰ 配置定时触发器
### 检查触发器
```
□ 进入云开发控制台 → 云函数 → sendReminder
□ 点击"触发器"标签
□ 确认存在 dailyReminder 触发器
□ 确认 Cron 表达式为:0 0 9 * * * *
```
### 如果没有触发器,手动创建
```
□ 点击"新建触发器"
□ 触发器名称:dailyReminder
□ 触发周期:自定义
□ Cron表达式:0 0 9 * * * *
□ 点击"确定"
```
---
## 🧪 功能测试
### 1. 测试 openid 获取
```
□ 打开小程序
□ 查看控制台日志
□ 应该看到:"获取openid成功: oABC..."
□ 打开"存储" → 查看 Storage
□ 应该看到 openid 已保存
```
### 2. 测试订阅消息授权
```
□ 在真机上打开小程序(必须真机)
□ 点击"添加纪念日"
□ 填写表单,开启"是否提醒"
□ 点击"保存"
□ 应该弹出订阅消息授权弹窗
□ 点击"允许"
□ 应该显示"添加成功"
```
### 3. 测试数据同步
```
□ 进入云开发控制台 → 数据库 → anniversaries
□ 应该看到刚才添加的纪念日记录
□ 记录中包含 _openid 字段
□ 数据完整无误
```
### 4. 测试云函数
```
□ 进入云开发控制台 → 云函数 → sendReminder
□ 点击"测试"
□ 输入参数:{}
□ 点击"运行测试"
□ 查看返回结果,应该包含:
{
"success": true,
"total": 数字,
"successCount": 数字,
"failCount": 数字
}
```
### 5. 测试订阅消息发送
**方法1:等待定时触发**
```
□ 添加一个明天的生日,提前1天提醒
□ 等到明天上午9:00
□ 应该收到订阅消息推送
```
**方法2:手动触发(推荐)**
```
□ 添加一个今天的生日
□ 手动执行 sendReminder 云函数
□ 应该立即收到订阅消息推送
```
**方法3:修改定时器(快速测试)**
```
□ 临时修改 Cron 为:0 */1 * * * * *
□ 等待1分钟
□ 应该收到订阅消息推送
□ 测试完成后改回:0 0 9 * * * *
```
---
## 🔍 验证清单
### 控制台日志验证
```
□ 看到:"云开发初始化成功"
□ 看到:"获取openid成功"
□ 看到:"订阅消息授权结果"
□ 看到:"云端同步成功"
```
### 数据库验证
```
□ anniversaries 集合有数据
□ 数据包含 _openid 字段
□ remindEnabled 为 true
□ personName 字段正确
```
### 提醒日志验证
```
□ remind_logs 集合有记录
□ status 为 "success"
□ sendDate 为今天
□ personName 正确
```
### 订阅消息验证
```
□ 收到了微信服务通知
□ 消息内容正确
□ 称呼、日期、提示都显示正确
□ 点击消息能跳转到小程序
```
---
## 🐛 故障排查
### 问题1:收不到订阅消息
**检查步骤**
```
□ 确认用户已授权订阅
□ 确认 openid 已保存
□ 查看 sendReminder 云函数日志
□ 查看 remind_logs 是否有 failed 记录
□ 确认模板ID正确
□ 确认云函数权限包含 subscribeMessage.send
```
### 问题2:云函数执行失败
**检查步骤**
```
□ 查看云函数日志,查找错误信息
□ 确认依赖已安装(查看 node_modules
□ 确认 config.json 配置正确
□ 尝试重新上传云函数
```
### 问题3:数据没有同步到云端
**检查步骤**
```
□ 确认 openid 已获取
□ 查看控制台是否有错误
□ 确认 syncAnniversary 云函数已上传
□ 手动测试 syncAnniversary 云函数
```
### 问题4:定时触发器不工作
**检查步骤**
```
□ 确认触发器已创建
□ 确认 Cron 表达式正确
□ 查看云函数日志,确认有定时调用记录
□ 尝试手动触发云函数验证功能
```
---
## 📊 性能监控
### 每日检查(可选)
```
□ 查看云函数调用次数
□ 查看订阅消息发送成功率
□ 查看 remind_logs 记录
□ 查看是否有异常日志
```
### 每周检查(可选)
```
□ 导出数据库备份
□ 清理过期的 remind_logs(可选)
□ 查看云开发资源使用情况
```
---
## ✅ 部署完成确认
全部完成以下项目即表示部署成功:
- [ ] 3个云函数全部上传成功
- [ ] 2个数据库集合创建成功
- [ ] 定时触发器配置成功
- [ ] 能够获取用户 openid
- [ ] 订阅消息授权正常弹出
- [ ] 数据能够同步到云端
- [ ] 手动执行云函数成功
- [ ] 能够收到订阅消息推送
- [ ] 提醒日志正常记录
---
## 🎉 恭喜部署成功!
你的生日提醒小程序现在具备:
- ✅ 云端数据存储
- ✅ 自动推送提醒
- ✅ 多设备同步
- ✅ 安全可靠
**开始使用吧!** 🎂
---
## 📞 需要帮助?
如果遇到问题:
1. 查看《云开发部署指南.md》
2. 查看《云开发功能说明.md》
3. 查看云开发控制台的错误日志
4. 联系技术支持