The stack was built to be lift-and-shift portable: every path is
container-internal (/data, /config) and every cross-service address is a
container name (qbittorrent:8080, http://flaresolverr:8191). So your entire
configuration — Prowlarr indexers, qBittorrent, Kapowarr's ComicVine key + root
folder, Suwayomi extensions, Kavita libraries + read progress — moves with the
config/ directory. Near-zero re-wiring.
- Raspberry Pi 5 (8GB) + the 1TB SSD over USB 3 (SSD strongly preferred over flash).
- Flash Raspberry Pi OS Lite (64-bit / arm64), enable SSH.
- Mount the SSD by UUID in
/etc/fstabat e.g./mnt/ssd. - Install Docker + Compose:
curl -fsSL https://get.docker.com | sh sudo usermod -aG docker "$USER" # re-login after this
On the Mac, with the stack stopped (make down) so databases are quiesced:
# Project + config/ (the brains). NOT data/ — re-download media on the Pi,
# or rsync it separately/overnight if you want to carry it over.
rsync -avz --exclude data/ ./ pi@<pi-ip>:/srv/mangablitz/Stopping first matters: copying SQLite files (Prowlarr/Kapowarr/Suwayomi) while running can capture a half-written WAL.
make down→ rsync → done.
cd /srv/mangablitz
nano .envPUID/PGID→ the Pi user'sid -u/id -g(usually1000/1000).KAVITA_PORT=5000(no macOS AirPlay to dodge on the Pi).- Point the data root at the SSD — either symlink
ln -s /mnt/ssd/data ./dataor edit the compose volume base. Keep the internal/datalayout identical.
make up # images are all arm64 multi-arch — they just pull
make ps
make urlsEverything should come up already-wired. Spot-check Prowlarr (indexers present),
Kapowarr (ComicVine key + root folder), Suwayomi (extensions installed),
Kavita (libraries + your read progress). If anything's missing, make bootstrap-prowlarr re-adds the qBittorrent download client.
Recommended: host-install Tailscale on the Pi (simpler/faster than the container):
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# Serve Kavita over automatic-HTTPS on your tailnet:
sudo tailscale serve --bg 5000 # proxies https://<pi>.<tailnet>.ts.net -> KavitaInstall Tailscale on your iPhone + iPad, sign into the same tailnet, and
Kavita is reachable anywhere at https://<pi-name>.<tailnet>.ts.net — encrypted,
no router ports opened. (To expose it beyond your devices, tailscale funnel;
otherwise keep it tailnet-only, which is the safer default.)
Prefer containers?
make remote-upruns the bundledtailscaleservice instead (setTS_AUTHKEYin.env); it usesconfig/tailscale-serve/serve.jsonto publish Kavita on 443. Host-install is still the cleaner choice on a Pi.
Kavita serves OPDS + read-progress sync, so your place follows you across devices. Best native apps (point each at your Tailscale HTTPS URL):
- Panels — gorgeous comic/manga reader (OPDS) → your Comics & Manga libraries.
- Aidoku or Paperback — native, Tachiyomi-style manga with progress sync;
connect to Suwayomi (
:4567) or Kavita. - Kavita web (PWA) — "Add to Home Screen" for a universal fallback on both devices.
- EPUBs: Kavita's reader, or send to Apple Books / KOReader.
Enable Kavita OPDS under Settings → your user → OPDS to get the feed URL.
- VPN for torrents:
make vpn-up(fillVPN_*in.env); then change the download-client host in Prowlarr/Kapowarr fromqbittorrenttogluetun. - SSD space: in qBittorrent set a share-ratio limit + "remove torrent on completion" so seeding torrents don't fill the 1TB (imported media is a hardlink and survives torrent removal).
- Updates:
make maintenance-upruns Diun → notifies when images update (notify-only; you choose when tomake down && make upto apply). - Backups:
make backup(or cronscripts/backup-config.sh /mnt/ssd/backups) — tarballsconfig/(the irreplaceable brains), not media.