盲信豆包害我白折腾一天:蜜蜂记账自建云踩坑全记录

前言

折腾了整整一天,从凌晨到深夜,我在群晖 DS423 上为蜜蜂记账搭自建同步服务,结果因为一开始走错了方向,绕了无数弯路,最后才发现官方文档里早就写好了最简单的方案。写这篇记录,既是复盘,也给同样想折腾的朋友避个坑。


一、初衷:摆脱 WebDAV 的同步冲突

之前一直是用 Excel 记账,用起来实在不方便,只能在开电脑的时候才能记。问了豆包,豆包推荐了蜜蜂记账,最初豆包推荐的是 WebDAV 模式,但家里两台手机、一台电脑同时记账,会出现文件覆盖、数据错乱的问题。

豆包再次推荐可以自建 Supabase 服务,实现数据库级别的同步,无冲突、无覆盖,我立刻心动了,想着一劳永逸解决问题。


二、被带偏的一天:从 “正确道路” 走到 “死胡同”

1. 第一步就选错了路

一开始我直接问了豆包,它给我的方案是:手动搭建 PostgreSQL + PostgREST,再在 APP 里用 “自定义 Supabase” 模式连接。

我没多想就照着做了:

  • 写 docker-compose.yml,拉取 supabase/postgres 镜像
  • 配置端口、密码、环境变量
  • 启动服务,确认容器都健康运行
  • 用 psql 命令建表、建索引、建 anon 角色
  • 给角色授权、配置 JWT 密钥
  • 重启服务、测试连接……

2. 踩坑踩得怀疑人生

从中午到傍晚,我一直在和各种报错死磕:

  • API Key无效:换了 N 次 JWT 密钥,从原始字符串到生成的令牌,全试过了
  • 认证失败:创建 anon 角色、给权限、改 PGRST_DB_ANON_ROLE,都没用
  • 服务器返回500:空 JWT 密钥导致 PostgREST 崩溃
  • 端口冲突:3000 端口被其他服务占用,改了又改
  • 目录不存在:数据卷没创建,启动失败
  • 甚至怀疑过轩辕镜像源,提交工单反馈镜像拉取问题,结果客服说 “Docker Hub 不存在该镜像”

中间我甚至一度想放弃,回到 WebDAV,但又不甘心,想着 “再试最后一次”。


三、真相:我完全走偏了,官方有现成的路

折腾到深夜,我翻回了蜜蜂记账的官方文档,一眼就看到了《BeeCount Cloud 自建云》这篇文章。

原来,APP 里的 “云服务” 界面,除了 WebDAV 和自定义 Supabase,还有一个专门的【BeeCount 自建云】模式!

官方早就提供了专门的一体化镜像 tntthink/beecount-cloud,一键部署,内置数据库和适配 API,完全不用自己搭 PostgreSQL 和 PostgREST,也不用管什么 JWT、anon 角色、权限授权。

我之前做的所有操作,全是在绕远路,甚至是死路 —— 手动搭的通用 Supabase 服务,和 APP 的自建云模式根本不兼容,怎么改都不可能成功。


四、正确方案:10 分钟搞定官方自建云

1. 清空之前的错误配置

cd /volume2/docker/beecount
docker-compose down -v
rm -rf docker-compose.yml compose.yaml ./db

2. 创建数据目录

mkdir -p /volume2/docker/beecount/data

3. 官方标准 docker-compose.yml

services:

beecount-cloud:

image: sunxiao0721/beecount-cloud:latest

restart: unless-stopped

ports:

- "8869:8080"

environment:

BOOTSTRAP_ADMIN_EMAIL: 邮箱

BOOTSTRAP_ADMIN_PASSWORD: 密码

volumes:

- ./data:/data

4. 启动服务

docker-compose up -d

5. APP 配置(直接成功)

web 端:http://192.168.1.***:****

打开蜜蜂记账 → 个人中心 → 云服务 → 选择【BeeCount 自建云】:

  • 服务器地址:http://192.168.1.***:****
  • 用户名和密码:yaml 中设置的邮箱和密码

点击测试连接,秒成功!没有任何报错,也不用管什么 API Key、认证、权限。

6、设置外网访问

安装了蜜蜂记账,在内网可以正常访问,但是使用域名无法连接网站。还是问了豆包,才想到还要设置路由器的端口转发。

登录TP-Link AC 的路由器管理界面,在”虚拟服务器” 选项中将 8869转发规则配置上。搞定!


五、复盘:为什么会白折腾?

  1. 一开始就选错了方案:没先看官方文档,直接信了 AI 的 “通用方案”,而通用方案和 APP 原生不兼容
  2. AI 的局限性:它只给了 “能跑起来的技术方案”,但没考虑到 APP 的适配限制,也没提醒我有更简单的官方方案
  3. 盲目试错浪费时间:在错误的方向上不断修改、调试,越陷越深,最后才发现从一开始就错了

六、给后来者的避坑建议

  1. 先看官方文档,再问 AI:很多 APP 都有专门的自建云方案,不要直接上通用方案
  2. 不要盲目死磕报错:如果一个错误反复出现,先怀疑方向是不是错了,而不是一直改参数
  3. 简单的方案往往才是对的:一键部署的官方镜像,比手动拼接的通用服务靠谱得多

结语

折腾了一天,虽然走了弯路,但也搞懂了 PostgreSQL、PostgREST、JWT 认证这些东西,也算是没完全白忙活。

现在终于用上了稳定的自建云同步,再也不用怕数据冲突了。也提醒自己,以后折腾前,先看官方文档,再动手,别再犯 “盲信 AI” 的错误了。

俩娃爸爸的“自救”:用AI搭建识字工具,告别手忙脚乱改生字卡

老大今年上了一年级,开学第二个周,老师布置了一项作业,要把前两周学习的字打乱顺序让孩子认识,正在想着如何做成识字卡打印出来用的时候,忽然想到之前看到 “AI 能帮写代码”,我抱着试试看的心态,何不让AI给开发个小工具呢?没想到居然真的自己捣鼓出了个识字小工具。从“只会显示生字”到“能适配俩娃进度”,每一步都是我出主意,AI当码农来开发,现在辅导识字效率翻倍,我也终于不用再跟生字卡较劲了。

第一次 “求助 AI”:解决 “生字卡”制作的麻烦

最开始我就一个简单需求:能不能做个网页,输入生字库后点一下就能随机换一个,省得手写卡片。我把需求告诉豆包,没过几分钟,AI 就给了我一段 HTML 代码,还直接生成了预览页面,还能直接下载,居然真的成了!打开页面,点击设置按钮,输入生字库,点一下屏幕就切换,基本需求done!

第二次 “麻烦 AI”:让 “总认错的字” 主动多出现

给老大试用之后,效率果然有了显著提升,我这个老父亲再也不用一个一个地制作生字卡了,然而,新的问题也随之浮现:由于每个生字出现的频率相近,已熟练掌握、基本掌握和掌握较差的字混杂在一起,缺乏主次之分。随着生字量的不断增加,能够接触到新字的几率逐渐降低,有时甚至几分钟都碰不到一个生字,导致效率不升反降。于是,第二个需求应运而生:增加“重点”和“隐藏”功能。对于那些总被认错的字,我们可以标记为重点,提高其出现的频率;待孩子掌握后,再取消标记,降低其出现频率。而对于已经熟练掌握的字,则可以直接进行“隐藏”,避免重复出现。把需求告诉豆包以后,几分钟再次完成功能升级!

第三次“麻烦 AI”:适配俩娃不同识字进度

老二也到了识字的年纪,他看到老大在用这款工具认字,眼中闪烁着好奇的光芒。不过,他的识字进度和老大并不相同。原本的小工具只能支持一个字库,无法满足我们的需求。于是,我第三次向AI求助,希望它能在同一个页面上实现分角色管理,让不同角色拥有各自独立的字库,且每个字库都能独立设置,互不干扰。这次的需求相较于之前更为复杂,但AI依旧不负众望,迅速给出了升级方案:在原有基础上增加“角色切换”功能。我们可以创建“大宝”和“小宝”两个角色,每个角色都有独立的生字库。切换角色时,只需点击顶部的“小人”图标即可。这下可方便了,给老二认完基础字,一键切换就能给老大练易错词,再也不用反复删改列表了。

次 “找 AI 帮忙”:再也不用当 “人体点读机”

作为一个懒人,如何更好地躺平呢?孩子有不认识的字,可不可以让系统直接告诉她?

当然可以!我第四个需求是:“能不能让系统自动读出字的发音?” 把需求告诉豆包后,它很快给出了方案:在现有页面中加入语音朗读功能,点击屏幕上的字,系统便会读出这个字的正确发音。这样一来,孩子不认识的字不用我再亲自读了,终于摆脱了’人体点读机’的命运,我这个老父亲彻底解放啦!

第五次 “找 AI 验证”:数据是否安全?

现在很多 APP 都要收集数据,这个小工具会把数据存到哪里呢?

我又去问 豆包,它告诉我:这个小程序的数据(包括字库、角色信息、重点标记和隐藏状态等)是保存在浏览器的 localStorage 中的,这是一种浏览器提供的本地存储机制,具体特点如下:

存储位置:数据存储在用户本地的浏览器缓存中,属于客户端存储,不会上传到任何服务器。

存储形式:以键值对(Key-Value)的形式保存,本程序使用的键是 wordCheckToolData,对应的值是经过 JSON 序列化的完整数据对象(包含角色列表、每个角色的字库、权重和隐藏状态等)。

生命周期:属于持久化存储,除非用户手动清除浏览器数据(如清除缓存),否则数据会一直保存在本地,关闭浏览器或重启电脑后仍会保留。

查看方式:可以通过浏览器的开发者工具(F12 打开)的 Application 面板,在左侧 Storage 下的 Local Storage 中找到当前域名对应的存储项查看具体内容。

数据隔离:不同浏览器(如 Chrome、Edge、Firefox)之间的 localStorage 是相互独立的,同一浏览器的不同域名也会隔离存储。

这种存储方式适合此类轻量型本地应用,既保证了数据的持久性,又避免了服务器存储的复杂性,同时保护了用户数据的隐私性。

4个功能解决我家的识字难题

现在这个工具,没有复杂的功能,就 4 个点,却正好戳中我们这种多娃家庭的需求:

俩娃各用各的:创建两个角色,分别存储大宝的易错词和小宝的基础字,切换便捷;

重点字主动练:标记的难认字会多出现,不用再反复翻卡片;

能读能听不费爸妈:点一下就能发音,孩子自己跟着学,爸妈不用再当“点读机”

数据安全无风险:所有学习记录和字库信息都存储在本地浏览器,不上传云端,彻底避免隐私泄露。

我这个“技术小白”,靠AI帮忙,只花了半天时间就搞定了,不用找开发、不用花钱,打开网页就能用。现在每晚的识字辅导,从“手忙脚乱翻卡片”变成了“轻松切换练重点”,俩娃的识字效率高了,我也不用再暴躁,甚至能多陪他们玩会儿游戏。

以前总觉得 “技术” 离我们普通家长很远,现在才发现,有了 AI,我们也能自己做工具解决育儿难题 —— 不用懂代码,不用会设计,只要把需求说清楚,AI 就能帮我们搭起 “专属辅导工具”。对我们来说,这不是什么 “高科技”,就是让陪娃学习更轻松的 “小帮手” 而已。

目前,这个小页面我已经上传至互联网,大家可随时访问并使用(https://www.daibei.info/renzijiancha/)。如果您有任何好的建议,欢迎随时向我反馈!