要不要配
不配也能用。默认的本机模式把数据存在 server/data/pet.db,一台一体机独立运行,断网照常。
需要配的情况只有一种:几台设备要看到同一份数据——比如教室里的一体机负责加减分,办公室的教师机负责录入和查榜。这时把本地库接到一个 Supabase 项目上,两台机器各自保留全量副本,改动互相推送。
- 一台机器单独用:不用配,跳过本页
- 多台机器共享数据:按下面六步走一遍,配一次即可
- 只是想把数据搬到新机器:用管理端的「配置中心 → 导出配置 / 导入配置」,不需要 Supabase
六步流程
漏掉建表 SQL,后面所有同步都会报「缺少数据表」。这是唯一一个必须照做、没有捷径的步骤。
1注册 Supabase
打开 supabase.com,点 Start your project 注册。用 GitHub 账号直接登录最省事。
免费版完全够用:500 MB 数据库加 5 GB 流量,一个班的积分流水、宠物和道具记录离这个量级差得很远。
2创建项目
- 登录后点 New project
- Name 随便起,例如
pet-classroom - Database Password 设一个数据库密码,记下来。以后手动导数据或做维护要用
- Region 选 Southeast Asia (Singapore),国内访问延迟最低
- 点 Create new project,等 1 到 2 分钟初始化完成
3执行建表 SQL
这一步在云端建出和本地一致的表结构。表的列名和类型必须和程序匹配,所以别手写,直接用仓库里的脚本。
- 在项目左侧菜单点 SQL Editor,再点 New query
- 打开
supabase/schema.sql,全选复制,粘贴进输入框 - 点右下角 Run,显示
Success. No rows returned就是成功了 - 左侧切到 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 Key | Project API Keys → anon / publishable | 公开密钥,用于读取 |
| Service Role Key | Project 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验证同步
- 管理端 → 同步与备份 → 点 测试连接,显示「可读可写」才算通。只显示「只读」说明 Service Role Key 没填对
- 随便加一个学生,回概览页看「待推送变更」,几秒内应该归 0
- 在另一台设备打开,能看到同一个学生即成功
程序会按设定的间隔自动拉取云端增量,每次刷新页面也会拉一次;增删改则实时推送。准备界面里也能手动跑一次「快照 → 拉取 → 推送」。
排错对照表
| 现象 | 原因与解决 |
|---|---|
| 提示「缺少数据表」 | 第 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,不入库、不出现在任何接口返回里