NNTmux

NNTmux

Docker app from RapidMark's Repository

Overview

NNTmux Usenet indexer in a single container. Bundles MariaDB, Redis and Manticore plus the web UI, queue workers, scheduler and the tmux indexing engine. First run creates the database and admin user from the variables below, so fill in the NNTP and Admin settings before starting. Config, database and search data live in /config. NZBs and covers live in /data.

NNTmux for Unraid

Single-container build of NNTmux. The upstream app image is built as-is, then MariaDB, Redis and Manticore are added and everything runs under s6-overlay.

service what
mariadb MariaDB 11.4, bound to 127.0.0.1
redis cache, sessions, Horizon queues
manticore search engine
web FrankenPHP on port 80
horizon queue workers
scheduler artisan schedule:work
indexer tmux processing engine, START_INDEXER=false to skip it

Tips and lessons learned (PreDB, hashed names, threads, backfill): unraid-notes/NNTmux

Volumes

  • /config holds .env, MariaDB, Redis, Manticore, Laravel storage and the install lock.
  • /data holds nzb/ and covers/, the parts that grow.

First run

The container refuses to start without ADMIN_USER, ADMIN_EMAIL, ADMIN_PASS (12+ chars), NNTP_SERVER, NNTP_USERNAME and NNTP_PASSWORD. It then writes /config/.env with an APP_KEY and a random DB password, creates the database and admin user, builds the Manticore tables and drops /config/install/install.lock. Expect a few minutes.

Every start runs artisan migrate, so updates that change the database apply themselves.

Container environment variables always win over /config/.env, so the Unraid template drives the common settings and .env holds the rest. Edit .env for API keys or anything the template does not expose, then restart.

Unraid

Install from Community Apps, or add a container with template URL https://raw.githubusercontent.com/RapidMark/unraid-templates/main/templates/nntmux.xml. The template passes --stop-timeout 120 so MariaDB gets a clean shutdown.

Building

cd unraid
make build     # nntmux-app:build from ../Dockerfile, then rapidmark/nntmux:dev
make lint

CI builds on pushes touching unraid/ and when the weekly check finds something new, then pushes rapidmark/nntmux:latest, :bookworm_<date> and :sha-<short>. The weekly check (Friday 18:00 UTC) merges upstream, compares the base image and looks for security updates; it only builds if one of them changed. DOCKERHUB.md is the Docker Hub page and is published on its own when it changes. Needs the DOCKERHUB_USERNAME and DOCKERHUB_TOKEN repo secrets.

Updating upstream

The weekly check merges upstream automatically. To do it by hand, run the Weekly update check workflow, or:

git fetch upstream
git merge upstream/master
git push

The image is whatever commit master is at, so the merge is the pin.

Requirements

Usenet provider account (NNTP). First run needs ADMIN_USER, ADMIN_EMAIL, ADMIN_PASS (12+ chars) and the NNTP settings.

Download Statistics

2,571
Total Downloads

Related apps

Details

Repository
rapidmark/nntmux:latest
Last Updated2026-10-21
First Seen2026-09-23

Runtime arguments

Web UI
http://[IP]:[PORT:80]/
Network
bridge
Shell
bash
Privileged
false
Extra Params
--stop-timeout 120

Template configuration

WebUIPorttcp

Web interface port

Target
80
Default
8085
Value
8085
ConfigPathrw

Settings, database, Redis and Manticore data

Target
/config
Default
/mnt/user/appdata/nntmux
Value
/mnt/user/appdata/nntmux
DataPathrw

NZB files and cover images. Grows large, put it on the array if you like.

Target
/data
Default
/mnt/user/appdata/nntmux/data
Value
/mnt/user/appdata/nntmux/data
PUIDVariable

User id the services run as

Default
99
Value
99
PGIDVariable

Group id the services run as

Default
100
Value
100
TZVariable

Timezone, for example America/Chicago

Default
Etc/UTC
Value
Etc/UTC
Site URLVariable

URL you will use to reach the site, including port

Target
APP_URL
Default
http://localhost:8085
Value
http://localhost:8085
NNTP ServerVariable

Usenet provider hostname

Target
NNTP_SERVER
NNTP PortVariable

563 for SSL, 119 for plain

Target
NNTP_PORT
Default
563
Value
563
NNTP SSLVariable

true or false

Target
NNTP_SSLENABLED
Default
true
Value
true
NNTP UsernameVariable
Target
NNTP_USERNAME
NNTP PasswordVariable
Target
NNTP_PASSWORD
NNTP ConnectionsVariable

Connections your provider allows

Target
NNTP_CONNECTIONS
Default
10
Value
10
Admin UsernameVariable

Created on first run

Target
ADMIN_USER
Default
admin
Value
admin
Admin PasswordVariable

At least 12 characters. Used on first run only.

Target
ADMIN_PASS
Admin EmailVariable

Created on first run

Target
ADMIN_EMAIL
IRC PRE scraper nickVariable

Nick for the PRE scraper (#PreNNTmux on SynIRC). Must be unique, add a few random characters, e.g. yourname_k7q2x. Setting a nick turns the scraper on.

Target
SCRAPE_IRC_USERNAME
Look inside releasesVariable

Reads file lists inside releases so hashed names can be renamed

Target
CHECK_PASSWORDED_RARS
Default
true
Value
true
Use PAR2 namesVariable

Uses PAR2 file names to rename releases

Target
ADD_PAR2
Default
true
Value
true
Fix release namesVariable

Renames releases using NFOs, PAR2 and file names (same as Admin, Tmux, Fix Release Names)

Target
FIX_NAMES
Default
true
Value
true
Pulse monitoringVariable

Laravel Pulse. Grows the database fast, leave off unless you need it

Target
PULSE_ENABLED
Default
false
Value
false
Minimum release size (MB)Variable

Skip releases smaller than this. Stops broken one-file fragments of obfuscated posts from cluttering the index.

Target
MIN_RELEASE_SIZE_MB
Default
50
Value
50
Compressed headersVariable

Ask your Usenet provider for compressed headers (much less bandwidth). Set to false if your provider does not support XFEATURE COMPRESS GZIP.

Target
NNTP_COMPRESSED_HEADERS
Default
true
Value
true
Start indexerVariable

Set false to run only the web UI without the tmux indexing engine

Target
START_INDEXER
Default
true
Value
true
MariaDB buffer poolVariable

MariaDB memory cache. Set to about half your spare RAM (e.g. 8G, 16G, 32G). Bigger is faster.

Target
DB_INNODB_BUFFER_POOL_SIZE
Default
1G
Value
1G
TMDB API keyVariable
Target
TMDB_APIKEY
TVDB API keyVariable
Target
TVDB_APIKEY
OMDB API keyVariable
Target
OMDB_APIKEY
Fanart.tv API keyVariable
Target
FANARTTV_APIKEY
Trakt API keyVariable
Target
TRAKTTV_APIKEY
IMDb scrapingVariable

Look titles up on imdb.com directly. IMDb often answers scripts with a bot check; NNTmux then pauses and tries one lookup per pause. TMDB and OMDb also provide IMDb ids, ratings and plots.

Target
IMDB_SCRAPER_ENABLED
Default
true
Value
true
IMDb block pause (minutes)Variable

After IMDb blocks a lookup, pause IMDb scraping this long, then try once.

Target
IMDB_SCRAPER_BLOCK_BACKOFF_MINUTES
Default
60
Value
60
Redis read timeout (seconds)Variable

How long NNTmux waits for Redis to answer. The default of 2 seconds is too short when the disk is busy: the tmux monitor gets a read error and stops.

Target
REDIS_READ_TIMEOUT
Default
10
Value
10
imdbapi.dev fallbackVariable

Old fallback for IMDb lookups. The site no longer exists; leave off.

Target
IMDBAPI_DEV_ENABLED
Default
false
Value
false
7-Zip pathVariable

7-Zip binary used to read 7z archives whose file list is compressed. Empty turns it off.

Target
SEVENZIP_PATH
Default
/usr/bin/7z
Value
/usr/bin/7z
Archive probe filesVariable

For posts with obfuscated file names, how many files to sample to find an archive. 0 turns it off.

Target
NN_ARCHIVE_PROBE_FILES
Default
3
Value
3
Archive retry delay (seconds)Variable

An archive that can't be read is tried once more after this long (default 1 day).

Target
NN_ARCHIVE_RETRY_DELAY
Default
86400
Value
86400