From 235b1a7264e17a231d1703a4beaa7b7d39ba187c Mon Sep 17 00:00:00 2001 From: Worph Date: Mon, 19 Oct 2026 20:09:11 +0000 Subject: [PATCH] MetaFeederSuwayomi 1.1.0 for the stock Suwayomi app (port 80, login on the config page); meta-share 2.6.4, meta-transport-ipfs 1.3.4 --- Apps/MetaFeederSuwayomi/docker-compose.yml | 77 ++++++++++++---------- Apps/MetaGateway/docker-compose.yml | 4 +- Apps/MetaRead/docker-compose.yml | 4 +- Apps/MetaShare/docker-compose.yml | 2 +- Apps/MetaTransportIpfs/docker-compose.yml | 2 +- Apps/MetaWatch/docker-compose.yml | 4 +- 6 files changed, 49 insertions(+), 44 deletions(-) diff --git a/Apps/MetaFeederSuwayomi/docker-compose.yml b/Apps/MetaFeederSuwayomi/docker-compose.yml index 0c0964f..bf95931 100644 --- a/Apps/MetaFeederSuwayomi/docker-compose.yml +++ b/Apps/MetaFeederSuwayomi/docker-compose.yml @@ -8,21 +8,24 @@ name: metafeedersuwayomi # own. Split out of the former MetaFeeder · Comic app; **MetaFeeder · AniList** # is the optional identity tier beside it. # -# ⚠ **Needs meta-gateway ≥ 1.0.28** — chapters arrive unresolved and their page -# list follows as an EnrichPatch, which an older gateway drops. -# # ⚠ **Suwayomi itself is a SEPARATE app — install it first.** This feeder ships -# pointed at `suwayomi:4567`, the container the **Suwayomi** store app publishes -# on the shared `pcs` network. +# pointed at `http://suwayomi` (port 80), the container the stock **Suwayomi** +# store app publishes on the shared `pcs` network. +# +# ⚠ **Give the feeder Suwayomi's login.** The stock app runs +# `AUTH_MODE: simple_login`; enter its admin password (Maison → Suwayomi → +# credentials) on this feeder's config page. Only this feeder talks to +# Suwayomi — readers get chapters through the gateway — so its login stays on. # # ⚠ **Querying Suwayomi WRITES.** Its search and chapter calls are GraphQL # mutations that cache source results into its library database. # -# ⚠ **Suwayomi must be reachable UNAUTHENTICATED.** An undownloaded chapter is a -# list of per-page URLs pointing at the Suwayomi container, redeemed by the -# READER's meta-share peer with no credentials. Suwayomi's `simple_login` 401s -# those routes — a library that lists every chapter and opens none. The Suwayomi -# store app therefore runs `AUTH_MODE: none` behind an AppShield/OIDC gate. +# How a chapter is read: its record carries one portable `tachiyomi` locator +# (minted from the chapter's address on its SITE, so every box agrees on it). +# Opening it makes the gateway redeem it here: the feeder fetches every page +# through Suwayomi and answers one CBZ, which the gateway stores once and the +# mesh serves from then on. Needs a gateway that redeems `provider-file` +# locators and MetaTransport · IPFS ≥ 1.3.4 (64 MiB redeem ceiling). # # It needs, over the shared `pcs` network: # - the **MetaGateway** app — which must list this feeder's URL @@ -37,11 +40,11 @@ name: metafeedersuwayomi services: # --------------------------------------------------------------------------- # metafeedersuwayomi-feeder — the chapter tier. Resolves a work to titles, - # searches every installed source, returns the chapters. Chapters are listed - # lazily: each chapter's page list is fetched only when a reader opens it. + # searches every installed source, returns the chapters. Listing fetches no + # page: a chapter's pages are fetched once, when a reader first opens it. # --------------------------------------------------------------------------- metafeedersuwayomi-feeder: - image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-feeder-suwayomi:1.0.8 + image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-feeder-suwayomi:1.1.0 cpu_shares: 30 container_name: metafeedersuwayomi-feeder mem_limit: 256m @@ -54,16 +57,15 @@ services: environment: RUST_LOG: "info,meta_feeder=info,suwayomi_feeder=info" META_FEEDER_STATE_DIR: "/data/meta-feeder" - # INFRA-ONLY env, and only a FIRST-BOOT SEED: `base_url` is a field on - # this feeder's own config page (the MetaGateway dashboard (configure panel)), and a value saved - # there wins. `suwayomi` is the container the Suwayomi store app publishes - # on `pcs` — change it only to point at a Suwayomi somewhere else, and see - # the reachability warning in the header before you do. - SUWAYOMI_URL: "http://suwayomi:4567" - # Listing chapters is cheap (one call returns them all); RESOLVING a - # chapter's page list is what costs. 0 = fetch nothing until a reader - # clicks. Raise it to pre-warm the first N ordinals per work. - SUWAYOMI_WARM_CHAPTERS: "0" + # FIRST-BOOT SEEDS only: `base_url`, `username` and `password` are fields + # on this feeder's own config page (MetaGateway dashboard → this feeder → + # configure), and a value saved there wins. `suwayomi` is the container + # the Suwayomi store app publishes on `pcs`, on port 80. + SUWAYOMI_URL: "http://suwayomi" + # The stock Suwayomi app's login user. Its password is per-install + # (Maison → Suwayomi → credentials) and no app can read another's + # secret, so it is entered once on the config page. + SUWAYOMI_USERNAME: "admin" # ⚠ SUWAYOMI_MAX_CHAPTERS is deliberately NOT set: it bounds how many # chapters are LISTED, and any value can only truncate a long series into # looking short. @@ -101,9 +103,9 @@ x-casaos: you installed in the **Suwayomi** app, and mints its own work cards so search works on its own. Add **MetaFeeder · AniList** to name works across sources. - **Install Suwayomi first.** It is a separate app in this store (with a - FlareSolverr sidecar, so Cloudflare-protected sources work). This feeder arrives - pointed at it and needs no wiring. + **Install Suwayomi first** (a separate app, with a FlareSolverr sidecar so + Cloudflare-protected sources work). This feeder arrives pointed at it; give it + Suwayomi's admin password on its config page. **You own the sources.** Suwayomi ships exactly one built-in source — *Local source*, which reads CBZ/CBR from its own folder. Everything else is an extension @@ -114,8 +116,9 @@ x-casaos: **Multi-source by design.** Every installed source that carries a work contributes, and each chapter row offers a chooser across them. - **Lazy by default.** Listing a series' chapters costs one upstream call however - long it is; a chapter's page list is fetched only when someone opens it. + **Fetched once, shared after.** Listing a series' chapters costs one upstream + call however long it is. A chapter's pages are fetched the first time someone + opens it, stored as one CBZ, and served from the mesh from then on. **Requires:** **MetaGateway** — its meta-core stores the resolved records and announces them to the swarm. The gateway must list this feeder in its config. **Pairs with: MetaRead**, the reading client. @@ -131,8 +134,9 @@ x-casaos: **Vous possédez les sources.** Suwayomi n'embarque que *Local source* ; tout le reste est une extension que **vous** installez via l'interface Suwayomi. - **Paresseux par défaut.** Lister les chapitres coûte un appel ; les pages d'un - chapitre ne sont récupérées qu'à l'ouverture. + **Récupéré une fois, partagé ensuite.** Lister les chapitres coûte un appel ; + les pages d'un chapitre sont récupérées à sa première ouverture, stockées en un + CBZ, puis servies par le maillage. **Nécessite :** les apps **MetaGateway** et **Suwayomi**. **Va avec : MetaRead.** tagline: @@ -152,8 +156,8 @@ x-casaos: before_install: en_us: | **Install order:** **MetaGateway** first, then **Suwayomi** — the separate - store app this feeder reads. This app arrives pointed at `suwayomi:4567`; without - that app installed it stays healthy and simply finds no chapters. + store app this feeder reads. This app arrives pointed at `http://suwayomi`; + without that app installed it stays healthy and simply finds no chapters. **After installing this app:** 1. In **MetaGateway**, add this feeder from the dashboard's *Add a feeder* box — @@ -167,16 +171,17 @@ x-casaos: 4. Optionally install **MetaFeeder · AniList** so chapters from several sources converge on one work page. + 5. **Give the feeder Suwayomi's login:** copy the admin password from Maison → + Suwayomi → credentials into this feeder's config page (*Suwayomi password*). + Changed it in Maison later? Enter it here again. + This app has no web UI of its own: the **feeder's config page** (Suwayomi URL, - chapters per work, chapters pre-loaded) opens from the **MetaGateway** + username, password, chapters per work) opens from the **MetaGateway** dashboard → this feeder → *configure*. Suwayomi's own UI is the Suwayomi app. **⚠ Querying Suwayomi writes to it.** Rows will appear in its library that you did not add by hand. That is inherent to how the aggregator works. - **Suwayomi's own login must stay off** — the reader fetches chapter pages from it - unauthenticated, so enabling it gives a library that lists every chapter and can - open none. **No web UI of its own:** configure it from the **MetaGateway** dashboard → this feeder → *configure* (the gateway proxies this feeder's config page, behind the gateway's login). # Maison (Yundera dashboard) configuration. Read in preference to x-casaos. diff --git a/Apps/MetaGateway/docker-compose.yml b/Apps/MetaGateway/docker-compose.yml index 0b12c2b..e693587 100644 --- a/Apps/MetaGateway/docker-compose.yml +++ b/Apps/MetaGateway/docker-compose.yml @@ -81,7 +81,7 @@ services: # MetaShare app's `metashare-` hostnames, which on a shared `pcs` # would be ANOTHER hull's plugins writing to another /data). # - 3000 HTTP API - 3001 plugin callback API (internal only) - image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.2 + image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.4 container_name: metagateway-share # The swarm and blockstore moved to the ipfs plugin, so the hull needs far # less than the monolith did. @@ -129,7 +129,7 @@ services: # mDNS, bitswap), the blockstore, gateway discovery and the peer directory # the hull uses to forward Usenet cids. Waits up to 60 s for the hull's # internal /health before opening blocks.redb, so no depends_on. - image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.2 + image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.4 container_name: metagateway-share-ipfs hostname: metagateway-share-ipfs restart: unless-stopped diff --git a/Apps/MetaRead/docker-compose.yml b/Apps/MetaRead/docker-compose.yml index df98001..b2f9d6f 100644 --- a/Apps/MetaRead/docker-compose.yml +++ b/Apps/MetaRead/docker-compose.yml @@ -154,7 +154,7 @@ services: # MetaShare app's `metashare-` hostnames, which on a shared `pcs` # would be ANOTHER hull's plugins writing to another /data). # - 3000 HTTP API - 3001 plugin callback API (internal only) - image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.2 + image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.4 container_name: metaread-share # The swarm and blockstore moved to the ipfs plugin, so the hull needs far # less than the monolith did. @@ -202,7 +202,7 @@ services: # mDNS, bitswap), the blockstore, gateway discovery and the peer directory # the hull uses to forward Usenet cids. Waits up to 60 s for the hull's # internal /health before opening blocks.redb, so no depends_on. - image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.2 + image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.4 container_name: metaread-share-ipfs hostname: metaread-share-ipfs restart: unless-stopped diff --git a/Apps/MetaShare/docker-compose.yml b/Apps/MetaShare/docker-compose.yml index 8071161..bc13e8f 100644 --- a/Apps/MetaShare/docker-compose.yml +++ b/Apps/MetaShare/docker-compose.yml @@ -13,7 +13,7 @@ services: # - 3000 HTTP API + dashboard (proxied through the hash-lock + Caddy) # - 3001 plugin callback API — internal only, never published metashare-app: - image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.2 + image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.4 container_name: metashare-app # Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM instead of # swap. The swarm, blockstore and torrent session moved to the plugins, so diff --git a/Apps/MetaTransportIpfs/docker-compose.yml b/Apps/MetaTransportIpfs/docker-compose.yml index 1dee0f3..dc59351 100644 --- a/Apps/MetaTransportIpfs/docker-compose.yml +++ b/Apps/MetaTransportIpfs/docker-compose.yml @@ -16,7 +16,7 @@ name: metatransportipfs services: metashare-ipfs: - image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.2 + image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.4 container_name: metashare-ipfs hostname: metashare-ipfs restart: unless-stopped diff --git a/Apps/MetaWatch/docker-compose.yml b/Apps/MetaWatch/docker-compose.yml index db7894f..8523d32 100644 --- a/Apps/MetaWatch/docker-compose.yml +++ b/Apps/MetaWatch/docker-compose.yml @@ -157,7 +157,7 @@ services: # MetaShare app's `metashare-` hostnames, which on a shared `pcs` # would be ANOTHER hull's plugins writing to another /data). # - 3000 HTTP API - 3001 plugin callback API (internal only) - image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.2 + image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share:2.6.4 container_name: metawatch-share # The swarm and blockstore moved to the ipfs plugin, so the hull needs far # less than the monolith did. @@ -205,7 +205,7 @@ services: # mDNS, bitswap), the blockstore, gateway discovery and the peer directory # the hull uses to forward Usenet cids. Waits up to 60 s for the hull's # internal /health before opening blocks.redb, so no depends_on. - image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.2 + image: ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-transport-ipfs:1.3.4 container_name: metawatch-share-ipfs hostname: metawatch-share-ipfs restart: unless-stopped