本期来介绍一款 记账/个人财务 应用工具:ezBookkeeping。适合个人使用,简洁、强大且便携,小微设备或云服务器都能轻松运行。
笔者体验下来PC和移动端用着都很舒服,项目非常棒,特做推荐!!!
应用介绍
ezBookkeeping 是一款轻量级、自托管的个人财务应用,拥有简洁易用的界面和强大的记账功能。它以简洁易用和可移植性为设计理念,易于部署、易于使用,并且占用的系统资源极少,非常适合微服务器、NAS 设备,甚至 Raspberry Pi,也能在 PC、Mac 甚至云服务器上流畅运行。
该应用程序完全跨平台且设备友好:可以在移动设备、平板电脑和桌面设备上无缝使用它。由于支持 PWA(渐进式 Web 应用程序),甚至可以将其添加到移动主屏幕,并像原生应用程序一样使用它。
功能特点
1. 开源 & 自托管
代码开放,部署在自己的服务器,隐私和数据完全掌握在自己手中。
适合重视数据安全、拒绝云端锁定的用户。
2. 轻量 & 高性能
针对低资源环境优化,树莓派、NAS、旧笔记本都能流畅运行。
即使是多账本、大量交易记录,也能保持响应快速。
3. 简单部署
官方提供 Docker 镜像,几行命令即可启动。
支持 SQLite(零配置)、MySQL、PostgreSQL 等多种数据库。
跨平台支持 Windows、macOS、Linux,兼容 x86、amd64、ARM 架构。
4. 跨平台 & PWA 支持
UI 适配桌面与移动端。
支持 PWA(Progressive Web App),可直接添加到手机主屏幕,像原生 App 一样使用。
内置暗黑模式,夜间看账也护眼。
5. AI 能力
支持 MCP(Model Context Protocol),可集成 AI 功能进行智能分析、自动分类或生成财务洞察。
6. 强大的记账功能
两级账户与分类体系,更精准管理收支。
可为交易附加图片(如收据、发票)。
支持位置记录,自动在地图上显示消费地点。
定期交易(如房租、水电费)可自动生成。
高级搜索、过滤、数据可视化和分析工具,帮助你发现消费习惯。
7. 国际化支持
多语言、多货币支持。
自动更新汇率。
支持多时区显示与自定义日期、数字、货币格式。
8. 安全保障
支持双重认证(2FA)。
登录尝试次数限制,防暴力破解。
应用锁(PIN 码 / WebAuthn)防止未授权访问。
9. 数据导入/导出
支持导入/导出多种格式:
CSV、OFX、QFX、QIF、IIF、Camt.053、MT940、GnuCash、Firefly III、Beancount 、随手记、支付宝以及微信账单 等多种格式等。
方便从旧系统迁移,或与其他财务软件对接。
如何部署
我们以威联通NAS为例,通过Docker Compose的方式进行部署。
ezBookkeeping 容器默认 UID:GID = 1000:1000,必须确保挂载到容器的宿主机目录拥有读写权限,请提前赋权。如果你部署失败,则极大概率会是这个原因。
chown -R 1000:1000 /share/Container/ezbookkeeping/data
chown -R 1000:1000 /share/Container/ezbookkeeping/storage
chown -R 1000:1000 /share/Container/ezbookkeeping/log
SQLite 版本
可能对于大多数人来说,这个版本已经完全足够。
部署代码如下,威联通用户可直接抄作业:
services:
ezbookkeeping:
image: mayswind/ezbookkeeping:latest
container_name: ezbookkeeping
hostname: ezbookkeeping
restart: unless-stopped
ports:
- "9527:8080" # 冒号左侧端口可改
environment:
EBK_SERVER_DOMAIN: 192.168.200.132 # 或你 NAS 的域名
EBK_ROOT_URL: http://192.168.200.132:9527 # 包括端口
EBK_LOG_MODE: file
EBK_SECURITY_SECRET_KEY: its_should_be_a_random_string # 改成随机密钥
EBK_MCP_ENABLE_MCP: true # AI服务
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间
- /share/Container/ezbookkeeping/data:/ezbookkeeping/data # SQLite 数据库存放位置(NAS持久化目录)
- /share/Container/ezbookkeeping/storage:/ezbookkeeping/storage # 文件存储目录(附件、导出文件等)
- /share/Container/ezbookkeeping/log:/ezbookkeeping/log # 日志目录
随机密钥可通过以下命令生成:
openssl rand -hex 32
mysql 版本
若你已经部署mysql,或后续有共用数据库的打算,以及清楚自己在做什么,可以使用该版本。如果你对mysql并无了解,建议部署SQLite 版本。
如果你还没部署Mysql,部署代码可如下:
services:
mysql:
image: mysql:8.0
container_name: ezbookkeeping-mysql
hostname: mysql
restart: unless-stopped
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: rootpassword # MySQL root 超级管理员密码
MYSQL_DATABASE: ezbookkeeping
MYSQL_USER: ezbookkeeping
MYSQL_PASSWORD: ezbookkeeping # 可改
volumes:
- /share/Container/ezbookkeeping/data_mysql:/var/lib/mysql
# 如果后续准备多容器共用mysql数据库
# - /share/Container/mysql/data:/var/lib/mysql
ports:
- "3306:3306" # 可选,内部访问可去掉
# 如果你修改了 MYSQL_PASSWORD
# 则健康检查中的值也别忘记修改
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p", "ezbookkeeping"]
interval: 10s
timeout: 5s
retries: 5
ezbookkeeping:
image: mayswind/ezbookkeeping:latest
container_name: ezbookkeeping
hostname: ezbookkeeping
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
ports:
- "9527:8080" # 冒号左侧可改
environment:
EBK_SERVER_DOMAIN: 192.168.200.132 # 或你 NAS 的域名
EBK_ROOT_URL: http://192.168.200.132:9527 # 包括端口
EBK_DATABASE_TYPE: mysql
EBK_DATABASE_HOST: mysql:3306
EBK_DATABASE_NAME: ezbookkeeping
EBK_DATABASE_USER: ezbookkeeping # 对应上面,下同
EBK_DATABASE_PASSWD: ezbookkeeping # 对应上面 MYSQL_PASSWORD
EBK_LOG_MODE: file
EBK_SECURITY_SECRET_KEY: 随机密钥替换这里 # 生成方式参考上文
EBK_MCP_ENABLE_MCP: "true" # 可选启用 AI 功能
volumes:
- /etc/localtime:/etc/localtime:ro
- /share/Container/ezbookkeeping/storage:/ezbookkeeping/storage
- /share/Container/ezbookkeeping/log:/ezbookkeeping/log
如果你已经部署过Mysql,要提前在Mysql中创建独立数据库和用户,以供ezBookkeeping使用:
CREATE DATABASE ezbookkeeping CHARACTER SET utf8mb4;
CREATE USER 'ezbookkeeping'@'%' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON ezbookkeeping.* TO 'ezbookkeeping'@'%';
FLUSH PRIVILEGES;
参考代码如下,酌情修改:
services:
ezbookkeeping:
image: mayswind/ezbookkeeping:latest
container_name: ezbookkeeping
hostname: ezbookkeeping
restart: unless-stopped
ports:
- "9527:8080"
environment:
EBK_SERVER_DOMAIN: 192.168.200.132 # 或你 NAS 的域名
EBK_ROOT_URL: http://192.168.200.132:9527 # 包括端口
EBK_SERVER_DOMAIN: yourdomain
EBK_SERVER_ENABLE_GZIP: "true"
EBK_DATABASE_TYPE: mysql
EBK_DATABASE_HOST: 127.0.0.1:3306 # NAS 内部 MySQL 地址,不一定都是这个
EBK_DATABASE_NAME: ezbookkeeping
EBK_DATABASE_USER: ezbookkeeping
EBK_DATABASE_PASSWD: 强密码替换这里
EBK_LOG_MODE: file
EBK_SECURITY_SECRET_KEY: 随机密钥替换这里
EBK_MCP_ENABLE_MCP: "true"
volumes:
- /etc/localtime:/etc/localtime:ro
- /share/Container/ezbookkeeping/storage:/ezbookkeeping/storage
- /share/Container/ezbookkeeping/log:/ezbookkeeping/log
注意
更多的配置,可以参考下图,官方wiki十分详细,包括邮件服务、通知配置、对象存储、汇率等都可进行配置。
初始化及功能展示
选用SQLite对应代码进行部署后,浏览器中输入 NAS_IP:9527 即可访问服务。
需要我们新建一个账户。
第二步的预设分类我们可以选择启用,然后提交即可。可能出现提交无法通过,但事实已经注册成功,反回去登陆就行。不过为了后续稳定,建议删除全部配置文件重新创建。
界面展示如下,清晰明了,蛮符合我个人口味。大家觉得如何?
点击头像可进行各种设置。
密码和设备管理,在这里可生成MCP令牌供AI对话调用。
支持两步验证,资安相关的确实有必要整一个。
数据管理,支持手动导出数据。
应用设置中可以配置展示界面、添加应用锁(六位PIN码)、资金统计显示以及数据同步(移动/PC分离)。
简单使用
左侧栏的「账户」,新增一个。可自行添加标签,也可上传图片凭据。
开始记账,可自行添加标签,也可上传图片凭据。
可以看到添加成功。
主界面显示如下图所示,很丝滑。如果大家不满足于基础的交易分类、模版等,在左侧的基础数据手动添加/删除即可。
MCP服务
来尝试下MCP服务,生成令牌。这个配置建议保存,一次性显示,否则就要重新创建一个。
配置填写如下图所示,url中间部份可填写域名或IP,能正确访问到你的服务即可。
可以看到已经添加成功了,但是查看API功能接口,感觉跟官方给的wiki介绍有差距。
实际指令测试却并不能成功,检查了网络(全程局域网)、数据库文件,最终未果~大家或许可以试试mysql会不会有同样问题。
关于MCP也有相关的功能介绍界面,感兴趣的朋友可以琢磨。
最后
我认为这个项目非常优秀,PC端和移动端的使用很满意。
项目较新,大家有啥建议可以到项目地址提交issues~
感谢观看,本文完。
评论区