Repository navigation
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
170 lines (161 loc) · 6.01 KB
/
Copy pathdocker-compose.yml
File metadata and controls
170 lines (161 loc) · 6.01 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
161
162
163
164
165
166
167
168
169
170
# mangablitz — self-hosted manga + books library with the *arr automation stack.
#
# Flow: Prowlarr (indexers) -> LazyLibrarian (books/MAM)
# Kapowarr (GetComics DDL) -> qBittorrent (torrents) -> /data/torrents/*
# -> import into /data/media/{manga,books,comics} -> Kavita scans & serves.
# Suwayomi (extensions) -> /data/media/manga. FlareSolverr for Prowlarr,
# Suwayomi, and Kapowarr (each app configures its own URL).
#
# All paths use a single shared ./data root so imports are instant hardlinks
# (same filesystem) instead of slow copies. Volumes are relative so the same
# file runs on macOS now and on a Raspberry Pi 5 (arm64) later — all images
# below are multi-arch.
#
# Copy .env.example -> .env to override PUID/PGID/TZ (defaults below otherwise).
services:
# ---- Reader / front-end -------------------------------------------------
kavita:
image: ghcr.io/kareadita/kavita:latest
container_name: kavita
volumes:
- ./data/media/manga:/manga
- ./data/media/comics:/comics
- ./data/media/books:/books
- ./kavita-config:/kavita/config
ports:
# Host port is configurable: on macOS, AirPlay Receiver often holds 5000,
# so set KAVITA_PORT=5500 in .env. Container always listens on 5000.
- "${KAVITA_PORT:-5000}:5000"
environment:
- TZ=${TZ:-America/Sao_Paulo}
restart: unless-stopped
# ---- Indexer manager (the brain) ---------------------------------------
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-America/Sao_Paulo}
volumes:
- ./config/prowlarr:/config
ports:
- "9696:9696"
restart: unless-stopped
# ---- Cloudflare solver (used by Prowlarr, no UI) ------------------------
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
- LOG_LEVEL=info
- TZ=${TZ:-America/Sao_Paulo}
ports:
- "8191:8191"
restart: unless-stopped
# ---- Download client ----------------------------------------------------
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-America/Sao_Paulo}
- WEBUI_PORT=8080
# Must stay out of the 6881–6999 range (blacklisted by MAM and others).
- TORRENTING_PORT=${TORRENTING_PORT:-56881}
volumes:
- ./config/qbittorrent:/config
- ./data:/data
ports:
- "8080:8080"
- "${TORRENTING_PORT:-56881}:${TORRENTING_PORT:-56881}"
- "${TORRENTING_PORT:-56881}:${TORRENTING_PORT:-56881}/udp"
restart: unless-stopped
# ---- Western comics manager (GetComics / DDL — not Prowlarr) ------------
# Searches GetComics only. Wire FlareSolverr + qBit in UI or bootstrap-kapowarr.sh.
# See docs/KAPOWARR.md. Imports to /data/media/comics for Kavita /comics.
kapowarr:
image: mrcas/kapowarr:latest
container_name: kapowarr
volumes:
- ./config/kapowarr:/app/db
- ./data:/data
ports:
- "5656:5656"
environment:
- TZ=${TZ:-America/Sao_Paulo}
restart: unless-stopped
# ---- Books manager (Readarr replacement) --------------------------------
lazylibrarian:
image: lscr.io/linuxserver/lazylibrarian:latest
container_name: lazylibrarian
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-America/Sao_Paulo}
volumes:
- ./config/lazylibrarian:/config
- ./data:/data
ports:
- "5299:5299"
restart: unless-stopped
# ---- Manga source server (MangaDex / Manga Plus / scanlation extensions) -
# Not a torrent app — uses Mihon/Tachiyomi extensions. Configure its download
# location to /data/media/manga (CBZ) so Kavita serves what it grabs.
suwayomi:
image: ghcr.io/suwayomi/tachidesk:latest
container_name: suwayomi
environment:
- TZ=${TZ:-America/Sao_Paulo}
- DOWNLOAD_AS_CBZ=true
# Cloudflare bypass — use compose network hostname, not localhost
- FLARESOLVERR_ENABLED=true
- FLARESOLVERR_URL=http://flaresolverr:8191
- FLARESOLVERR_AS_RESPONSE_FALLBACK=true
# Keiyoushi extension repo (Manga Plus, MangaDex, etc.) — required since v2.x
- EXTENSION_STORES=["https://raw.githubusercontent.com/keiyoushi/extensions/repo/index.min.json"]
volumes:
- ./config/suwayomi:/home/suwayomi/.local/share/Tachidesk
- ./data:/data
ports:
- "4567:4567"
restart: unless-stopped
# ---- Remote access (opt-in: `--profile remote` / `make remote-up`) -------
# Joins your Tailscale tailnet and serves Kavita over HTTPS via Tailscale Serve.
# Needs TS_AUTHKEY in .env. On the Pi, host-install Tailscale is simpler — see
# MIGRATION.md; this container is mainly for testing the tailnet from the Mac.
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
profiles: ["remote"]
hostname: mangablitz
environment:
- TS_AUTHKEY=${TS_AUTHKEY:-}
- TS_STATE_DIR=/var/lib/tailscale
- TS_SERVE_CONFIG=/serve/serve.json
- TS_USERSPACE=true
- TZ=${TZ:-America/Sao_Paulo}
volumes:
- ./config/tailscale:/var/lib/tailscale
- ./config/tailscale-serve:/serve
cap_add:
- NET_ADMIN
restart: unless-stopped
# ---- Update notifications (opt-in: `--profile maintenance`) --------------
# Watches all running images and notifies when an update is published.
# Notify-only (no auto-restart) — safer on a Pi. Add a notifier in .env.
diun:
image: crazymax/diun:latest
container_name: diun
profiles: ["maintenance"]
command: serve
environment:
- TZ=${TZ:-America/Sao_Paulo}
- DIUN_WATCH_SCHEDULE=0 0 */6 * * *
- DIUN_WATCH_JITTER=30s
- DIUN_PROVIDERS_DOCKER=true
- DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true
volumes:
- ./config/diun:/data
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped