Files
wxserver/云开发部署指南.md
yuming 3965e542fc
部署到群晖 / deploy (push) Failing after 6m22s
接入自建后端 + Gitea CI/CD
- 新增 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>
2026-06-01 15:44:09 +08:00

350 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 生日提醒小程序 - 云开发部署指南
## 📋 部署步骤概览
```
上传云函数 → 创建数据库集合 → 配置定时触发器 → 测试功能
```
---
## 🚀 第一步:上传云函数
### 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点自动检查并发送提醒
✅ 提醒记录自动保存到数据库
**享受你的智能生日提醒吧!** 🎂