-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
160 lines (151 loc) · 5.21 KB
/
Copy pathdocker-compose.yml
File metadata and controls
160 lines (151 loc) · 5.21 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
# mangablitz — self-hosted manga + books library with the *arr automation stack.
#
# Flow: Prowlarr (indexers) -> Kapowarr / LazyLibrarian (decide & grab)
# -> qBittorrent (download to /data/torrents) -> hardlink/import into
# /data/media/{manga,books} -> Kavita scans & serves for reading.
# FlareSolverr unblocks Cloudflare-protected indexers for Prowlarr.
#
# 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
- TORRENTING_PORT=6881
volumes:
- ./config/qbittorrent:/config
- ./data:/data
ports:
- "8080:8080"
- "6881:6881"
- "6881:6881/udp"
restart: unless-stopped
# ---- Manga / comics manager (Sonarr-for-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
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