Giter VIP home page Giter VIP logo

mayswind / ezbookkeeping Goto Github PK

View Code? Open in Web Editor NEW
82.0 6.0 22.0 5.38 MB

A lightweight personal bookkeeping app hosted by yourself.

Home Page: http://ezbookkeeping.mayswind.net

License: MIT License

Dockerfile 0.06% JavaScript 24.08% Shell 0.25% Go 25.23% Vue 43.09% HTML 1.08% CSS 1.39% SCSS 4.54% Batchfile 0.28%
self-hosted golang javascript vue app personal account-book money money-management personal-finance

ezbookkeeping's Introduction

ezBookkeeping

License Latest Build Go Report Latest Docker Image Size Latest Release

Introduction

ezBookkeeping is a lightweight personal bookkeeping app hosted by yourself. It can be deployed on almost all platforms, including Windows, macOS and Linux on x86, amd64 and ARM architectures. You can even deploy it on an raspberry device. It also supports many different databases, including sqlite and mysql. With docker, you can just deploy it via one command without complicated configuration.

Features

  1. Open source & Self-hosted
  2. Lightweight & Fast
  3. Easy to install
    • Docker support
    • Multiple database support (SQLite, MySQL, PostgreSQL, etc.)
    • Multiple operation system & hardware support (Windows, macOS, Linux & x86, amd64, ARM)
  4. User-friendly interface
    • Both desktop and mobile UI
    • Close to native app experience (for mobile device)
    • Two-level account & two-level category support
    • Plentiful preset categories
    • Geographic location and map support
    • Searching & filtering history records
    • Data statistics
    • Dark theme
  5. Multiple currency support & automatically updating exchange rates
  6. Multiple timezone support
  7. Multi-language support
  8. Two-factor authentication
  9. Application lock (PIN code / WebAuthn)
  10. Data export

Screenshots

Desktop Version

ezBookkeeping

Mobile Version

ezBookkeeping

Installation

Ship with docker

Visit Docker Hub to see all images and tags.

Latest Release:

$ docker run -p8080:8080 mayswind/ezbookkeeping

Latest Daily Build:

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

Install from binary

Latest release: https://github.com/mayswind/ezbookkeeping/releases

Linux / macOS

$ ./ezbookkeeping server run

Windows

> .\ezbookkeeping.exe server run

ezBookkeeping will listen at port 8080 as default. Then you can visit http://{YOUR_HOST_ADDRESS}:8080/ .

Build from source

Make sure you have Golang, GCC, Node.js and NPM installed. Then download the source code, and follow these steps:

Linux / macOS

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

All the files will be packaged in ezbookkeeping.tar.gz.

Windows

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

All the files will be packaged in ezbookkeeping.zip.

You can also build docker image, make sure you have docker installed, then follow these steps:

Linux

$ ./build.sh docker

Documents

  1. English
  2. 简体中文 (Simplified Chinese)

License

MIT

ezbookkeeping's People

Contributors

mayswind avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

ezbookkeeping's Issues

Desktop view

I notice the routes are start from /mobile, how to enable desktop view?

[Feature Request] 希望增加按标签过滤汇总功能

在使用过程中,我有时会给不同类别的支出打上相同的签,比如:

类别 物品 标签
电器 冰箱 厨房
餐具 厨房
食材 牛肉 厨房

我想统计一下某年,或某个季度,我为厨房购买了哪些物品,总共支出了多少。

Data Import Tool

Feature request: Data import tool for when migrating from other simple systems.

Import:
Accounts
Categories
Tags
Transactions

edit: specified my request.

Statistics tab does not work using postgres database

In case I'm using postgres database, when I open the statistics tab it shows up blank. But if I use sqlite statistics tab works fine.

Error log:

postgres         | 2023-04-22 07:23:28.562 UTC [33] ERROR:  column "transaction.uid" must appear in the GROUP BY clause or be used in an aggregate function at character 8
postgres         | 2023-04-22 07:23:28.562 UTC [33] STATEMENT:  SELECT uid, category_id, account_id, SUM(amount) as amount FROM "transaction" WHERE (uid=$1 AND deleted=$2 AND (type=$3 OR type=$4) AND transaction_time>=$5 AND transaction_time<=$6) GROUP BY category_id, account_id
ezbookkeeping    | 2023-04-22 13:23:28 [REQUEST] 200 0 3612385602822995968 192.168.0.199 GET /api/v1/transactions/statistics.json?start_time=1680285600&end_time=1682877599 11ms, r=ed7d581c-5e28-5d1b-0000-0034c0a800c7

Ezbookkeeping docker image: mayswind/ezbookkeeping:SNAPSHOT-20230421
Postgres image: postgres:14.1-alpine

my docker-compose.yml
version: "2"
services:
  ezbookkeeping:
    image: mayswind/ezbookkeeping:SNAPSHOT-20230421
    container_name: ezbookkeeping
    hostname: "ezbookkeeping"
    ports:
      - "80:8080"
    networks:
      - db
    depends_on:
      - "db"
    environment:
      - "EBK_SERVER_DOMAIN=ezbookkeeping.local"
      - "EBK_SERVER_ENABLE_GZIP=true"
      - "EBK_DATABASE_TYPE=postgres"
      - "EBK_DATABASE_HOST=db:5432"
      - "EBK_DATABASE_NAME=ezbookkeeping"
      - "EBK_DATABASE_USER=ezbookkeeping"
      - "EBK_DATABASE_PASSWD=ezbookkeeping"
      - "EBK_LOG_MODE=console file"
      - "EBK_SECURITY_SECRET_KEY=my_security_code"
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/var/log/ezbookkeeping:/var/log/ezbookkeeping"
  db:
    image: postgres:14.1-alpine
    container_name: postgres
    restart: always
    environment:
      - POSTGRES_USER=ezbookkeeping
      - POSTGRES_PASSWORD=ezbookkeeping
    ports:
      - '5432:5432'
    networks:
      - db
    volumes:
      - db:/var/lib/postgresql/data
networks:
  db:
volumes:
  db:
    driver: local

同学,您这个项目引入了73个开源组件,存在8个漏洞,辛苦升级一下

检测到 mayswind/ezbookkeeping 一共引入了73个开源组件,存在8个漏洞

漏洞标题:jwt-go 安全漏洞
漏洞编号:CVE-2020-26160
漏洞描述:jwt-go是个人开发者的一个Go语言的JWT实现。
jwt-go 4.0.0-preview1之前版本存在安全漏洞。攻击者可利用该漏洞在使用[]string{} for m[\"aud\"](规范允许)的情况下绕过预期的访问限制。
影响范围:(∞, 4.0.0-preview1)
最小修复版本:4.0.0-preview1
缺陷组件引入路径:github.com/mayswind/ezbookkeeping@->github.com/dgrijalva/[email protected]+incompatible

另外还有8个漏洞,详细报告:https://mofeisec.com/jr?p=n2b792

Best to have extra features

Thank you bringing up an excellent, easy to use and beautiful sofeware. Appreicate that the dockerized app makes life much easier. Playing it in a few hours, I would suggest below in my wish-list:

  1. manage categories
  • recursively managable categories (it's easy to be implemented, based on your well defined database table)
  • drag-n-drop crossing at least sub-categories in UI
  1. exchange rates
  • optiions at user's choice to adpot an set of officially published exchange rates yearly from an applicable national central bank
  • options can be daily, monthly and yearly from your collected 6 countries' exchange rates
  • for example of tax return purpose, yearly exchange rates are sufficient and less-burden to the app system.
  • automatically apply exchange rate to each transaction in given date of year
  1. optionally add suppliers/payees in transaction
  • in practices, aggregation reports from suppliers/payees are pretty logical and valuable.

Unaligned 64-bit atomic operation on 32-bit arm machine

Trying to run docker image on Raspberry Pi 2 Model B (which has 32-bit CPU). It fails on registration attempt with following stack trace:

ezbookkeeping | 2023-04-20 14:10:49 [ERROR] System Error! because unaligned 64-bit atomic operation, r=b2e63496-63b4-89fe-0000-0004c0a800c7
ezbookkeeping | runtime/internal/atomic/unaligned.go:8 (0x1151b)
ezbookkeeping | runtime/internal/atomic/atomic_arm.s:258 (0x118a7)
ezbookkeeping | github.com/mayswind/ezbookkeeping/pkg/uuid/internal_generator.go:74 (0x6d86d7)
ezbookkeeping | github.com/mayswind/ezbookkeeping/pkg/uuid/internal_generator.go:53 (0x6d8583)
ezbookkeeping | github.com/mayswind/ezbookkeeping/pkg/uuid/uuid_container.go:32 (0x70b68f)
ezbookkeeping | github.com/mayswind/ezbookkeeping/pkg/services/base.go:46 (0x70b674)
ezbookkeeping | github.com/mayswind/ezbookkeeping/pkg/services/users.go:137 (0x70b668)
ezbookkeeping | github.com/mayswind/ezbookkeeping/pkg/api/users.go:65 (0x739e0b)
ezbookkeeping | github.com/mayswind/ezbookkeeping/cmd/webserver.go:265 (0x7469fb)
ezbookkeeping | github.com/gin-gonic/[email protected]/context.go:174 (0x73e383)
ezbookkeeping | github.com/mayswind/ezbookkeeping/pkg/middlewares/request_log.go:16 (0x73e360)
ezbookkeeping | github.com/mayswind/ezbookkeeping/cmd/webserver.go:258 (0x74690b)
ezbookkeeping | github.com/gin-gonic/[email protected]/context.go:174 (0x73e247)
ezbookkeeping | github.com/mayswind/ezbookkeeping/pkg/middlewares/request_id.go:26 (0x73e21c)
ezbookkeeping | github.com/mayswind/ezbookkeeping/cmd/webserver.go:258 (0x74690b)
ezbookkeeping | github.com/gin-gonic/[email protected]/context.go:174 (0x7117c3)
ezbookkeeping | github.com/gin-contrib/[email protected]/handler.go:60 (0x71179c)
ezbookkeeping | github.com/gin-gonic/[email protected]/context.go:174 (0x73d8b7)
ezbookkeeping | github.com/mayswind/ezbookkeeping/pkg/middlewares/recovery.go:33 (0x73d890)
ezbookkeeping | github.com/mayswind/ezbookkeeping/cmd/webserver.go:258 (0x74690b)
ezbookkeeping | github.com/gin-gonic/[email protected]/context.go:174 (0x6ae8af)
ezbookkeeping | github.com/gin-gonic/[email protected]/gin.go:620 (0x6ae5bc)
ezbookkeeping | github.com/gin-gonic/[email protected]/gin.go:576 (0x6ae17f)
ezbookkeeping | net/http/server.go:2936 (0x4a36f7)
ezbookkeeping | net/http/server.go:1995 (0x49ee7f)
ezbookkeeping | runtime/asm_arm.s:831 (0x80c37)

The deployment using docker-compose has failed

docker-compose.yml

version: "2"
services:
  ezbookkeeping:
    image: mayswind/ezbookkeeping
    container_name: ezbookkeeping
    hostname: "ezbookkeeping"
    ports:
      - "5701:8080"
    environment:
      - "EBK_SERVER_DOMAIN=mydomain"
      - "EBK_SERVER_ENABLE_GZIP=true"
      - "EBK_DATABASE_TYPE=mysql"
      - "EBK_DATABASE_HOST=localhost:3306"
      - "EBK_DATABASE_NAME=ezbookkeeping"
      - "EBK_DATABASE_USER=ezbookkeeping"
      - "EBK_DATABASE_PASSWD=password"
      - "EBK_LOG_MODE=file"
      - "EBK_SECURITY_SECRET_KEY=xxxxxxxxx"
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/var/log/ezbookkeeping:/var/log/ezbookkeeping" # 请确保 UID:GID 是 1000:1000

The error log:

2022-10-13 14:37:32 [ERROR] [server.startWebServer] update database table structure failed, because dial tcp 127.0.0.1:3306: connect: connection refused
2022/10/13 14:37:32 Failed to run ezBookkeeping with [/ezbookkeeping/ezbookkeeping server run]: dial tcp 127.0.0.1:3306: connect: connection refused

如何设置ssl?

我看ini文件里有个certfile 和cert-keyfile,需要只需要配置这个路径就行了吗
比如我映射的宿主机目录是/ezbookkeeping/conf,我把证书文件放这个目录下,那么ini里面的对应路径是否是这样?
/ezbookkeeping/conf/cert.crt
/ezbookkeeping/conf/cert-key.key

谢谢。

交易列表内容缺失

在交易列表中,按日期过滤,如果选择最近7天最近30天,那么当天记录不会显示。请问这个是设计如此还是bug导致?

希望增加周期账单支持

非常nice的自托管记账系统!希望能支持类似房租、宽带费、物业费之类的周期账单支持,在设置的周期之间自动追加交易条目。

update database table structure failed on v0.4.0

2023-09-18 01:04:43 [INFO] [server.startWebServer] static root path is /ezbookkeeping/public
2023/09/18 01:04:43 Failed to run ezBookkeeping with [/ezbookkeeping/ezbookkeeping server run]: Cannot add a NOT NULL column with default value NULL
2023-09-18 01:04:43 [ERROR] [server.startWebServer] update database table structure failed, because Cannot add a NOT NULL column with default value NULL
2023-09-18 01:05:10 [INFO] [initializer.initializeSystem] will load configuration from default config path /ezbookkeeping/conf/ezbookkeeping.ini

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.