Skip to content

daemonless/booklore

Repository files navigation

BookLore

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

Registry ghcr.io/daemonless/booklore
Docs daemonless.io/images/booklore
Source https://github.com/booklore-app/booklore
Website https://booklore.org/

Deployment

Podman Compose

services:
  booklore:
    image: ghcr.io/daemonless/booklore:latest
    container_name: booklore
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/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 CLI

podman run -d --name booklore \
  -e PUID=@PUID@ \
  -e PGID=@PGID@ \
  -e TZ=@TZ@ \
  -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

Ansible

- name: Deploy booklore
  containers.podman.podman_container:
    name: booklore
    image: ghcr.io/daemonless/booklore:latest
    state: started
    restart_policy: always
    env:
      PUID: "@PUID@"
      PGID: "@PGID@"
      TZ: "@TZ@"
      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"

Configuration

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.

Notes

  • Architectures: amd64
  • User: bsd (UID/GID set via PUID/PGID)
  • Base: Built on ghcr.io/daemonless/base (FreeBSD)

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors