• Dec. 5, 2025, 7:11 a.m.

    1. Overview

    ezBookkeeping is a lightweight, open-source personal finance management tool. This guide documents the process of deploying it using Docker Compose with SQLite as the database backend.

    I chose this configuration because it is resource-efficient for a personal server (like my YunoHost/Docker hybrid setup) and requires minimal maintenance compared to running a dedicated MySQL or PostgreSQL instance.

    2. Prerequisites

    • A Linux server (Debian/Ubuntu/YunoHost)
    • Docker & Docker Compose installed
    • Basic knowledge of terminal commands

    3. Directory Structure

    To keep the filesystem organised and strictly separate data from configuration, we use a standard directory path in the home folder.

    Command to initialise directories:

    mkdir -p ~/docker/ezbookkeeping/data
    cd ~/docker/ezbookkeeping
    

    4. Configuration (docker-compose.yml)

    Create the configuration file within the directory created above.

    nano docker-compose.yml

    Paste the following configuration. Note the custom port assignment and timezone setting.

    services:
      ezbookkeeping:
        image: mayswind/ezbookkeeping:latest
        container_name: ezbookkeeping
        restart: unless-stopped
        ports:
          # Format is HOST_PORT:CONTAINER_PORT
          # We use 55222 to avoid conflicts with standard web ports
          - "55222:8080"
        volumes:
          # Maps the local data folder to the container's storage
          # This ensures the database persists after restarts
          - ./data:/data
        environment:
          # Sets the application time to Malaysian time
          - TZ=Asia/Kuala_Lumpur
          # By default, ezBookkeeping uses SQLite, so no DB vars are needed
    

    Key Configuration Decisions:

    • Database: We rely on the default SQLite. The database file will be created automatically inside the /data volume.
    • Port 55222: Chosen to prevent conflict with other services running on ports 80, 443, or 8080.
    • Timezone: Set to Asia/Kuala_Lumpur to ensure transaction timestamps match local time.

    5. Deployment

    Once the file is saved, launch the container in detached mode (running in the background):

    docker compose up -d
    

    Verification:
    You can check if the container is running correctly by viewing the logs:

    docker compose logs -f
    

    Press Ctrl+C to exit the log view.

    6. Initial Setup

    1. Open your web browser and navigate to: http://<your-server-ip>:55222
    2. Important: ezBookkeeping does not come with a default "admin" account.
    3. On the login screen, look for the "Register" button.
    4. Create your account. The first account created serves as the primary user.

    7. Backup & Maintenance

    Because we utilised a volume mapping (./data:/data), backing up this application is straightforward.

    • Data Location: All financial data and uploaded receipts are stored in: ~/docker/ezbookkeeping/data
    • Backup Method: To back up, simply copy this entire folder to a secure location (e.g., external drive or cloud storage).

    <!-- end list -->

    # Example backup command (creates a timestamped archive)
    tar -czvf ezbookkeeping_backup_$(date +%F).tar.gz ~/docker/ezbookkeeping/data
    

    8. Troubleshooting / Notes

    • Updating: To update to the latest version of ezBookkeeping in the future, run:
      bash docker compose pull docker compose up -d
    • YunoHost Users: If you wish to expose this to a public domain (e.g., money.domain.com), you must create a "Redirect" app in the YunoHost admin panel pointing to http://127.0.0.1:55222.

    This entry is part of my self-hosted lab documentation. Documenting these steps helps minimise errors and ensures the setup is reproducible.