mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-28 17:01:16 +00:00
416 lines
13 KiB
Bash
416 lines
13 KiB
Bash
DB_CONNECTION=mariadb
|
|
DB_HOST=127.0.0.1
|
|
DB_PORT=3306
|
|
DB_ROOTPASSWORD= #only needed for install.sh for docker based installation
|
|
DB_SOCKET=
|
|
DB_USERNAME=
|
|
DB_PASSWORD=
|
|
DB_DATABASE=nntmux
|
|
|
|
COMPOSER_AUTH='{"github-oauth": {"github.com": "YOUR GITHUB TOKEN"}}'
|
|
|
|
SEARCH_DRIVER=manticore
|
|
# Increment after rebuilding search indexes to invalidate API v2 cursors.
|
|
SEARCH_INDEX_GENERATION=1
|
|
# Lifetime of signed API v2 search cursors.
|
|
SEARCH_CURSOR_TTL_MINUTES=15
|
|
|
|
# ManticoreSearch Configuration
|
|
MANTICORESEARCH_HOST=localhost
|
|
MANTICORESEARCH_PORT=9308
|
|
# Use http by default. Set https when Manticore HTTP(S) is served over TLS.
|
|
MANTICORESEARCH_SCHEME=http
|
|
# Optional for Manticore 27.x built-in auth/authz. Leave blank for anonymous local Docker.
|
|
MANTICORESEARCH_USERNAME=
|
|
MANTICORESEARCH_PASSWORD=
|
|
# Optional bearer token auth. If set, this takes precedence over username/password for HTTP clients.
|
|
MANTICORESEARCH_TOKEN=
|
|
# fuzzy search settings
|
|
MANTICORESEARCH_FUZZY_ENABLED=false
|
|
# For high availability, set multiple hosts (comma-separated): "host1:9308,host2:9308"
|
|
MANTICORESEARCH_HOSTS=
|
|
MANTICORESEARCH_RETRIES=2
|
|
MANTICORESEARCH_RETRY_ATTEMPTS=2
|
|
MANTICORESEARCH_RETRY_DELAY_MS=100
|
|
# Autocomplete settings
|
|
MANTICORESEARCH_AUTOCOMPLETE_ENABLED=true
|
|
MANTICORESEARCH_AUTOCOMPLETE_MIN_LENGTH=2
|
|
MANTICORESEARCH_AUTOCOMPLETE_MAX_RESULTS=10
|
|
MANTICORESEARCH_AUTOCOMPLETE_FUZZINESS=1
|
|
MANTICORESEARCH_AUTOCOMPLETE_CACHE=10
|
|
# Suggest/spell correction settings
|
|
MANTICORESEARCH_SUGGEST_ENABLED=true
|
|
MANTICORESEARCH_SUGGEST_MAX_EDITS=4
|
|
|
|
ELASTICSEARCH_HOST=localhost
|
|
ELASTICSEARCH_PORT=9200
|
|
ELASTICSEARCH_SCHEME=http
|
|
ELASTICSEARCH_USER=
|
|
ELASTICSEARCH_PASS=
|
|
ELASTICSEARCH_LOGGING=false
|
|
#fuzzy search settings
|
|
ELASTICSEARCH_FUZZY_ENABLED=false
|
|
# Elasticsearch autocomplete settings
|
|
ELASTICSEARCH_AUTOCOMPLETE_ENABLED=true
|
|
ELASTICSEARCH_AUTOCOMPLETE_MIN_LENGTH=2
|
|
ELASTICSEARCH_AUTOCOMPLETE_MAX_RESULTS=10
|
|
ELASTICSEARCH_AUTOCOMPLETE_CACHE=10
|
|
# Elasticsearch suggest/spell correction settings
|
|
ELASTICSEARCH_SUGGEST_ENABLED=true
|
|
|
|
NNTP_COMPRESSED_HEADERS=false
|
|
USE_ALTERNATE_NNTP_SERVER=false
|
|
|
|
NNTP_USERNAME=
|
|
NNTP_PASSWORD=
|
|
NNTP_SERVER=
|
|
NNTP_PORT=
|
|
NNTP_CONNECTIONS=
|
|
NNTP_SSLENABLED=false
|
|
NNTP_SOCKET_TIMEOUT=120
|
|
|
|
NNTP_USERNAME_A=
|
|
NNTP_PASSWORD_A=
|
|
NNTP_SERVER_A=
|
|
NNTP_PORT_A=
|
|
NNTP_CONNECTIONS_A=
|
|
NNTP_SSLENABLED_A=false
|
|
NNTP_SOCKET_TIMEOUT_A=120
|
|
|
|
NN_MULTIPROCESSING_MAX_CHILD_TIME=1800
|
|
NN_CONCURRENCY_TIMEOUT=
|
|
ADMIN_USER=
|
|
ADMIN_PASS=
|
|
ADMIN_EMAIL=
|
|
|
|
APP_NAME=NNTmux
|
|
APP_ENV=production
|
|
APP_DEBUG=false
|
|
APP_TIMEZONE=UTC
|
|
APP_URL=
|
|
# Passkey RP ID (domain only, no scheme/path)
|
|
PASSKEY_RELYING_PARTY_ID=
|
|
# Passkey authenticator selection (controls which authenticators the browser offers).
|
|
# Leave PASSKEY_AUTHENTICATOR_ATTACHMENT empty for "no preference" so Windows Hello,
|
|
# platform biometrics, phones (hybrid/QR) AND FIDO2 security keys all appear in the
|
|
# browser picker. Set to "platform" or "cross-platform" to restrict.
|
|
PASSKEY_AUTHENTICATOR_ATTACHMENT=
|
|
# residentKey: preferred|required|discouraged. "preferred" is required for Windows
|
|
# domain-joined / managed machines where "required" can suppress Windows Hello.
|
|
PASSKEY_RESIDENT_KEY=preferred
|
|
# userVerification: preferred|required|discouraged
|
|
PASSKEY_USER_VERIFICATION=preferred
|
|
|
|
# Trusted proxies / Cloudflare
|
|
# Comma-separated list of additional proxies to trust alongside Cloudflare.
|
|
TRUSTED_PROXIES=
|
|
TRUST_CLOUDFLARE=true
|
|
CLOUDFLARE_IPS_V4_URL=https://www.cloudflare.com/ips-v4
|
|
CLOUDFLARE_IPS_V6_URL=https://www.cloudflare.com/ips-v6
|
|
CLOUDFLARE_IPS_TIMEOUT=10
|
|
CLOUDFLARE_IPS_CONNECT_TIMEOUT=5
|
|
CLOUDFLARE_IPS_RETRY_TIMES=2
|
|
CLOUDFLARE_IPS_RETRY_SLEEP_MS=250
|
|
CLOUDFLARE_IPS_STORAGE_PATH=storage/app/cloudflare/trusted-proxies.json
|
|
CLOUDFLARE_TRUST_REMOTE_ADDR_FALLBACK=true
|
|
|
|
# Block configured indexer apps only when they proxy NZB downloads instead of redirecting to the downloader.
|
|
BLOCK_PROXY_INDEXER_APPS=false
|
|
BLOCK_PROXY_INDEXER_APP_USER_AGENTS=Prowlarr/,NZBHydra2
|
|
|
|
# Behavioural detection of direct proxy fetches that spoof a downloader UA (combines Referer, UA-pair,
|
|
# download/search ratio, and IP-correlation signals into a score gated by the threshold).
|
|
PROXY_DETECTION_ENABLED=false
|
|
PROXY_DETECTION_THRESHOLD=50
|
|
PROXY_DETECTION_WINDOW_SECONDS=3600
|
|
PROXY_DETECTION_RATIO_MIN=0.8
|
|
PROXY_DETECTION_MIN_SEARCHES=20
|
|
# Only apps that fetch NZBs directly from the indexer (NZBHydra2/Prowlarr). The *arr suite (Sonarr,
|
|
# Radarr, Lidarr, Readarr, Bazarr) only searches, and Jackett is torrent-only (Torznab) so it never
|
|
# queries a Usenet/newznab indexer — none of them download NZBs from here.
|
|
PROXY_DETECTION_INDEXER_REFERER_PATTERNS=hydra,prowlarr
|
|
|
|
APP_LOCALE=en
|
|
APP_FALLBACK_LOCALE=en
|
|
APP_FAKER_LOCALE=en_US
|
|
|
|
APP_MAINTENANCE_DRIVER=file
|
|
APP_MAINTENANCE_STORE=database
|
|
|
|
BCRYPT_ROUNDS=12
|
|
APP_KEY=
|
|
LOG_CHANNEL=stack
|
|
LOG_STACK=single
|
|
PASSWORD_HASH=argon2id
|
|
|
|
BROADCAST_CONNECTION=log
|
|
# Use failover_redis_file so Cache falls back to disk when Redis is unreachable (set CACHE_STORE=redis for strict Redis-only)
|
|
CACHE_STORE=failover_redis_file
|
|
# Production deployments should set this to `redis` (or `database`) and run Horizon.
|
|
# `sync` is for local development only and will deliver email synchronously.
|
|
QUEUE_CONNECTION=sync
|
|
|
|
REDIS_HOST=127.0.0.1
|
|
REDIS_USERNAME=default
|
|
REDIS_PASSWORD=null
|
|
REDIS_PORT=6379
|
|
REDIS_CLIENT=phpredis
|
|
REDIS_CONNECT_TIMEOUT=2
|
|
REDIS_READ_TIMEOUT=2
|
|
|
|
# Status probes: skip Redis check when cache/session/queue do not use Redis (set false to always probe)
|
|
STATUS_PROBE_REDIS=true
|
|
STATUS_PROBE_REDIS_ONLY_WHEN_USED=true
|
|
|
|
# Horizon (Redis queue dashboard and workers)
|
|
HORIZON_PREFIX=horizon:
|
|
# Priority-ordered queues consumed by Horizon.
|
|
HORIZON_QUEUES=api-audit,default
|
|
|
|
SESSION_DRIVER=redis
|
|
# Fast TCP probe before other middleware; switch cache+session to file when Redis host is unreachable (set false to disable)
|
|
REDIS_FAST_DEGRADE=true
|
|
REDIS_TCP_CHECK_SECONDS=0.2
|
|
SESSION_DOMAIN=null
|
|
SESSION_SECURE_COOKIE=false
|
|
SESSION_ENCRYPT=false
|
|
SESSION_COOKIE=nntmux
|
|
SESSION_PATH=/
|
|
|
|
# `MAIL_MAILER` is the canonical key in Laravel 13. The legacy `MAIL_DRIVER`
|
|
# variable is no longer read by `config/mail.php` and can be removed.
|
|
MAIL_MAILER=smtp
|
|
MAIL_HOST=smtp.mailtrap.io
|
|
MAIL_PORT=2525
|
|
MAIL_USERNAME=null
|
|
MAIL_PASSWORD=null
|
|
MAIL_ENCRYPTION=null
|
|
MAIL_FROM_ADDRESS=
|
|
MAIL_FROM_NAME=
|
|
|
|
# Branded email defaults (see config/mail.php -> brand). Subject prefix is
|
|
# applied to every transactional email sent through `App\Mail\Concerns\HasBrandedSubject`.
|
|
# MAIL_SUBJECT_PREFIX="[NNTmux] "
|
|
# MAIL_BRAND_LOGO_URL=
|
|
# MAIL_QUEUE=emails
|
|
# MAIL_INCIDENT_QUEUE=incidents
|
|
|
|
AWS_ACCESS_KEY_ID=
|
|
AWS_SECRET_ACCESS_KEY=
|
|
AWS_DEFAULT_REGION=us-east-1
|
|
AWS_BUCKET=
|
|
|
|
PUSHER_APP_ID=
|
|
PUSHER_APP_KEY=
|
|
PUSHER_APP_SECRET=
|
|
PUSHER_APP_CLUSTER=mt1
|
|
|
|
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
|
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
|
|
|
CAPTCHA_PROVIDER=recaptcha
|
|
NOCAPTCHA_ENABLED=false
|
|
NOCAPTCHA_SITEKEY=
|
|
NOCAPTCHA_SECRET=
|
|
|
|
TURNSTILE_SECRET=
|
|
TURNSTILE_SITEKEY=
|
|
TURNSTILE_ENABLED=false
|
|
|
|
ITEMS_PER_PAGE=50
|
|
ITEMS_PER_COVER_PAGE=25
|
|
# Image processing driver. Use gd when the Imagick PHP extension is unavailable.
|
|
IMAGE_DRIVER=imagick
|
|
# Format used for newly processed covers and samples. Supported: webp, jpg.
|
|
IMAGE_OUTPUT_FORMAT=webp
|
|
# Encoder quality for newly processed covers and samples (1-100).
|
|
IMAGE_OUTPUT_QUALITY=82
|
|
# Maximum compressed source size accepted by image processing (20 MiB).
|
|
IMAGE_MAX_SOURCE_BYTES=20971520
|
|
# Maximum decoded source area accepted by image processing (40 megapixels).
|
|
IMAGE_MAX_SOURCE_PIXELS=40000000
|
|
# Remote image connection and total request timeouts, in seconds.
|
|
IMAGE_FETCH_CONNECT_TIMEOUT=5
|
|
IMAGE_FETCH_TIMEOUT=30
|
|
# Maximum number of redirects followed while downloading a remote image.
|
|
IMAGE_FETCH_MAX_REDIRECTS=5
|
|
MAX_PAGER_RESULTS=125000
|
|
ECHOCLI=true
|
|
|
|
# Collections/binaries/parts processing limits. Lower values reduce peak memory
|
|
# and lock duration; higher values may improve throughput on larger DB servers.
|
|
CBP_HEADER_CHUNK_SIZE=500
|
|
CBP_SQL_CHUNK_SIZE=500
|
|
CBP_RECONCILE_BATCH_SIZE=500
|
|
CBP_NZB_STREAM_ROWS=5000
|
|
# Permit php artisan migrate to run the resumable CBP hash/key rewrite. Enable only during maintenance.
|
|
CBP_STORAGE_MIGRATION_EXECUTE=false
|
|
RENAME_PAR2=false
|
|
ADD_PAR2=false
|
|
RENAME_MUSIC_MEDIAINFO=true
|
|
FETCH_LAST_FILE=true
|
|
CACHE_EXPIRY_SHORT=5
|
|
CACHE_EXPIRY_MEDIUM=10
|
|
CACHE_EXPIRY_LONG=15
|
|
|
|
SSL_CAFILE=
|
|
SSL_CAPATH=
|
|
SSL_VERIFY_PEER=false
|
|
SSL_VERIFY_HOST=false
|
|
SSL_ALLOW_SELF_SIGNED=true
|
|
|
|
SCRAPE_IRC_USERNAME=
|
|
SCRAPE_IRC_SERVER=
|
|
SCRAPE_IRC_PORT=
|
|
SCRAPE_IRC_TLS=
|
|
SCRAPE_IRC_PASSWORD=
|
|
|
|
TWITCH_CLIENT_ID=
|
|
TWITCH_CLIENT_SECRET=
|
|
IGDB_CACHE_LIFETIME=
|
|
TMDB_APIKEY=9a4e16adddcd1e86da19bcaf5ff3c2a3
|
|
TMDB_CACHE=false
|
|
TMDB_LOG=false
|
|
TVDB_APIKEY=ef6fb572-bcee-4d99-9b52-90549ad7553a
|
|
TVDB_PIN=
|
|
ANIDB_APIKEY=
|
|
FANARTTV_APIKEY=
|
|
GOOGLE_BOOKS_API_KEY=
|
|
ISBNDB_API_KEY=
|
|
OMDB_APIKEY=
|
|
# Trakt public metadata API client ID. OAuth tokens are not needed for TV/movie metadata lookups.
|
|
TRAKTTV_APIKEY=
|
|
TRAKTTV_TIMEOUT=30
|
|
TRAKTTV_RETRY_TIMES=3
|
|
TRAKTTV_RETRY_DELAY=100
|
|
|
|
# Temp paths for extraction
|
|
TEMP_UNRAR_PATH='/var/www/nntmux/resources/tmp/unrar/'
|
|
TEMP_UNZIP_PATH='/var/www/nntmux/resources/tmp/unzip/'
|
|
|
|
# Binary paths - adjust these to match your system
|
|
UNRAR_PATH=/usr/bin/unrar
|
|
UNZIP_PATH=/usr/bin/unzip
|
|
FFMPEG_PATH=/usr/bin/ffmpeg
|
|
LAME_PATH=/usr/bin/lame
|
|
MEDIAINFO_PATH=/usr/bin/mediainfo
|
|
TIMEOUT_PATH=/usr/bin/timeout
|
|
MAGIC_FILE_PATH=/usr/share/misc/magic.mgc
|
|
|
|
# Storage paths
|
|
PATH_TO_NZBS=/var/www/nntmux/storage/nzb/
|
|
COVERS_PATH=/var/www/nntmux/public/covers/
|
|
|
|
ASSET_URL=
|
|
|
|
POSTMARK_TOKEN=
|
|
|
|
PURGE_INACTIVE_USERS=false
|
|
PURGE_INACTIVE_USERS_DAYS=180
|
|
|
|
OTP_ENABLED=false
|
|
|
|
FLARE_KEY=
|
|
|
|
# Sentry Error Monitoring
|
|
SENTRY_LARAVEL_DSN=
|
|
SENTRY_RELEASE=
|
|
SENTRY_ENVIRONMENT=
|
|
SENTRY_SAMPLE_RATE=1.0
|
|
SENTRY_TRACES_SAMPLE_RATE=
|
|
SENTRY_PROFILES_SAMPLE_RATE=
|
|
SENTRY_ENABLE_LOGS=false
|
|
SENTRY_SEND_DEFAULT_PII=false
|
|
|
|
CHECK_PASSWORDED_RARS=false
|
|
DELETE_PASSWORDED_RELEASES=false
|
|
DELETE_POSSIBLE_PASSWORDED_RELEASES=false
|
|
EXTRACT_USING_RARINFO=false
|
|
PRIVATE_PROFILES=true
|
|
STORE_USER_IP=false
|
|
|
|
FORUM_FRONTEND_ENABLED=false
|
|
|
|
STREAM_FORK_OUTPUT=false
|
|
|
|
# One-off releases table normalization migration (2026_08_13_001652).
|
|
# Skip the in-migration preflight only after `php artisan releases:optimize-preflight` passes,
|
|
# since it repeats four full scans of the largest table.
|
|
RELEASES_OPTIMIZE_SKIP_PREFLIGHT=false
|
|
# Bypass the free-space guard that aborts when the data volume cannot hold the rebuilt copy.
|
|
RELEASES_OPTIMIZE_SKIP_FREE_SPACE_CHECK=false
|
|
# Row batch size for the migration's comment recount and rollback backfills.
|
|
RELEASES_OPTIMIZE_CHUNK_SIZE=5000
|
|
|
|
# API hot-path caching, asynchronous access metadata, and instrumentation.
|
|
API_RELEASE_CACHE_TTL=600
|
|
API_RELEASE_CACHE_JITTER=60
|
|
API_RELEASE_CACHE_STALE_TTL=900
|
|
API_RELEASE_CACHE_LOCK_TTL=15
|
|
API_ASYNC_AUDIT=true
|
|
API_AUDIT_QUEUE=api-audit
|
|
API_ACCESS_UPDATE_INTERVAL=60
|
|
API_METRICS_SAMPLE_RATE=0.01
|
|
|
|
TINYMCE_API_KEY=
|
|
|
|
TMUX_USE_POWERLINE=true
|
|
TMUX_USE_NERD_FONTS=true
|
|
TMUX_TERMINAL=tmux-256color
|
|
# Main monitor loop delay and slow-statistics refresh interval, in seconds.
|
|
TMUX_MONITOR_DELAY=10
|
|
TMUX_REFRESH_INTERVAL=60
|
|
|
|
# ──────────────────────────────────────────────────────────────
|
|
# Laravel Boost (AI guidelines)
|
|
# ──────────────────────────────────────────────────────────────
|
|
# Defaults force host binaries in generated guidelines so agents are not
|
|
# steered into Sail for every Artisan/Composer/npm command. Leave blank /
|
|
# unset to keep the config/boost.php host defaults. Set to Sail wrappers
|
|
# only if you intentionally want Sail-prefixed Boost guidance again.
|
|
# BOOST_PHP_EXECUTABLE_PATH=php
|
|
# BOOST_COMPOSER_EXECUTABLE_PATH=composer
|
|
# BOOST_NPM_EXECUTABLE_PATH=npm
|
|
# BOOST_VENDOR_BIN_EXECUTABLE_PATH=vendor/bin/
|
|
|
|
# ──────────────────────────────────────────────────────────────
|
|
# Docker / Sail
|
|
# ──────────────────────────────────────────────────────────────
|
|
# These are only used when running via Docker (./sail or make).
|
|
# For native installs, leave them commented out.
|
|
|
|
# Which Compose profiles to activate (comma-separated).
|
|
# Use "manticore" or "elasticsearch" to match SEARCH_DRIVER above.
|
|
COMPOSE_PROFILES=manticore
|
|
|
|
# Sail service name (should match docker-compose.yml)
|
|
APP_SERVICE=laravel.test
|
|
|
|
# Port mapping: host → container
|
|
APP_PORT=80
|
|
VITE_PORT=5173
|
|
# Browser-reachable host for Docker Vite hot reload URLs and HMR.
|
|
VITE_DEV_SERVER_HOST=localhost
|
|
FORWARD_DB_PORT=3306
|
|
FORWARD_REDIS_PORT=6379
|
|
FORWARD_MAILPIT_PORT=1025
|
|
FORWARD_MAILPIT_DASHBOARD_PORT=8025
|
|
|
|
# Host UID/GID — avoids file-permission issues with bind mounts.
|
|
# On Linux/WSL run: id -u and id -g
|
|
WWWUSER=1000
|
|
WWWGROUP=1000
|
|
|
|
# Xdebug (off | debug | develop | coverage | profile)
|
|
SAIL_XDEBUG_MODE=off
|
|
|
|
# ── Docker service hostnames ─────────────────────────────────
|
|
# Uncomment these when running inside Docker so the app resolves
|
|
# to the correct container names instead of localhost / 127.0.0.1.
|
|
#DB_HOST=mariadb
|
|
#REDIS_HOST=redis
|
|
#MANTICORESEARCH_HOST=manticore
|
|
#ELASTICSEARCH_HOST=elasticsearch
|
|
#MAIL_HOST=mailpit
|
|
#MAIL_PORT=1025
|