services: # ------------------------------------------------------------------ # Manga: Suwayomi -> Kavita mover + metadata enrichment # ------------------------------------------------------------------ manga-mover-and-metadata-collector: image: gitea.johannesbot.de/johannesbot/manga-mover-and-metadata-collector:latest container_name: manga-mover-and-metadata-collector restart: unless-stopped environment: KAVITA_URL: "${KAVITA_URL}" KAVITA_API_KEY: "${KAVITA_API_KEY}" LANGUAGE: "${LANGUAGE:-en}" SETTLE_SECONDS: "${SETTLE_SECONDS:-600}" DELETE_SOURCE: "${DELETE_SOURCE:-true}" MATCH_PATH: "/config/matches.json" # Periodic updaters (volume/cover back-fill + global person sync) run # together on this cron. "0 10 * * 0" = Sundays 10:00 (local time, see TZ) UPDATER_ENABLED: "${UPDATER_ENABLED:-true}" UPDATER_SCHEDULE: "${UPDATER_SCHEDULE:-0 10 * * 0}" UPDATER_LOG: "/config/volume_updater.log" # Persistent cover cache (empty = temp dir, deleted on container stop) COVER_CACHE_PATH: "${COVER_CACHE_PATH:-/config/covers}" # Per-step timing stats (viewable at /perf, /perf/volume, /perf/person) PERF_PATH: "${PERF_PATH:-/config/perf_stats.json}" VOLUME_PERF_PATH: "${VOLUME_PERF_PATH:-/config/volume_perf_stats.json}" PERSON_PERF_PATH: "${PERSON_PERF_PATH:-/config/person_perf_stats.json}" # Timezone for the cron schedule — without this 10:00 means 10:00 UTC TZ: "${TZ:-Europe/Berlin}" ports: - "${MANGA_WEB_PORT:-8080}:8080" volumes: - "${HOST_SUWAYOMI_PATH}:/mnt/suwayomi" - "${HOST_KAVITA_PATH}:/mnt/kavita" - "${HOST_MANGA_CONFIG_PATH}:/config" # ------------------------------------------------------------------ # Light novels: Kavita metadata fetcher (HTTP only, no file mover) # ------------------------------------------------------------------ kavita-lightnovel-metadata-fetcher: image: gitea.johannesbot.de/johannesbot/kavita-lightnovel-metadata-fetcher:latest container_name: kavita-lightnovel-metadata-fetcher restart: unless-stopped environment: KAVITA_URL: "${KAVITA_URL}" KAVITA_API_KEY: "${KAVITA_API_KEY}" LIBRARY_IDS: "${LN_LIBRARY_IDS}" LANGUAGE: "${LANGUAGE:-en}" MATCH_PATH: "/config/matches.json" # Global person sync on cron (same default cadence as the manga side) UPDATER_ENABLED: "${LN_UPDATER_ENABLED:-true}" UPDATER_SCHEDULE: "${UPDATER_SCHEDULE:-0 10 * * 0}" PERSON_PERF_PATH: "${PERSON_PERF_PATH:-/config/person_perf_stats.json}" TZ: "${TZ:-Europe/Berlin}" ports: - "${LN_WEB_PORT:-8081}:8080" volumes: - "${HOST_LN_CONFIG_PATH}:/config"