Sign inSign up

iflip721/masqueradarr

By iflip721

Updated 2 days ago

Aggregating scattered IPTV sources behind a single, trusted identity.

Image
Integration & delivery
Web servers
Content management system
0

10K+

iflip721/masqueradarr repository overview

masqueradarr

Aggregating scattered IPTV sources behind a single, trusted identity.
GitHub Project Repo: masqueradarr

masqueradarr

Environment Variables

IMPORTANT:
For the best experience, create each folder path before composing the docker stack.

mkdir compose && chown -R 1000:1000 ./compose && chmod -R 777 ./compose
mkdir backups && chown -R 1000:1000 ./backups && chmod -R 777 ./backups
mkdir mongo && chown -R 999:999 ./mongo && chmod -R 777 ./mongo
# EXAMPLE .env.example
#
# App settings seeded into the Mongo `settings` doc on first provisioning only
# ($setOnInsert — changing these after the first boot has no effect; edit in the
# Settings UI instead). Distinct from the infra config in config.json.
# Host directory for composed .m3u + XMLTV guide exports (bind-mounted to
# /app/compose) so they survive a container rebuild. Must be writable by the
# container's `node` user (uid 1000): e.g.
#   mkdir -p </absolute/path/> && sudo chown -R 1000:1000 </absolute/path/>
# BACKUPS_PATH is the analogous host directory for scheduled backups (bind-mounted
# to /backups, the settings.backupLocation default) — same uid-1000 writability
# caveat as COMPOSE_PATH; defaults to ./backups if left unset.
# ------------------------------------------------------------------------------------------

DISPLAY_NAME=masqueradarr
# DOMAIN is the URL clients use to reach the app — keep its port in sync with MASQUERADARR_PORT
# (e.g. http://localhost:8080 if you publish on 8080).
DOMAIN=http://localhost:3000
# Host port the app is published on (maps to the container's fixed internal 3000).
# Change this if 3000 is already taken on your host, then update DOMAIN to match.
MASQUERADARR_PORT=3000
TZ=America/New_York
COMPOSE_PATH=/absolute/path/to/masqueradarr-vols/compose
BACKUPS_PATH=/absolute/path/to/masqueradarr-vols/backups
APP_USER_ID=1000
APP_GROUP_ID=1000

# Outbound-fetch DNS nameserver(s) for the app's OUTBOUND requests (M3U/EPG fetches, mirror
# directory scrapes, HLS proxy) are NOT configured here — there is no NAMESERVER env. On first
# provision the persisted `settings.nameservers` is seeded with a hardcoded default of
# 8.8.8.8,8.8.4.4 (Google public DNS); edit it on the Settings screen afterwards (Mongo wins; the
# change applies live, no restart). Affects global fetch() only — not MongoDB or the ffmpeg/Chromium
# subprocesses. DNS_LOG_LEVEL (1|2|3) still seeds `settings.dnsLogLevel` on first provision: 1 =
# lifecycle + issues only, 2 = + per-host resolution deduped, 3 = every lookup (shown in the View
# logs drawer, core category).
# ------------------------------------------------------------------------------------------

DNS_LOG_LEVEL=2

# MongoDB root credentials. Seed the `mongo` service's root user AND drive the app's config
# bootstrap: the app self-provisions config.json in-container on boot (docker/app-entrypoint.sh)
# as mongodb://<user>:<pass>@mongo:27017/masqueradarr?authSource=admin (creds URL-encoded — special
# chars in the password are safe). There is no separate config-init service and no host config
# mount; config.json lives at /app/config/config.json inside the container, regenerated each boot.
# MONGO_HOST_PORT = Host port that maps to mongod's 27017 (override if 27017 is taken).
# MONGO_DATA_PATH = Host directory for persistent MongoDB data (bind-mounted to /data/db).
# ------------------------------------------------------------------------------------------

MONGO_ROOT_USER=masqueradarr
MONGO_ROOT_PASS=changeme
MONGO_HOST_PORT=27017
MONGO_DATA_PATH=/absolute/path/to/masqueradarr-vols/mongo
MONGO_USER_ID=999
MONGO_GROUP_ID=999

# Optional: point the app at an external/remote Mongo instead of the compose `mongo` service.
# Set MONGO_URI to a full connection string (used verbatim — e.g. an Atlas mongodb+srv:// URI),
# or just MONGO_HOST/MONGO_HOST_PORT/MONGO_DB to assemble it from the creds.
# ------------------------------------------------------------------------------------------
# MONGO_PORT=27017
# MONGO_HOST=mongo
# MONGO_DB=masqueradarr
# MONGO_URI=mongodb://MONGO_ROOT_USER:MONGO_ROOT_PASS@MONGO_HOST:MONGO_PORT/MONGO_DB?authSource=admin

Docker Compose

services:
  masqueradarr:
    # SPECIFY THE IMAGE TAG TO USE ':dev' or ':latest'
    # image: iflip721/masqueradarr:latest
    image: iflip721/masqueradarr:dev
    user: "${APP_USER_ID:-1000}:${APP_GROUP_ID:-1000}"
    # build:
    #   context: .
    #   dockerfile: docker/app.Dockerfile
    environment:
      MONGO_ROOT_USER: ${MONGO_ROOT_USER}
      MONGO_ROOT_PASS: ${MONGO_ROOT_PASS}
      DISPLAY_NAME: ${DISPLAY_NAME:-masqueradarr}
      DOMAIN: ${DOMAIN:-http://localhost:3000}
      TZ: ${TZ:-America/New_York}
      DNS_LOG_LEVEL: ${DNS_LOG_LEVEL:-2}
    ports:
      - "3000:3000"
    volumes:
      - ${COMPOSE_PATH:-./compose}:/app/compose:rw
      - ${BACKUPS_PATH:-./backups}:/backups:rw
    depends_on:
      mongo:
        condition: service_healthy
    networks: [masqueradarr-net]
    restart: unless-stopped
    # ── Hardware-accelerated transcoding (WS6, opt-in) ──────────────────────────────────────────────────
    # The externalPlayer engine (Settings → Video Configuration → Hardware acceleration) can offload transcoding
    # to a GPU. The image already bundles a multi-vendor ffmpeg (jellyfin-ffmpeg: VAAPI/QSV/NVENC) on a glibc
    # base, so no special image tag is needed — just pass the GPU. The server detects usable encoders at boot →
    # videoconfig.hwAccel.detected (the card offers only those). Enable ONE of the following (left commented — a
    # `devices:` entry for a missing node stops the container from starting, so don't uncomment on a GPU-less host):
    #   • Intel Quick Sync / AMD VAAPI — pass the render node and join the group that owns it so uid 1000 can open it:
    #       devices: ["/dev/dri:/dev/dri"]
    #       group_add: ["${RENDER_GID:-44}"]   # GID owning /dev/dri/renderD128 on the host: stat -c '%g' /dev/dri/renderD128
    #   • NVIDIA NVENC — install nvidia-container-toolkit on the host (the image already ships an nvenc-enabled
    #     ffmpeg + NVIDIA_DRIVER_CAPABILITIES=compute,video,utility baked in), then:
    #       deploy:
    #         resources:
    #           reservations:
    #             devices: [{ driver: nvidia, count: all, capabilities: [gpu] }]

  mongo:
    # If you have issues using MongoDB 7.x due to legacy hardware switch value for MongoDB 4.x or highe
    image: mongo:7.0.15
    user: "${MONGO_USER_ID:-999}:${MONGO_GROUP_ID:-999}"
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USER}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PASS}
    ports:
      - "${MONGO_HOST_PORT:-27017}:27017"
    volumes:
      - ${MONGO_DATA_PATH:-mongo-data}:/data/db
    healthcheck:
      test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping').ok"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks: [masqueradarr-net]
    restart: unless-stopped

volumes:
  # Fallback named volume — used only when MONGO_DATA_PATH is unset.
  mongo-data:

networks:
  masqueradarr-net:

Tag summary

Content type

Image

Digest

sha256:17614d1ea

Size

348.1 MB

Last updated

2 days ago

docker pull iflip721/masqueradarr