Repository navigation
Expand file tree
/
Copy pathcompose.yaml
More file actions
160 lines (153 loc) · 5.62 KB
/
Copy pathcompose.yaml
File metadata and controls
160 lines (153 loc) · 5.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
name: grimmory
x-daemonless:
title: "Grimmory"
icon: ":material-bookshelf:"
category: "Media Management"
description: "Self-hosted digital library — successor to BookLore, with smart shelves, metadata, Kobo/KOReader sync, OPDS support, and a built-in reader."
upstream_url: "https://github.com/grimmory-tools/grimmory"
web_url: "https://grimmory.org/"
user: "bsd"
mlock: false
upstream_binary: true
# grimmory is the one people open; mariadb stays on the stack's private
# network, where grimmory finds it by the name fjord puts in
# MARIADB_HOSTNAME (127.0.0.1 on host networking).
networking:
grimmory: default
"*": private
hostnames:
mariadb: MARIADB_HOSTNAME
# Grimmory needs MariaDB: the one it comes with, or one you already run.
choices:
database:
label: Database
doc: Where Grimmory keeps its library. The default runs its own MariaDB.
default: builtin
options:
builtin:
label: Built-in MariaDB
doc: A MariaDB of its own, on the stack's private network.
external:
label: Your own MariaDB
doc: A MariaDB you already run. Create the database and a user with all privileges on it first.
drop: [mariadb]
ask:
- name: MARIADB_HOSTNAME
label: Host
- name: MARIADB_PORT
label: Port
default: "3306"
- name: MARIADB_DATABASE
label: Database name
default: grimmory
- name: MARIADB_USER
label: User
default: grimmory
- name: DB_PASSWORD
label: Password
type: secret
# MariaDB sidecar for the AppJail director bundle, named as the service is
# so fjord finds its jail by the service's name.
appjail:
director:
options:
- alias:
- ip4_inherit:
depends_on:
- name: mariadb
image: ghcr.io/daemonless/mariadb:latest
env:
PUID: "1000"
PGID: "1000"
TZ: "!ENV '${TZ}'"
MYSQL_ROOT_PASSWORD: "!ENV '${DB_ROOT_PASSWORD}'"
MYSQL_DATABASE: grimmory
MYSQL_USER: grimmory
MYSQL_PASSWORD: "!ENV '${DB_PASSWORD}'"
volumes:
db_data: /config
docs:
env:
DATA_LOCATION: "Path to store Grimmory configuration and application data"
EBOOKS_PATH: "Path to your ebook library"
BOOKDROP_PATH: "Drop folder watched for automatic imports"
DB_DATA_LOCATION: "Path to store MariaDB data files"
MARIADB_HOSTNAME:
desc: "Where Grimmory finds MariaDB (fjord sets this for the built-in one; 127.0.0.1 on host networking)"
level: advanced
optional: true
MARIADB_PORT:
desc: "MariaDB port (your own MariaDB)"
level: advanced
optional: true
MARIADB_DATABASE:
desc: "Database name (your own MariaDB)"
level: advanced
optional: true
MARIADB_USER:
desc: "Database user (your own MariaDB)"
level: advanced
optional: true
DB_PASSWORD: "Database password (grimmory user)"
DB_ROOT_PASSWORD: "MariaDB root password (built-in MariaDB only)"
TZ:
desc: "Timezone"
optional: true
DATABASE_URL: "MariaDB JDBC URL (e.g., jdbc:mariadb://127.0.0.1:3306/grimmory)"
DATABASE_USERNAME: "Database username"
DATABASE_PASSWORD: "Database password"
SWAGGER_ENABLED: "Enable Swagger UI (default: false)"
FORCE_DISABLE_OIDC: "Force-disable OIDC authentication (default: false)"
JAVA_TOOL_OPTIONS: "Additional JVM options (e.g., -Xmx256m)"
volumes:
/app/data: "Configuration and application data"
/books: "Book library directory"
/bookdrop: "Drop folder for automatic imports"
ports:
6060: "Web interface"
readme:
introduction: |-
- **Smart Shelves** — Rule-based filtering, tagging, and full-text search
- **Built-in Reader** — In-browser reading for PDFs, EPUBs, and comics with annotations and progress tracking
- **Metadata Lookup** — Book info from Google Books, Open Library, and Amazon (fully editable)
- **Device Sync** — Kobo compatibility, OPDS support, and KOReader synchronization
- **BookDrop** — Drop files into a watched folder; Grimmory detects, enriches metadata, and queues for review
- **Multi-User** — Individual shelves and preferences with local or OIDC authentication
- **One-Click Sharing** — Send books to Kindle, email, or other users
**Supported formats:** EPUB, MOBI, AZW, AZW3, FB2, PDF, CBZ, CBR, CB7, M4B, M4A, MP3, OPUS
services:
grimmory:
image: ghcr.io/daemonless/grimmory:latest
container_name: grimmory
network_mode: host
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ:-Etc/UTC}
- DATABASE_URL=jdbc:mariadb://${MARIADB_HOSTNAME:-127.0.0.1}:${MARIADB_PORT:-3306}/${MARIADB_DATABASE:-grimmory}
- DATABASE_USERNAME=${MARIADB_USER:-grimmory}
- DATABASE_PASSWORD=${DB_PASSWORD}
- SWAGGER_ENABLED=false
- FORCE_DISABLE_OIDC=false
volumes:
- ${DATA_LOCATION}:/app/data
- ${EBOOKS_PATH}:/books
- ${BOOKDROP_PATH}:/bookdrop
depends_on:
- mariadb
restart: unless-stopped
mariadb:
image: ghcr.io/daemonless/mariadb:latest
container_name: grimmory-mariadb
network_mode: host
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ:-Etc/UTC}
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
- MYSQL_DATABASE=grimmory
- MYSQL_USER=grimmory
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
- ${DB_DATA_LOCATION}:/config
restart: unless-stopped