教程 · 适用 v0.4.18 及以上

云端同步配置

让一体机和教师机共用同一份班级数据。全程在浏览器里完成,大约 10 分钟,不用安装任何软件。

  • 约 10 分钟
  • Supabase 免费版够用
  • 本地始终保留全量数据

要不要配

不配也能用。默认的本机模式把数据存在 server/data/pet.db,一台一体机独立运行,断网照常。

需要配的情况只有一种:几台设备要看到同一份数据——比如教室里的一体机负责加减分,办公室的教师机负责录入和查榜。这时把本地库接到一个 Supabase 项目上,两台机器各自保留全量副本,改动互相推送。

  • 一台机器单独用:不用配,跳过本页
  • 多台机器共享数据:按下面六步走一遍,配一次即可
  • 只是想把数据搬到新机器:用管理端的「配置中心 → 导出配置 / 导入配置」,不需要 Supabase

六步流程

注册 Supabase 创建项目 执行建表 SQL 拿三串密钥 填进系统 验证同步
第三步别跳

漏掉建表 SQL,后面所有同步都会报「缺少数据表」。这是唯一一个必须照做、没有捷径的步骤。

1注册 Supabase

打开 supabase.com,点 Start your project 注册。用 GitHub 账号直接登录最省事。

免费版完全够用:500 MB 数据库加 5 GB 流量,一个班的积分流水、宠物和道具记录离这个量级差得很远。

2创建项目

  1. 登录后点 New project
  2. Name 随便起,例如 pet-classroom
  3. Database Password 设一个数据库密码,记下来。以后手动导数据或做维护要用
  4. Region 选 Southeast Asia (Singapore),国内访问延迟最低
  5. 点 Create new project,等 1 到 2 分钟初始化完成

3执行建表 SQL

这一步在云端建出和本地一致的表结构。表的列名和类型必须和程序匹配,所以别手写,直接用仓库里的脚本。

  1. 在项目左侧菜单点 SQL Editor,再点 New query
  2. 打开 supabase/schema.sql,全选复制,粘贴进输入框
  3. 点右下角 Run,显示 Success. No rows returned 就是成功了
  4. 左侧切到 Table Editor 刷新,应能看到 students、species、pets、point_events、quick_presets、items、state_rules、backpacks、item_use_logs、app_settings 这十张表
脚本是幂等的

用的都是 create table if not exists。重复执行不会删数据,将来版本升级要求补表时,重新跑一遍最新的脚本就行。

4拿三串密钥

左侧菜单进 Project Settings(齿轮图标)→ API,把下面三个值抄下来。

系统里的字段Supabase 页面上的名称说明
Supabase 项目地址Project URL形如 https://xxxx.supabase.co
Anon KeyProject API Keys → anon / publishable公开密钥,用于读取
Service Role KeyProject API Keys → service_role服务端密钥,用于写入,必须保密
新版项目显示的是另一种格式

如果看到 sb_publishable_xxx 和 sb_secret_xxx,同样可用:publishable 填 Anon Key 框,secret 填 Service Role Key 框。

5填进系统

三种方式,按你的场景挑一种。

方式一:欢迎向导(首次安装)

第一次启动程序会进配置向导,第 2 步「云端数据库配置(Supabase)」把三个值分别填进三个输入框。想用本地模式就把它们留空。

方式二:管理端(已安装好)

管理系统 → 同步与备份 → 云端连接(Supabase),填完保存即可。

方式三:配置文件导入(批量部署多台机器)

在已经配好的机器上:管理系统 → 配置中心 → 导出配置,勾选「云端连接」。把导出的 json 拷到新机器,走欢迎向导或管理端的「导入配置」应用一次。

导出文件里含密钥

云端连接那一项包含 Service Role Key,导出文件里是明文。传的时候走可靠渠道,用完删掉。这个类型默认不勾选,需要手动勾。

6验证同步

  1. 管理端 → 同步与备份 → 点 测试连接,显示「可读可写」才算通。只显示「只读」说明 Service Role Key 没填对
  2. 随便加一个学生,回概览页看「待推送变更」,几秒内应该归 0
  3. 在另一台设备打开,能看到同一个学生即成功
之后不用手动同步

程序会按设定的间隔自动拉取云端增量,每次刷新页面也会拉一次;增删改则实时推送。准备界面里也能手动跑一次「快照 → 拉取 → 推送」。

排错对照表

现象原因与解决
提示「缺少数据表」第 3 步没做或没跑完。回 SQL Editor 重新执行 schema.sql
测试连接显示「只读」缺 Service Role Key。回第 4 步补齐
报「云端表缺少列 xxx」建表 SQL 是旧版。重新执行最新 schema.sql,幂等,不伤数据
头像别的设备看得到、本机 404旧头像文件存在本机。重新上传一次即自动上云
想换一个 Supabase 项目直接改连接配置,系统会自动做一次全量对账
两端都改过同一条数据不静默覆盖。弹窗会列出双方最后更新时间,选完才推进同步游标

数据安全

  • 云端只是副本。所有数据在本地 SQLite 里全量保存,断网照常用,恢复后自动补推
  • 同步前自动快照。生成 server/data/backups/snapshot-*.db,按总字节上限保留,默认 1 GB,至少留最近 2 份
  • 删除是软删除。所有删除写墓碑记录并跨端传播,任何一端都不会硬删
  • 冲突不静默覆盖。没裁决之前同步游标不推进,任一边的数据都留着
  • 密钥只存本机。Service Role Key 只写进 server/data/config.json,不入库、不出现在任何接口返回里