238 lines
10 KiB
YAML
238 lines
10 KiB
YAML
name: metafeederusenet
|
|
|
|
# =============================================================================
|
|
# MetaFeeder · Usenet — publishes YOUR OWN Usenet indexer to MetaMesh.
|
|
#
|
|
# ⚠ NNTmux is a SEPARATE app (worph/AppStore) — install it first. This feeder
|
|
# reaches it on the shared `pcs` network at `http://nntmux` over its Newznab
|
|
# API (`/api/v1/api` + `/getnzb`), with the API key of NNTmux's `metamesh`
|
|
# user — the same contract MetaFeeder · Prowlarr uses with Prowlarr. It never
|
|
# touches NNTmux's database or storage.
|
|
#
|
|
# Unlike MetaFeeder · Prowlarr (which proxies EXTERNAL indexers and mints an
|
|
# `nzb-release` (0x1005) cid embedding that indexer's host), every release
|
|
# here comes from a scan you run, so the feeder downloads its .nzb once and
|
|
# mints a PORTABLE `nzb-posting` (0x1003) cid: a digest over the article
|
|
# Message-ID set, redeemable by ANY peer with a plain NNTP provider account.
|
|
# It also redeems external `nzb-release` locators with per-indexer keys set on
|
|
# its config page.
|
|
#
|
|
# A headless service: no web UI of its own. Configure it from MetaGateway →
|
|
# this feeder → *configure* (nntmux URL + API key, indexer keys).
|
|
#
|
|
# It needs, over `pcs`: **NNTmux** (`nntmux`), the shared **MetaCore**
|
|
# (`metacore-app:9000`, records + TMDB posters) and **MetaGateway**, which must
|
|
# list `http://metafeederusenet-feeder:8080` in its feeders config.
|
|
#
|
|
# Design record (meta-gateway repo): docs/others/self-hosted-usenet-indexer-study.md
|
|
# Feeder repo: github.com/worph/meta-feeder-usenet
|
|
# =============================================================================
|
|
|
|
services:
|
|
# ---------------------------------------------------------------------------
|
|
# metafeederusenet-feeder — the usenet feeder sidecar (meta-feeder-usenet).
|
|
# Searches NNTmux over its Newznab API; self-publishes resolved records +
|
|
# seeds the `.nzb` manifest to the shared MetaCore. The
|
|
# gateway reaches it directly on `pcs`; the human configures it from
|
|
# the MetaGateway dashboard (configure panel).
|
|
# ---------------------------------------------------------------------------
|
|
metafeederusenet-feeder:
|
|
image: ghcr.io/worph/meta-feeder-usenet:1.1.0
|
|
cpu_shares: 30
|
|
container_name: metafeederusenet-feeder
|
|
# Hard RAM cap, swap disabled (memswap_limit == mem_limit) → OOM instead
|
|
# of swap. Mirrors the dev sub-stack limits.
|
|
mem_limit: 256m
|
|
memswap_limit: 256m
|
|
hostname: metafeederusenet-feeder
|
|
restart: unless-stopped
|
|
user: "0:0"
|
|
expose:
|
|
- 8080
|
|
environment:
|
|
# INFRA-ONLY env (the "config: no env if in webui" rule). Operator
|
|
# config beyond the NNTmux URL seed below — TMDB token / language,
|
|
# meta-core URL — is read from the persisted config.json (this
|
|
# feeder's config page, opened from the MetaGateway dashboard (configure panel)). These env vars are
|
|
# wiring only: the enrichment sidecars, the enrich callback, the peer id.
|
|
RUST_LOG: "info,meta_feeder=info"
|
|
# The peer id stamped into provenance.gateway_peer on every record this
|
|
# feeder self-publishes — names the GATEWAY this feeder serves, not the
|
|
# feeder itself (analytics group by it). Without it, falls back to HOSTNAME.
|
|
META_GATEWAY_PEER_ID: "metagateway"
|
|
FILENAME_PARSER_URL: "http://metafeederusenet-filename-parser:8080"
|
|
TMDB_PLUGIN_URL: "http://metafeederusenet-tmdb:8080"
|
|
META_FEEDER_CALLBACK_URL: "http://metafeederusenet-feeder:8080/enrich/callback"
|
|
# First-boot SEED only (the persisted config.json wins on every later
|
|
# restart — change these on the /config page after first boot, not here).
|
|
# The API key has no env seed: paste NNTmux's `metamesh` key on the page.
|
|
NNTMUX_URL: "http://nntmux"
|
|
TZ: "$TZ"
|
|
volumes:
|
|
# Persist feeder config (config.json saved via the config UI), the redb
|
|
# cache, and the per-release .nzb cache (gateway/usenet/nntmux-nzb/).
|
|
- ${DATA_ROOT:-/DATA}/AppData/metafeederusenet/feeder-state:/data/meta-feeder:rw
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-sf", "http://localhost:8080/health"]
|
|
interval: 5s
|
|
timeout: 3s
|
|
retries: 10
|
|
start_period: 5s
|
|
depends_on:
|
|
metafeederusenet-filename-parser:
|
|
condition: service_started
|
|
metafeederusenet-tmdb:
|
|
condition: service_started
|
|
networks:
|
|
- metafeederusenet
|
|
- pcs
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Bundled enrichment plugins (self-contained). filename-parser per file; tmdb
|
|
# once per release — tmdb writes posters/backdrops to the shared meta-core's
|
|
# WebDAV (over pcs) so the ingester seeds them. No healthcheck: these plugin
|
|
# images don't ship one (curl absent).
|
|
# ---------------------------------------------------------------------------
|
|
metafeederusenet-filename-parser:
|
|
image: ghcr.io/worph/metamesh-plugin-filename-parser:1.0.3
|
|
cpu_shares: 30
|
|
container_name: metafeederusenet-filename-parser
|
|
mem_limit: 256m
|
|
memswap_limit: 256m
|
|
hostname: metafeederusenet-filename-parser
|
|
restart: unless-stopped
|
|
expose:
|
|
- 8080
|
|
environment:
|
|
EMIT_TITLE_TAGS: "true"
|
|
networks:
|
|
- metafeederusenet
|
|
|
|
metafeederusenet-tmdb:
|
|
image: ghcr.io/worph/metamesh-plugin-tmdb:1.0.3
|
|
cpu_shares: 30
|
|
container_name: metafeederusenet-tmdb
|
|
mem_limit: 384m
|
|
memswap_limit: 384m
|
|
hostname: metafeederusenet-tmdb
|
|
restart: unless-stopped
|
|
expose:
|
|
- 8080
|
|
environment:
|
|
# Posters land in the shared meta-core (over pcs) so the ingester seeds
|
|
# them. LOAD-BEARING at metamesh-plugin-tmdb:1.0.0 — do NOT remove (see
|
|
# the sibling feeder apps' identical note: the published image needs
|
|
# this, unlike the source build the dev stack runs).
|
|
WEBDAV_URL: "http://metacore-app:9000/webdav"
|
|
volumes:
|
|
- ${DATA_ROOT:-/DATA}/AppData/metafeederusenet/tmdb-cache:/cache
|
|
networks:
|
|
- metafeederusenet
|
|
- pcs
|
|
networks:
|
|
metafeederusenet:
|
|
name: metafeederusenet
|
|
driver: bridge
|
|
pcs:
|
|
name: ${APP_NET:-pcs}
|
|
external: true
|
|
|
|
x-casaos:
|
|
architectures:
|
|
- amd64
|
|
|
|
author: Worph Team
|
|
category: Media
|
|
developer: Aptero Team
|
|
|
|
description:
|
|
en_us: |
|
|
**Publish your own Usenet indexer to the MetaMesh network.**
|
|
|
|
MetaFeeder · Usenet searches your **NNTmux** app (worph/AppStore) over
|
|
its Newznab API and turns each release into a **portable** MetaMesh
|
|
posting — no indexer host baked in, redeemable by any peer with a plain
|
|
NNTP provider account — with a clean title, poster and plot from the
|
|
bundled filename-parser + TMDB enrichment. It adds a Usenet source
|
|
alongside **MetaFeeder · Prowlarr**; it doesn't replace it.
|
|
|
|
It also **redeems** releases found through Prowlarr's Newznab indexers,
|
|
with the indexer keys you set on its config page.
|
|
|
|
**Install NNTmux first.** No web UI of its own: configure it from the
|
|
**MetaGateway** dashboard (nntmux URL + the `metamesh` API key).
|
|
|
|
**Also requires:** **MetaGateway** — its meta-core stores the resolved
|
|
records and announces them to the swarm.
|
|
|
|
fr_fr: |
|
|
**Publiez votre propre indexeur Usenet sur le réseau MetaMesh.**
|
|
|
|
MetaFeeder · Usenet interroge votre app **NNTmux** (worph/AppStore) via
|
|
son API Newznab et transforme chaque release en posting MetaMesh
|
|
**portable**, exploitable par n'importe quel pair disposant d'un simple
|
|
compte NNTP. Il ajoute une source Usenet en plus de **MetaFeeder ·
|
|
Prowlarr**.
|
|
|
|
**Installez NNTmux d'abord.** Pas d'interface propre : configuration
|
|
depuis le tableau de bord **MetaGateway** (URL nntmux + clé API
|
|
`metamesh`). **Nécessite aussi** l'app **MetaGateway**.
|
|
|
|
tagline:
|
|
en_us: Publishes your NNTmux Usenet indexer to MetaMesh as portable postings
|
|
fr_fr: Publie votre indexeur Usenet NNTmux sur MetaMesh
|
|
|
|
title:
|
|
en_us: MetaFeeder · Usenet
|
|
|
|
icon: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederUsenet/icon.png
|
|
screenshot_link:
|
|
- https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederUsenet/screenshot-1.png
|
|
- https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederUsenet/screenshot-2.png
|
|
- https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederUsenet/screenshot-3.png
|
|
thumbnail: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaFeederUsenet/thumbnail.png
|
|
|
|
store_app_id: metafeederusenet
|
|
is_uncontrolled: false
|
|
|
|
tips:
|
|
before_install:
|
|
en_us: |
|
|
**Install order:** **NNTmux** (worph/AppStore) and **MetaGateway** first.
|
|
|
|
**After installing:**
|
|
1. Read NNTmux's `metamesh` API key (the NNTmux app provisions this user,
|
|
with raised daily API/download caps):
|
|
```
|
|
docker exec nntmux php artisan tinker --execute="echo App\Models\User::where('username','metamesh')->value('api_token');"
|
|
```
|
|
2. In **MetaGateway**, make sure this feeder is listed in its feeders
|
|
config (`http://metafeederusenet-feeder:8080`), then open its config
|
|
panel (*configure*): paste the key into **nntmux API key** (the URL
|
|
defaults to `http://nntmux`) and Save — the feeder restarts itself.
|
|
3. Optionally add **indexer keys** there too, to redeem releases found
|
|
through Prowlarr's Newznab indexers, and a TMDB token for posters.
|
|
|
|
**Searches must be typed** (`fileType:video`, `contentKind:episode`…) to
|
|
reach this feeder — a plain search-box query never fans out to it.
|
|
|
|
Each release's .nzb is downloaded from NNTmux once and cached here
|
|
(`feeder-state/gateway/usenet/nntmux-nzb/`).
|
|
|
|
# Maison (Yundera dashboard) configuration. Read in preference to x-casaos.
|
|
# schema_version 2 is required for `folders`: an older Maison refuses the app
|
|
# outright rather than starting it without its directories.
|
|
x-compose-app:
|
|
schema_version: 2
|
|
# Created and chowned by Maison before any image is pulled, before any hook
|
|
# runs and before the containers start — on the first boot and every one after.
|
|
# Compose would otherwise create a missing bind source as a root-owned dir.
|
|
folders:
|
|
- path: /DATA/AppData/metafeederusenet/feeder-state
|
|
user: $PUID
|
|
group: $PGID
|
|
- path: /DATA/AppData/metafeederusenet/tmdb-cache
|
|
user: $PUID
|
|
group: $PGID
|
|
# No web UI: Maison files it under Services. Configured from MetaGateway.
|