Files
MetaAppStore/Apps/MetaFeederUsenet/docker-compose.yml
T

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.1
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.4
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.4
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.