Skip to content

BookLore

Description / nameInput element
Container Registry
Container Configuration Root Path
Global /books Path
Timezone
User ID
Group ID
BookLore /bookdrop Path
BookLore /app/data Path

Build Status Last Commit

Self-hosted digital library with smart shelves, metadata, OPDS support, and built-in reader.

Version Tags

Tag Description Best For
latest Upstream Binary. Downloads the official release. Most users. Matches Linux Docker behavior.

Prerequisites

Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions.

Deployment

services:
  booklore:
    image: ghcr.io/daemonless/booklore:latest
    container_name: booklore
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=UTC
      - SPRING_DATASOURCE_URL=jdbc:mariadb://127.0.0.1:3306/booklore
      - SPRING_DATASOURCE_USERNAME=booklore
      - SPRING_DATASOURCE_PASSWORD=changeme
    volumes:
      - /path/to/containers/booklore/app/data:/app/data
      - /path/to/books:/books
      - /path/to/containers/booklore/bookdrop:/bookdrop
    restart: unless-stopped
podman run -d --name booklore \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=UTC \
  -e SPRING_DATASOURCE_URL=jdbc:mariadb://127.0.0.1:3306/booklore \
  -e SPRING_DATASOURCE_USERNAME=booklore \
  -e SPRING_DATASOURCE_PASSWORD=changeme \
  -v /path/to/containers/booklore/app/data:/app/data \ 
  -v /path/to/books:/books \ 
  -v /path/to/containers/booklore/bookdrop:/bookdrop \ 
  ghcr.io/daemonless/booklore:latest
- name: Deploy booklore
  containers.podman.podman_container:
    name: booklore
    image: ghcr.io/daemonless/booklore:latest
    state: started
    restart_policy: always
    env:
      PUID: "1000"
      PGID: "1000"
      TZ: "UTC"
      SPRING_DATASOURCE_URL: "jdbc:mariadb://127.0.0.1:3306/booklore"
      SPRING_DATASOURCE_USERNAME: "booklore"
      SPRING_DATASOURCE_PASSWORD: "changeme"
    volumes:
      - "/path/to/containers/booklore/app/data:/app/data"
      - "/path/to/books:/books"
      - "/path/to/containers/booklore/bookdrop:/bookdrop"

Interactive Configuration

Parameters

Environment Variables

Variable Default Description
PUID 1000
PGID 1000
TZ Etc/UTC
SPRING_DATASOURCE_URL jdbc:mariadb://127.0.0.1:3306/booklore MariaDB JDBC URL (e.g., jdbc:mariadb://mariadb:3306/booklore)
SPRING_DATASOURCE_USERNAME booklore Database username
SPRING_DATASOURCE_PASSWORD changeme Database password

Volumes

Path Description
/app/data Configuration and application data
/books Book library directory
/bookdrop Drop folder for automatic imports

Networking

This compose uses network_mode: host so services communicate via 127.0.0.1.

For isolated networking (multiple stacks, no port conflicts), use bridge mode with the dnsname CNI plugin:

services:
  booklore:
    # remove network_mode: host, add ports
    ports:
      - "6060:6060"
    environment:
      SPRING_DATASOURCE_URL: "jdbc:mariadb://mariadb:3306/booklore"

  mariadb:
    # remove network_mode: host
    # container name becomes DNS hostname

Migration from Official Image

This image uses /app/data for application data, matching the official ghcr.io/booklore-app/booklore image. You can migrate from Linux to FreeBSD:

  1. Stop containers on source host
  2. Copy /containers/booklore/ (data + mariadb) to destination
  3. Start containers on destination

The MariaDB data format is compatible between Linux and FreeBSD.

Implementation Details

  • User: bsd (UID/GID set via PUID/PGID). Defaults to 1000:1000.
  • Base: Built on ghcr.io/daemonless/base (FreeBSD 15.0).

Website Source Code


Need help? Join our Discord community.