Grocy 评测:用 ERP 思路管理冰箱,但先想清楚你要不要一个数据库
冰箱之外的 ERP - Grocy 是一个基于网络的自托管杂货和家居管理解决方案。
秒懂
- 它是什么?
- Grocy 是一个自托管的家庭杂货与家务管理软件,它把库存、购物清单和家务日程塞进一个 PHP 应用里。本文基于官方文档和仓库信息,分析它的实际机制、安装方式和适用边界。
- 适合谁用?
- Grocy 适合愿意长期维护一个自托管实例、并且家庭成员都接受用条码或手动录入来维护库存数据的人。它不适合只想偶尔记一下购物清单、或者希望开箱即用的用户,因为它的核心价值建立在数据完整录入之上,而录入本身就是最大的成本。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 11 天前。
- 用什么语言写的?
- 主要是 JavaScript(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决的不是购物清单问题,而是库存一致性问题
Grocy 的定位是“ERP beyond your fridge”,翻译过来就是“冰箱之外的 ERP”。这不是营销话术,而是它设计逻辑的真实反映。普通购物清单应用只记录你要买什么,Grocy 记录的是你家里有什么、用了多少、什么时候过期、还缺什么。它把库存、购物清单、家务和食谱放在同一个系统里,目标用户是那种愿意为家庭管理投入时间和精力的人。作者 Bernd Bestel 在 README 里说,他之前用 Excel 管理家庭十年,最后受不了了,才写了这个软件。这句话透露出一个关键信息:Grocy 是为数据录入爱好者准备的,不是为怕麻烦的人准备的。
一个简单的 PHP 应用,但数据流比你想象的深
Grocy 的技术栈很朴素,README 明说它是“a pretty simple PHP application”,依赖 SQLite 和几个 PHP 扩展。但它的架构有一个值得注意的点:前端界面几乎完全通过 REST API 与后端交互。README 里写着“The web frontend uses exactly this API for pretty much everything”,这意味着你在网页上做的任何操作,都能通过 API 复现。这个设计让 Grocy 不只是一个人工录入工具,它可以被脚本、手机应用或智能家居系统调用。例如,你可以在冰箱门上放一个扫码枪,扫一下商品条码,Grocy 就自动入库。文档还提到,条形码查询可以对接外部服务,默认使用 Open Food Facts 插件,你也可以写自己的插件。这种数据流的设计,让 Grocy 从一个简单库存表变成了一个可编程的家庭数据中枢。
安装不是难点,难在配置和长期维护
安装 Grocy 的步骤相当直白:下载最新 release,把 `config-dist.php` 复制成 `data/config.php`,确保 `data` 目录可写,让 Web 服务器根目录指向 `public`,默认登录账号是 `admin` 密码也是 `admin`,必须立刻改密码。如果你用 nginx,需要在 location 块里加一行 `try_files $uri /index.php$is_args$query_string;`,或者直接关闭 URL 重写。Docker 用户有现成的镜像,来自 linuxserver。但真正的维护成本在更新环节。官方更新方式是覆盖所有文件,但保留 `data` 目录,然后对照 `config-dist.php` 把新增配置项手动加到 `data/config.php`。这意味着每次升级都是一次手工操作,虽然 Linux 下有一个 `update.sh` 脚本可以自动备份并清理旧备份,但它要求你提前安装 `unzip`,而且备份只保留 60 天。这个流程暴露出一个现实:Grocy 的家庭用户必须把自己当成系统管理员,而不是普通用户。
条形码扫描:体验的上限取决于你的硬件
Grocy 支持两种条形码输入方式。一种是 USB 激光扫码枪,作者在 README 里直接给了个人推荐,说它们便宜、快速、不受光照影响、任何角度都能扫。另一种是用手机摄像头,通过 ZXing 库实现,完全离线处理,但有一个硬性限制:必须通过 HTTPS 访问才能工作,因为浏览器安全策略不允许非安全连接调用摄像头。这个限制对自托管用户很现实,如果你只在家里局域网用 HTTP,摄像头扫描就用不了。另外,文档建议扫码枪在条码前加一个前缀字母(比如 `$`)并在扫描后发送一个 `TAB`,这样能避免误触发输入框。这些细节说明,Grocy 的条码体验不是开箱即用的,它需要你调整硬件配置和输入习惯。如果你不想折腾这些,体验会打折扣。
外部条码查询:有用,但别指望它覆盖所有商品
Grocy 提供了一个“外部条码查询”功能,当你在商品输入框里输入一个未知条码时,会弹出一个工作流,让你从外部服务拉取商品信息。默认使用 Open Food Facts 插件,这是一个开放的食品数据库。这个功能的实际价值在于,你不用手动输入每个商品的名称、品牌和包装规格,扫一下条码就能自动填充。但它的局限也很明显:Open Food Facts 的数据覆盖范围以欧美食品为主,国内商品和很多非食品类目可能查不到。而且它依赖网络,如果你的家庭网络不稳定,或者你不想把条码发送到外部服务,这个功能就不可用。README 也提供了示例插件 `DemoBarcodeLookupPlugin.php`,说明这个机制是可扩展的,但写插件需要 PHP 知识,不是普通家庭用户能轻松搞定的。
本地化与界面:英语和德语是亲儿子,RTL 没戏
Grocy 的默认语言是英语,德语由作者亲自维护,其他语言通过 Transifex 协作翻译。任何翻译达到 70% 完成度就会包含在 release 中,预发布演示站也会每小时拉取新翻译。这个机制对中文用户来说意味着什么?如果你的中文翻译没达到 70%,你只能在预发布站看到部分翻译,正式版里可能没有。更关键的是,README 明确写了“RTL languages are not yet supported”,虽然中文不是 RTL,但界面布局是为 LTR 设计的,翻译质量参差不齐。如果你对界面语言有严格要求,可能需要自己参与翻译,或者忍受英文界面。这又是一个需要投入精力的点,不是下载就能用的。
替代方案:不是所有家庭都需要一个 ERP
Grocy 的替代品分为两类。一类是更轻量的库存管理工具,比如 Home Assistant 的购物清单集成,它只做清单,不涉及库存深度跟踪,适合那些不想维护数据一致性的用户。另一类是更专业的自托管 ERP,比如 Odoo 社区版,它功能全面但复杂度远超 Grocy,适合有企业需求的人。差异在于数据模型:Grocy 把库存、购物清单和家务绑定在一起,操作一个环节会联动其他环节,而轻量工具是各自独立的。如果你只需要“记住买牛奶”,Grocy 是杀鸡用牛刀。如果你需要“知道冰箱里还有多少牛奶,以及它什么时候过期”,Grocy 的设计才真正发挥作用。这个权衡在 README 的动机部分体现得很清楚,作者追求的是“complete household management”,而不是简单的待办事项。
编辑结论
Grocy 适合愿意长期维护一个自托管实例、并且家庭成员都接受用条码或手动录入来维护库存数据的人。它不适合只想偶尔记一下购物清单、或者希望开箱即用的用户,因为它的核心价值建立在数据完整录入之上,而录入本身就是最大的成本。在部署之前,先确认你的 PHP 版本满足 8.5 和 SQLite 3.40+ 的要求,并且想清楚是否愿意维护 `data/config.php` 中的每一项设置。如果你只是想要一个简单的购物列表,别用 Grocy,用任何待办应用都更省事。但如果你真的想把冰箱变成一个小型 ERP,Grocy 的 REST API 和外部条码查询插件值得一试,前提是你能接受它的数据目录是唯一的持久化存储,备份策略必须自己搞定。
社区笔记