接入自建后端 + 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
+349
View File
@@ -0,0 +1,349 @@
# 生日提醒小程序 - 云开发部署指南
## 📋 部署步骤概览
```
上传云函数 → 创建数据库集合 → 配置定时触发器 → 测试功能
```
---
## 🚀 第一步:上传云函数
### 1.1 打开云开发控制台
1. 在微信开发者工具中,点击顶部菜单 **"云开发"**
2. 进入云开发控制台
3. 确认环境ID为:`cloudbase-1gk3x0ia3a6b1f80`
### 1.2 上传云函数
需要上传3个云函数:
#### 1. 上传 login 云函数
```bash
右键点击 cloudfunctions/login
→ 选择 "上传并部署:云端安装依赖"
→ 等待上传完成(约30秒)
```
#### 2. 上传 syncAnniversary 云函数
```bash
右键点击 cloudfunctions/syncAnniversary
→ 选择 "上传并部署:云端安装依赖"
→ 等待上传完成(约30秒)
```
#### 3. 上传 sendReminder 云函数
```bash
右键点击 cloudfunctions/sendReminder
→ 选择 "上传并部署:云端安装依赖"
→ 等待上传完成(约30秒)
```
### 1.3 验证上传结果
在云开发控制台 → 云函数,应该看到3个云函数:
- ✅ login
- ✅ syncAnniversary
- ✅ sendReminder
---
## 🗄️ 第二步:创建数据库集合
### 2.1 进入数据库管理
云开发控制台 → 数据库
### 2.2 创建集合
需要创建2个集合:
#### 1. anniversaries(纪念日数据)
```
点击 "添加集合"
集合名称:anniversaries
权限设置:仅创建者可读写
```
**字段说明**
```javascript
{
_id: String, // 自动生成
_openid: String, // 自动生成(用户openid
personId: String, // 人员ID
personName: String, // 人员姓名
type: String, // 类型:birthday/lunar_birthday/wedding等
customTypeName: String,// 自定义类型名称
isLunar: Boolean, // 是否农历
solarYear: Number, // 公历年份
solarMonth: Number, // 公历月份
solarDay: Number, // 公历日期
importance: String, // 重要程度
remindEnabled: Boolean,// 是否开启提醒
remindDays: Number, // 提前提醒天数
remark: String, // 备注
createTime: Date, // 创建时间
updateTime: Date // 更新时间
}
```
#### 2. remind_logs(提醒日志)
```
点击 "添加集合"
集合名称:remind_logs
权限设置:仅创建者可读写
```
**字段说明**
```javascript
{
_id: String, // 自动生成
anniversaryId: String, // 纪念日ID
personName: String, // 人员姓名
typeName: String, // 类型名称
daysUntil: Number, // 剩余天数
sendDate: Date, // 发送日期
status: String, // 状态:success/failed
error: String // 错误信息(如果失败)
}
```
---
## ⏰ 第三步:配置定时触发器
### 3.1 进入触发器管理
云开发控制台 → 云函数 → sendReminder → 触发器
### 3.2 创建触发器
**方法1:自动配置(推荐)**
触发器已在 `config.json` 中配置,上传云函数时会自动创建:
```json
{
"name": "dailyReminder",
"type": "timer",
"config": "0 0 9 * * * *"
}
```
**方法2:手动创建**
如果没有自动创建,手动添加:
```
点击 "新建触发器"
触发器名称:dailyReminder
触发周期:自定义
Cron表达式:0 0 9 * * * *
说明:每天上午9点执行
```
### 3.3 Cron 表达式说明
格式:`秒 分 时 日 月 星期 年`
常用配置:
```
0 0 9 * * * * - 每天上午9:00
0 0 8,20 * * * * - 每天上午8:00和晚上8:00
0 0 9 * * 1-5 * - 工作日上午9:00
```
---
## 🧪 第四步:测试功能
### 4.1 测试订阅消息授权
1. 在小程序中添加一个纪念日
2. 开启"是否提醒"开关
3. 点击保存
4. 应该弹出订阅消息授权弹窗
5. 点击"允许"
### 4.2 测试云函数
在云开发控制台 → 云函数 → sendReminder
```
点击 "测试"
输入参数:{}
点击 "运行测试"
```
查看返回结果:
```json
{
"success": true,
"total": 1,
"successCount": 1,
"failCount": 0
}
```
### 4.3 查看数据库
在云开发控制台 → 数据库:
1. **anniversaries 集合**:应该看到刚才添加的纪念日数据
2. **remind_logs 集合**:如果触发了提醒,应该有日志记录
### 4.4 测试订阅消息接收
**方法1:手动触发(立即测试)**
在云开发控制台 → 云函数 → sendReminder → 运行测试
**方法2:等待定时触发**
等到第二天上午9:00,自动触发提醒
**方法3:修改定时器(快速测试)**
临时修改 Cron 表达式为:`0 */1 * * * * *`(每分钟执行一次)
测试完成后改回:`0 0 9 * * * *`
---
## ⚙️ 第五步:项目配置
### 5.1 修改 project.config.json
确认云函数根目录配置:
```json
{
"cloudfunctionRoot": "cloudfunctions/",
"miniprogramRoot": "./",
"appid": "你的AppID",
"projectname": "生日提醒小程序"
}
```
### 5.2 确认 app.json
无需额外配置,订阅消息权限已自动启用。
---
## 🎯 功能验证清单
完成以下验证,确保功能正常:
- [ ] 云开发初始化成功(控制台无报错)
- [ ] 能够获取到用户 openid
- [ ] 添加纪念日时弹出订阅授权
- [ ] 纪念日数据同步到云端(查看数据库)
- [ ] 手动执行 sendReminder 云函数成功
- [ ] 定时触发器配置成功
- [ ] 能够收到订阅消息推送
---
## 🐛 常见问题
### Q1: 云函数上传失败?
**A**: 检查网络连接,或手动安装依赖:
```bash
cd cloudfunctions/login
npm install
```
然后选择 "上传并部署:不安装依赖"
### Q2: 获取不到 openid
**A**:
1. 确认已上传 login 云函数
2. 在真机上测试(开发者工具可能有限制)
3. 查看控制台日志
### Q3: 订阅消息没有弹出?
**A**:
1. 确认在真机上测试(开发者工具不支持)
2. 检查模板ID是否正确
3. 每个用户需要单独授权
### Q4: 定时触发器不执行?
**A**:
1. 确认 Cron 表达式正确
2. 查看云函数日志
3. 手动测试云函数是否正常
### Q5: 收不到订阅消息?
**A**:
1. 确认用户已授权订阅
2. 检查数据库中有 openid
3. 查看 remind_logs 是否有记录
4. 检查云函数权限配置
---
## 📊 监控和维护
### 1. 查看云函数日志
云开发控制台 → 云函数 → 选择函数 → 日志
### 2. 查看提醒统计
查询 remind_logs 集合:
```javascript
// 查看今天的提醒记录
db.collection('remind_logs')
.where({
sendDate: _.gte(new Date(new Date().toDateString()))
})
.get()
```
### 3. 数据备份
定期导出数据库数据:
云开发控制台 → 数据库 → 导出
---
## 💰 费用说明
### 免费额度(每天)
- 云函数调用:10万次
- 数据库读操作:5万次
- 数据库写操作:3万次
- 云存储容量:5GB
对于个人使用,完全免费!
---
## 🎉 部署完成!
现在你的生日提醒小程序已经具备了完整的推送提醒功能:
✅ 用户添加纪念日时自动请求订阅授权
✅ 数据自动同步到云端
✅ 每天上午9点自动检查并发送提醒
✅ 提醒记录自动保存到数据库
**享受你的智能生日提醒吧!** 🎂