收起左侧

分享一个开源记账系统ezBookkeeping,自用中

13
回复
838
查看
[ 复制链接 ]

50

主题

58

回帖

0

牛值

小有名气

2025-8-31 20:02:07 显示全部楼层 阅读模式

ezBookkeeping


介绍

ezBookkeeping 是一款轻量、自托管 (self-hosted) 的个人记账应用,拥有用户友好的界面和强大的记账功能。它部署简单,借助 Docker 只需一行命令即可启动。同时对系统资源占用低、可扩展性高,既可运行在树莓派等轻量设备上,也能扩展到 NAS、MicroServer 甚至集群环境。

ezBookkeeping 为移动端和桌面端提供了各自原生的界面设计。借助 PWA (渐进式网页应用) 技术,您还可以将它 添加到手机主屏幕,像原生 App 一样使用。

项目地址:https://github.com/mayswind/ezbookkeeping
在线演示:https://ezbookkeeping-demo.mayswind.net

特性

  • 开源 & 自托管
    • 专为隐私与数据自主而设计
  • 轻量 & 快速
    • 为性能优化,即便在资源有限的设备上也运行流畅
  • 安装简单
    • 支持 Docker
    • 支持 SQLite、MySQL、PostgreSQL 多种数据库
    • 跨平台运行 (Windows, macOS, Linux)
    • 支持 x86, amd64, ARM 架构
  • 友好的用户界面
    • 针对手机与桌面优化的 UI
    • 支持 PWA,带来接近原生 App 的使用体验
    • 深色模式
  • AI驱动的功能
    • 支持 MCP (Model Context Protocol) 用于 AI 集成
  • 强大的记账功能
    • 二级账户与分类结构
    • 支持为交易添加图片附件
    • 记录交易地理位置并在地图上展示
    • 支持周期性交易
    • 高级筛选、搜索、数据可视化与分析功能
  • 本地化与国际化支持
    • 多语言与多币种支持
    • 自动汇率更新
    • 多时区感知
    • 自定义日期、数字与货币格式
  • 安全可靠
    • 两步认证 (2FA)
    • 登录频次限制
    • 应用锁 (PIN 码 / WebAuthn)
  • 数据导入/导出
    • 支持 CSV、OFX、QFX、QIF、IIF、Camt.053、MT940、GnuCash、FireFly III、Beancount、随手记、支付宝以及微信账单 等多种格式

截图

桌面版

ezBookkeeping

移动版

ezBookkeeping

安装

使用 Docker 部署

访问 Docker Hub 查看所有镜像和标签。

最新发布版本:

$ docker run -p8080:8080 mayswind/ezbookkeeping

最新每日构建:

$ docker run -p8080:8080 mayswind/ezbookkeeping:latest-snapshot

从二进制包安装

下载最新发布版本:https://github.com/mayswind/ezbookkeeping/releases

Linux / macOS

$ ./ezbookkeeping server run

Windows

> .\ezbookkeeping.exe server run

默认 ezBookkeeping 将会监听 8080 端口。您可以访问 http://{YOUR_HOST_ADDRESS}:8080/

从源代码构建

请确保您已经安装 Golang, GCC, Node.jsNPM。然后下载源代码并执行以下步骤:

Linux / macOS

$ ./build.sh package -o ezbookkeeping.tar.gz

所有的文件将被打包到 ezbookkeeping.tar.gz.

Windows

> .\build.bat package -o ezbookkeeping.zip

所有的文件将被打包到 ezbookkeeping.zip.

您还可以构建 Docker 镜像,确保您已经安装 Docker,然后执行以下步骤:

Linux

$ ./build.sh docker

关于安装 ezBookkeeping 的更多信息,您可以访问我们的文档

SQLite 版本

可能对于大多数人来说,这个版本已经完全足够。

部署代码如下:

services:
  ezbookkeeping:
    image: mayswind/ezbookkeeping:latest
    container_name: ezbookkeeping
    hostname: ezbookkeeping
    restart: unless-stopped
    ports:
      - "9527:8080" # 冒号左侧端口可改
    environment:
      EBK_SERVER_DOMAIN: 192.168.3.200   # 或你 NAS 的域名
      EBK_ROOT_URL: http://192.168.3.200:3721   # 包括端口
      EBK_LO**ODE: file
      EBK_SECURITY_SECRET_KEY:
      717ee782a9960010930a8e6da721443e01effdfde39023141c34ba51150d39d7  # 改成随机密钥
      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

开源好用的个人财务/记账应用,Docker一键部署ezBookkeeping

mysql 版本

若你已经部署mysql,或后续有共用数据库的打算,以及清楚自己在做什么,可以使用该版本。如果你对mysql并无了解,建议部署SQLite 版本。

如果你还没部署Mysql,部署代码可如下:

services:
  mysql:
    image: mysql:8.0
    container_name: ezbookkeepin**ysql
    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_LO**ODE: 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_LO**ODE: 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

EBK_LO**ODE: file =
捕获.PNG

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1

主题

1

回帖

0

牛值

江湖小虾

2025-9-1 09:59:32 显示全部楼层
好东西

1

主题

32

回帖

0

牛值

江湖小虾

2025-9-3 08:13:03 显示全部楼层

太复杂了,大神有没有简单点的

在docker下面新建ezbook,在ezbook下面新建3个文件夹:data 、storage 、log 在docker管理器中新建项目目录指定在ezbook文件夹,新建docker-compose.yml,把下面内容复制粘贴进去,然后保存构建就可以了。 注意:下  详情 回复
2025-9-3 22:42

50

主题

58

回帖

0

牛值

小有名气

2025-9-3 22:42:16 楼主 显示全部楼层

在docker下面新建ezbook,在ezbook下面新建3个文件夹:data 、storage 、log

在docker管理器中新建项目目录指定在ezbook文件夹,新建docker-compose.yml,把下面内容复制粘贴进去,然后保存构建就可以了。

如果出现任何错误,基本就是权限问题,把这三个文件夹 chmod 777 -R ./data storage log 就可以了。

注意:下面位置改成你nasIP地址 端口如果不冲突就不用改,如果冲突把9527 改掉就可以了,2处。

ports:

  • "9527:8080" # 冒号左侧端口可改
    environment:
    EBK_SERVER_DOMAIN: 192.168.3.200 # 或你 NAS 的域名
    EBK_ROOT_URL: http://192.168.3.200:9527 # 包括端口

services:
  ezbookkeeping:
    image: mayswind/ezbookkeeping:latest
    container_name: ezbookkeeping
    hostname: ezbookkeeping
    restart: unless-stopped
    ports:
      - "9527:8080" # 冒号左侧端口可改
    environment:
      EBK_SERVER_DOMAIN: 192.168.3.200   # 或你 NAS 的域名
      EBK_ROOT_URL: http://192.168.3.200:9527   # 包括端口
      EBK_LO**ODE: file
      EBK_SECURITY_SECRET_KEY:
      717ee782a9960010930a8e6da721443e01effdfde39023141c34ba51150d39d7  # 改成随机密钥
      EBK_MCP_ENABLE_MCP: true # AI服务
    volumes:
      - /etc/localtime:/etc/localtime:ro # 同步宿主机时间
      - ./data:/ezbookkeeping/data # SQLite 数据库存放位置(NAS持久化目录)
      - ./storage:/ezbookkeeping/storage # 文件存储目录(附件、导出文件等)
      - ./log:/ezbookkeeping/log # 日志目录

50

主题

58

回帖

0

牛值

小有名气

2025-9-3 22:44:27 楼主 显示全部楼层
  1. EBK_LO**ODE: file    =     <img src="https://club.fnnas.com/forum.php?mod=image&aid=56941&size=300x300&key=e06d27ee84420de3&nocache=yes&type=fixnone" border="0" aid="attachimg_56941" alt="">
复制代码

因为论坛内部敏感词导致显示不全,补充一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
成功了,但是那个随机秘钥我修改完代码错误,deepseek解决了  详情 回复
2025-9-4 08:24

1

主题

32

回帖

0

牛值

江湖小虾

2025-9-4 08:24:47 显示全部楼层
15166205993 发表于 2025-9-3 22:44
因为论坛内部敏感词导致显示不全,补充一下。

成功了,但是那个随机秘钥我修改完代码错误,deepseek解决了
随机密码 在nas shell模式下 执行 openssl rand -hex 32 就可以输出一个随机码(linux或mac 直接在终端执行就可以)  详情 回复
2025-9-5 18:04

1

主题

32

回帖

0

牛值

江湖小虾

2025-9-4 08:26:45 显示全部楼层

7049b473-515e-47c7-8b25-cded351061f9.png

12 | ERK_LO**ODE: file
13 | ERK_SECURITY_SECRET_KEY: # 如果无需设置值,可留空或注释说明
14 | # *********# 改成随机密钥 (将第14行改为注释,避免作为键)
15 | ERK_MCP_ENABLE_MCP: true # AT服务
16 | volumes:
17 | - /etc/localtime:/etc/localtime:ro

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1

主题

16

回帖

0

牛值

江湖小虾

2025-9-4 15:49:12 显示全部楼层

东西很不错,可惜没有手机端app

你用手机浏览器登录这个网页,就会发现自动适配了手机版,跟app界面完全一样。方便快捷。  详情 回复
2025-9-5 18:05

1

主题

12

回帖

0

牛值

江湖小虾

2025-9-4 17:21:26 显示全部楼层

请问如何设置禁止新用户注册呢?

已解决,修改INI文件可以禁止新用户注册  详情 回复
2025-9-4 17:33

1

主题

12

回帖

0

牛值

江湖小虾

2025-9-4 17:33:44 显示全部楼层
gary 发表于 2025-9-4 17:21
请问如何设置禁止新用户注册呢?

已解决,修改INI文件可以禁止新用户注册

50

主题

58

回帖

0

牛值

小有名气

2025-9-5 18:04:15 楼主 显示全部楼层
无法坦诚的 发表于 2025-9-4 08:24
成功了,但是那个随机秘钥我修改完代码错误,deepseek解决了

随机密码 在nas shell模式下 执行 openssl rand -hex 32 就可以输出一个随机码(linux或mac 直接在终端执行就可以)

50

主题

58

回帖

0

牛值

小有名气

2025-9-5 18:05:23 楼主 显示全部楼层
xuecqcn 发表于 2025-9-4 15:49
东西很不错,可惜没有手机端app

你用手机浏览器登录这个网页,就会发现自动适配了手机版,跟app界面完全一样。方便快捷。

50

主题

58

回帖

0

牛值

小有名气

2025-9-8 14:44:05 楼主 显示全部楼层

为了后期好进行更丰富的配置可以把conf文件夹映射出来,这样就可以通过直接修改ezbookkeeping.ini 文件进行 关闭注册功能 等等各种配置。如果已经部署好的,先到容器里面通过cp命令把 ezbookkeeping.ini 拷贝到已经挂载的目录里面,然后把文件移动到新建的conf文件夹里,不然会导致挂载的conf为空目录找不到配置文件而启动不起来。这样以后就可以随时编辑配置文件然后重启镜像就能应用配置。新手不建议把配置文件挂载出来。

volumes:
  - /etc/localtime:/etc/localtime:ro
  - ./storage:/ezbookkeeping/storage
  - ./log:/ezbookkeeping/log
  - ./conf:/ezbookkeeping/conf
  - ./data:/ezbookkeeping/data

19

主题

78

回帖

0

牛值

fnOS系统内测组

社区上线纪念勋章

我部署的没那么多
services:
  ezbookkeeping:
    image: mayswind/ezbookkeeping:latest
    container_name: ezbookkeeping
    ports:
      - "8888:8080"  # 默认端口,可自定义(如10669:8080)
    environment:
      - EBK_DATABASE_TYPE=sqlite3  # 使用SQLite轻量数据库
      - EBK_SECURITY_SECRET_KEY=**************************  # 必填!替换为随机密钥(生成命令见下文)
    volumes:
      - "/vol1/1000/docker/ezBookkeeping/data:/ezbookkeeping/data"  # 数据库文件
      - "/vol1/1000/docker/ezBookkeeping/storage:/ezbookkeeping/storage"  # 用户文件
      - "/vol1/1000/docker/ezBookkeeping/log:/ezbookkeeping/log"  # 日志:cite[4]
    restart: always

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则