Files
wxserver/云开发部署指南.md
T
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

7.0 KiB
Raw Blame History

生日提醒小程序 - 云开发部署指南

📋 部署步骤概览

上传云函数 → 创建数据库集合 → 配置定时触发器 → 测试功能

🚀 第一步:上传云函数

1.1 打开云开发控制台

  1. 在微信开发者工具中,点击顶部菜单 "云开发"
  2. 进入云开发控制台
  3. 确认环境ID为:cloudbase-1gk3x0ia3a6b1f80

1.2 上传云函数

需要上传3个云函数:

1. 上传 login 云函数

右键点击 cloudfunctions/login
→ 选择 "上传并部署:云端安装依赖"
→ 等待上传完成(约30秒)

2. 上传 syncAnniversary 云函数

右键点击 cloudfunctions/syncAnniversary
→ 选择 "上传并部署:云端安装依赖"
→ 等待上传完成(约30秒)

3. 上传 sendReminder 云函数

右键点击 cloudfunctions/sendReminder
→ 选择 "上传并部署:云端安装依赖"
→ 等待上传完成(约30秒)

1.3 验证上传结果

在云开发控制台 → 云函数,应该看到3个云函数:

  • login
  • syncAnniversary
  • sendReminder

🗄️ 第二步:创建数据库集合

2.1 进入数据库管理

云开发控制台 → 数据库

2.2 创建集合

需要创建2个集合:

1. anniversaries(纪念日数据)

点击 "添加集合"
集合名称:anniversaries
权限设置:仅创建者可读写

字段说明

{
  _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
权限设置:仅创建者可读写

字段说明

{
  _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 中配置,上传云函数时会自动创建:

{
  "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

点击 "测试"
输入参数:{}
点击 "运行测试"

查看返回结果:

{
  "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

确认云函数根目录配置:

{
  "cloudfunctionRoot": "cloudfunctions/",
  "miniprogramRoot": "./",
  "appid": "你的AppID",
  "projectname": "生日提醒小程序"
}

5.2 确认 app.json

无需额外配置,订阅消息权限已自动启用。


🎯 功能验证清单

完成以下验证,确保功能正常:

  • 云开发初始化成功(控制台无报错)
  • 能够获取到用户 openid
  • 添加纪念日时弹出订阅授权
  • 纪念日数据同步到云端(查看数据库)
  • 手动执行 sendReminder 云函数成功
  • 定时触发器配置成功
  • 能够收到订阅消息推送

🐛 常见问题

Q1: 云函数上传失败?

A: 检查网络连接,或手动安装依赖:

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 集合:

// 查看今天的提醒记录
db.collection('remind_logs')
  .where({
    sendDate: _.gte(new Date(new Date().toDateString()))
  })
  .get()

3. 数据备份

定期导出数据库数据:

云开发控制台 → 数据库 → 导出


💰 费用说明

免费额度(每天)

  • 云函数调用:10万次
  • 数据库读操作:5万次
  • 数据库写操作:3万次
  • 云存储容量:5GB

对于个人使用,完全免费!


🎉 部署完成!

现在你的生日提醒小程序已经具备了完整的推送提醒功能:

用户添加纪念日时自动请求订阅授权 数据自动同步到云端 每天上午9点自动检查并发送提醒 提醒记录自动保存到数据库

享受你的智能生日提醒吧! 🎂