docker部署ezBookkeeping-支持MCP的记账应用

docker部署ezBookkeeping-支持MCP的记账应用

介绍

ezBookkeeping 是一款轻量、自托管 (self-hosted) 的个人记账应用,拥有简洁美观的用户界面与强大的记账功能。它以“简单易用、易于部署”为设计理念,对系统资源的需求极低,非常适合部署在 MicroServer、NAS 设备,甚至树莓派上使用。

本应用支持多平台多设备,您可以无缝地在 手机、平板、桌面电脑 上使用。同时借助 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、随手记、支付宝以及微信账单 等多种格式

docker-compose.yml安装

支持 SQLite、MySQL、PostgreSQL 多种数据库

1、SQLite数据库的compose.yml

services:
  ezbookkeeping:
    image: mayswind/ezbookkeeping
    container_name: ezbookkeeping
    hostname: "ezbookkeeping"
    ports:
      - "8066:8080"
    environment:
      - "EBK_SERVER_DOMAIN=ezbookkeeping.yourdomain"
      - "EBK_SERVER_ENABLE_GZIP=true"
      - "EBK_DATABASE_TYPE=sqlite3"
      - "EBK_DATABASE_FILE=./storage/ezbookkeeping.db"  # 相对路径(容器内)
      - "EBK_LOG_MODE=file"
      - "EBK_SECURITY_SECRET_KEY=its_should_be_a_random_string"
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "./storage:/ezbookkeeping/storage"  # 本地相对路径(./ezbookkeeping_data/
      - "./log:/ezbookkeeping/log"         # 本地相对路径(./ezbookkeeping_data/
      - "./data:/ezbookkeeping/data" #数据库固化

2、MySQL、PostgreSQL等独立数据库的compose.yml(适合已安装有独立数据库的)

services:
  ezbookkeeping:
    image: mayswind/ezbookkeeping
    container_name: ezbookkeeping
    hostname: "ezbookkeeping"
    ports:
      - "8066:8080" # 根据需要修改冒号前的端口,不跟其它应用冲突即可
    environment:
      - "EBK_SERVER_DOMAIN=ezbookkeeping.yourdomain"
      - "EBK_SERVER_ENABLE_GZIP=true"
      - "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" # 随机KEY
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "./storage:/ezbookkeeping/storage" # 请确保 UID:GID 是 1000:1000
      - "./log/ezbookkeeping:/ezbookkeeping/log" # 请确保 UID:GID 是 1000:1000

3、带数据库一键安装的compose.yml

services:
  ezbookkeeping:
    image: mayswind/ezbookkeeping
    container_name: ezbookkeeping
    restart: unless-stopped
    ports:
      - 8066: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

访问地址:http://你NAS的IP:8066

应用登陆界面

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注