前阵子去欧洲玩了一段时间,鸽了挺久了,今天有点时间,立马来和大家分享好玩儿的Docker项目。

1. 介绍

ezBookkeeping 是一款轻量级的个人理财应用,你可以自己架设(自托管)。它界面简洁,用起来很顺手,记账功能也强大。

这款应用的设计核心就是简单便携。它部署起来毫不费力,上手快,而且对系统资源的占用极小。无论是微型服务器、NAS 设备,还是树莓派,都能轻松运行。

ezBookkeeping 支持全平台,对各种设备都很友好。在手机、平板和电脑上用,体验都一样流畅。它还支持 PWA(渐进式网页应用),你可以直接把它添加到手机主屏幕,像本地应用一样方便地使用。

1.1 功能特点

开源与自托管

  • 为你提供隐私和数据控制权

轻量又快速

  • 性能卓越,即使在低配置环境下也能流畅运行

安装简单

  • 支持 Docker 部署
  • 兼容 SQLite, MySQL, PostgreSQL 数据库
  • 跨平台运行(支持 Windows, macOS, Linux)
  • 支持多种处理器架构 (x86, amd64, ARM)

界面友好

  • 界面已针对移动和桌面设备优化
  • 支持 PWA,在手机上可获得类似原生应用的体验
  • 提供深色模式

AI 赋能

  • 支持 MCP (Model Context Protocol),可集成 AI 功能

强大的记账功能

  • 支持两级账户和分类
  • 可为交易添加图片附件
  • 具备地图位置追踪功能
  • 支持周期性(重复)交易
  • 提供高级筛选、搜索、数据可视化和分析功能

本地化与全球化

  • 支持多种语言和货币
  • 自动更新汇率
  • 支持多时区显示
  • 可自定义日期、数字和货币格式

安全保障

  • 支持双重身份验证 (2FA)
  • 登录频率限制
  • 应用锁定功能(支持 PIN 码 / WebAuthn)

数据导入/导出

  • 支持多种格式,包括 CSV, OFX, QFX, QIF, IIF, Camt.053, MT940, GnuCash, Firefly III, Beancount 等等

简单来说,这是一个记账的项目,然后它还可以支持MCP,可以搭配大语言模型一起食用。

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

2. 相关地址

官方GitHub地址:https://github.com/mayswind/ezbookkeeping (目前958个star,欢迎大家去给作者点星星!)

官方Demo:https://ezbookkeeping-demo.mayswind.net

3. 搭建环境

4. 搭建视频(有时间补充!)

4.1 YouTube

视频地址:

4.2 哔哩哔哩

哔哩哔哩:

5. 搭建方式

5.1 安装 Docker 与 Nginx Proxy Manager

可以直接参考这篇内容:

https://blog.laoda.de/archives/nginxproxymanager/

5.2 创建安装目录

创建一下安装的目录:

sudo -i  mkdir -p /root/data/docker_data/ezbookkeeping  cd ezbookkeeping 

我们来简单修改一下作者提供的docker-compose.yml文件

vim docker-compose.yml 

主机测评修改之后的(其实就是修改了端口号和删除了version: "3.7"):

services:   ezbookkeeping:     image: mayswind/ezbookkeeping     container_name: ezbookkeeping     restart: unless-stopped     ports:       - 8082:8080     volumes:       - /etc/localtime:/etc/localtime:ro       - ./storage:/ezbookkeeping/storage       - ./log:/ezbookkeeping/log     #  - ./ezbookkeeping.ini:/ezbookkeeping/conf/ezbookkeeping.ini     environment:       - EBK_DATABASE_TYPE=mysql       - EBK_DATABASE_HOST=mysql:3306       - EBK_DATABASE_NAME=ezbookkeeping       - EBK_DATABASE_USER=ezbookkeeping       - EBK_DATABASE_PASSWD=ezbookkeeping       - EBK_LOG_MODE=file       - EBK_SECURITY_SECRET_KEY=its_should_be_a_random_string       - EBK_MCP_ENABLE_MCP=true     # depends_on:     #  mysql:     #    condition: service_healthy    mysql:       image: mysql:8.0      container_name: ezbookkeeping-mysql     restart: unless-stopped     volumes:           - ./data:/var/lib/mysql     environment:           - MYSQL_DATABASE=ezbookkeeping           - MYSQL_USER=ezbookkeeping           - MYSQL_PASSWORD=ezbookkeeping           - MYSQL_ROOT_PASSWORD=ezbookkeeping     healthcheck:           test: ["CMD", "mysqladmin", "ping", "-p ezbookkeeping"]           retries: 3           timeout: 5s 

修改完成之后,可以在英文输入法下,按 i 修改,完成之后,按一下 esc,然后 :wq 保存退出。

接着创建文件夹,赋予文件权限:

cd /root/data/docker_data/ezbookkeeping mkdir ./{data,log,storage} chmod a+rw {log,storage} 

5.3 打开服务器防火墙(非必需)并访问网页

打开防火墙的端口 8082

举例,腾讯云打开方法如下(部分服务商没有自带的面板防火墙,就不用这步操作了):

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目 支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

类似图中的,这边我们填 8082,示例填 ezbookkeeping ,确定即可(如果你在 docker-compose 文件里换了 9009,这边就需要填 9009,以此类推)

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

查看端口是否被占用(以 8082 为例),输入:

lsof -i:8082  #查看 8082 端口是否被占用,如果被占用,重新自定义一个端口 

如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~

如果出现:

-bash: lsof: command not found 

运行:

apt install lsof  #安装 lsof 

如果端口没有被占用(被占用了就修改一下端口,比如改成 8381,注意 docker 命令行里和防火墙都要改)

5.4 启动 ezbookkeeping

cd /root/data/docker_data/ezbookkeeping  docker compose up -d   # 注意,老版本用户用 docker-compose up -d 

等待拉取好镜像,出现 done的字样之后,

理论上我们就可以输入 http://ip:8082 访问了。

但是这边我们推荐先搞一下反向代理!

做反向代理前,你需要一个域名!

namesilo 上面 xyz 后缀的域名一年就 7 块钱,可以年抛。(冷知识,namesilo上 6位数字的xyz续费永远都是0.99美元 = =)

如果想要长期使用,还是建议买 com 后缀的域名,更加正规一些,可以输入 laodade 来获得 1 美元的优惠(不知道现在还有没有)

namesilo 自带隐私保护,主机测评一直在用这家,价格也是这些注册商里面比较低的,关键是他家不像其他家域名注册商,没有七七八八的套路!(就是后台界面有些 古老 = =)

【域名购买】Namesilo 优惠码和域名解析教程(附带服务器购买推荐和注意事项)

我们接着往下看!

6. 反向代理

6.1 利用 Nginx Proxy Manager

在添加反向代理之前,确保你已经完成了域名解析,不会的可以看这个:域名一枚,并做好解析到服务器上域名购买、域名解析 视频教程

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

之后,登陆 Nginx Proxy Manager(不会的看这个:安装 Nginx Proxy Manager相关教程))

注意:

Nginx Proxy Manager(以下简称 NPM)会用到 80443 端口,所以本机不能占用(比如原来就有 Nginx)

直接丢几张图:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目 支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目 支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目 支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

注意填写对应的 域名IP端口,按文章来的话,应该是 8082

IP 填写:

如果 Nginx Proxy Manager 和 ezbookkeeping 在同一台服务器上,可以在终端输入:

ip addr show docker0 

查看对应的 Docker 容器内部 IP。

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

否则直接填 ezbookkeeping 所在的服务器 IP 就行。

6.2 利用宝塔面板

发现还是有不少小伙伴习惯用宝塔面板,这边也贴一个宝塔面板的反代配置:

直接新建一个站点,不要数据库,不要 php,纯静态即可。

然后打开下面的配置,修改 Nginx 的配置。

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目 支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

代码如下:

location / {       proxy_pass http://127.0.0.1:8082/;       # 注意改成你实际使用的端口       rewrite ^/(.*)$ /$1 break;       proxy_redirect off;       proxy_set_header Host $host;       proxy_set_header X-Forwarded-Proto $scheme;       proxy_set_header X-Real-IP $remote_addr;       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;       proxy_set_header Upgrade-Insecure-Requests 1;       proxy_set_header X-Forwarded-Proto https;     } 

此方法对 90% 的反向代理都能生效,然后就可以用域名来安装访问了。

有同学可能会问,为什么不直接用宝塔自带的反向代理功能。

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

也可以,不过主机测评自己之前遇到过当有多个网站需要反代的时候,在这边设置会报错的情况 = =

所以后来就不用了,直接用上面的方法来操作了。

7. 使用教程

登录你的域名之后,可以看到首页:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

这个时候需要创建一个新账号:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

这里的预设分类,可以选择打开:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

进入后台,结构很清晰:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

我们先来添加一下账户:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

比如,取名就叫做“主机测评的账本”:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

先来手动添加一笔试试看:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

可以正常添加:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

MCP配置

一开始我们就说了,这个账本支持MCP。

MCP(模型上下文协议)是由 Anthropic 开发的一种开放协议,它能让 AI 模型安全地连接到外部数据源和和工具。

简单来说,MCP 就像一座桥梁,它提供了一种通用的标准,让 AI 工具能安全地获取信息和执行操作,同时确保数据安全和用户可以掌控一切。

有了 MCP 协议,你就可以用自己喜欢的 AI 工具来:

  • 添加交易记录:比如,直接用自然语言(就是日常说话的方式)来创建交易,或者从不同的文件格式中批量导入交易记录。
  • 查询交易数据:比如,让你的 AI 工具帮你分析历史交易记录。
  • 以及做更多的事情

更多MCP相关介绍可以看这边:https://ezbookkeeping.mayswind.net/mcp

这边我们来看看怎么配置。

首先找到右上角的用户设置,

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

生成MCP令牌:

有两种形式,分别是普通的令牌和json配置:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

普通:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyVG9rZW5JZCI6IjMzOTQ1NTM3NTIyOTE5OTc4MzYiLCJqdGkiOiIzNzY4ODA2Njg4MjQ1NjbWUiOiJSb3kiLCJ0eXBlIjo1LCJpYXQiOjE3NTQ5ODc3NzcsImV4cCI6MTA5NzgzNTk4MTR9.7JL_4kzKhihatpfQxIkhD6Z_ibZ_vBYtcQ_D9UCV--0 

JSON配置:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

{     "mcpServers": {         "ezbookkeeping-mcp": {             "type": "streamable-http",             "url": "http://localhost:8080/mcp",             "headers": {                 "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyVG9rZW5JZCI6IjMzOTQ1NTM3NTIyOTE5OTc4MzYiLCJqdGkiOiIzNzY4ODA2Njg4hbWUiOiJSb3kiLCJ0eXBlIjo1LCJpYXQiOjE3NTQ5ODc3NzcsImV4cCI6MTA5NzgzNTk4MTR9.7JL_4kzKhihatpfQxIkhD6Z_ibZ_vBYtcQ_D9UCV--0"             }         }     } } 

这边可以保存下来,下次打开就看不到了。

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

Cherry Studio配置

这边以Cherry Studio为例,看看MCP怎么配置。

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

配置情况如图:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

  • 名称:主要用于识别,例如:ezBookkeeping
  • 类型:选择 streamableHttp 协议
  • URL:为 你的域名/mcp
  • 请求头: 为 Authorization=Bearer {token}

接着可以查看一下可以调用的工具:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

然后为了确保大模型能正确理解什么是今天,还需要加个时间MCP,这次我们选择json导入,

{     "mcpServers": {         "mcp-server-time": {             "command": "uvx",             "args": ["mcp-server-time"]         }     } } 

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

这下,你应该有两个MCP服务了。

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

查看一下时间工具的功能:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

接着,我们到Cherry Studio里新建一个助手,

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

选择启用这两个MCP服务:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

测试一下,可以看到回答的时候,调用了MCP服务,

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

这边提示错误,我没有说记录到哪个账本:

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

还需要说明交易类别,

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

后续,

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

记录成功!

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

不过这次似乎没有调用时间MCP,时间似乎有问题……

然后我尝试使用Deepseek,直接不调用MCP服务了,很奇怪。

支持MCP,轻量又全面的记账软件——ezBookkeeping|好玩儿的Docker项目

后续一直没调用MCP服务,暂时还没解决,我的是Mac,有解决的小伙伴可以评论区分享一下。

7.1 更新 ezbookkeeping

cd /root/data/docker_data/ezbookkeeping  docker compose pull  docker compose up -d    # 请不要使用 docker compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。  docker image prune  # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像 

提示:

WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] 

输入 y

利用 Docker 搭建的应用,更新非常容易~

7.2 卸载 ezbookkeeping

同样进入安装页面,先停止所有容器。

cd /root/data/docker_data/ezbookkeeping  docker compose down  cd ..  rm -rf /root/data/docker_data/ezbookkeeping  # 完全删除 

可以卸载得很干净。

8. 常见问题及注意点

还是MCP调用的问题,不是非常稳定,暂时不确定是不是Cherry Studio的问题。

9. 结尾

祝大家用得开心,有问题可以去 GitHub 提 Issues,也可以在评论区互相交流探讨。

同时,项目处于初期,有能力给项目做贡献的同学,也欢迎积极加入到 [项目]https://github.com/mayswind/ezbookkeeping) 中来,贡献自己的一份力量!

最后,感谢开发人员们的辛苦付出,让我们能用到这么优秀的项目!也希望开源项目越来越好!

10. 参考资料

官方GitHub:https://github.com/mayswind/ezbookkeeping