← All posts

Install prdb-fab on TrueNAS as a Custom App

Set up prdb-fab on Docker-based TrueNAS with a Custom App: datasets, permissions, Compose YAML, your prdb API key and SABnzbd paths.

prdb-fab connects prdb.net, your Usenet indexers and SABnzbd to build an organised media library. On TrueNAS, you can run it as a Custom App using Docker Compose YAML. This guide takes you from storage preparation to the first completed setup.

The instructions target the Docker-based Apps system introduced in TrueNAS SCALE 24.10, including subsequent Community Edition releases. Use a supported TrueNAS release with that Apps system; this is not a TrueNAS CORE jail or an older Kubernetes Apps guide. Menu labels can vary by release. TrueNAS documents the two custom-app installation paths in its Apps reference.

The example uses prdbnet/prdb-fab:0.21.0, the version pinned in the project’s Docker guide when this article was written. Check that guide and the releases when choosing a version.

1. Have the essentials ready

You need an Apps pool configured in TrueNAS, space for application data and media, and a prdb.net API key with an active API plan. Free web browsing does not include API access; see the plan comparison. The NAS also needs outbound access to pull the container image and connect to prdb.net.

To download anything, you also need a working SABnzbd installation configured with a Usenet provider, plus an indexer with API access. Have the SABnzbd address, API key, category and completed-download path ready, along with the indexer address and key. You can skip those connections during initial setup and add them later.

2. Prepare storage and permissions

The following layout is an example. Replace tank with your pool name and adapt the directories to your existing storage:

TrueNAS host pathPurposePath inside prdb-fab
/mnt/tank/apps/prdb-fabDedicated application dataset: database, settings, logs and artwork/data
/mnt/tank/mediaMedia dataset shared with the download workflow/media
/mnt/tank/media/downloads/completeCompleted SABnzbd downloads/media/downloads/complete
/mnt/tank/media/libraryDestination for the organised library/media/library

Create the application and media datasets under Datasets, and create the two subdirectories inside the media dataset before installing the app. Existing directories are fine. Keeping downloads and the library as ordinary directories in the same dataset allows moves within one filesystem; separate child datasets are separate filesystems.

Keep the application dataset local to TrueNAS. /data contains SQLite state and must not point to a remotely mounted SMB or NFS share. Use a dedicated dataset because the container takes ownership of its application data at startup.

Choose the local user and group that should own files written by prdb-fab. For an existing media user named media, the TrueNAS system shell can show its numeric IDs:

id -u media
id -g media

Replace media with your actual account name. Put the resulting numbers into PUID and PGID below; 1000 is only an example, not a TrueNAS default.

Use the dataset permissions or ACL editor to grant that identity traversal through the parent directories, read/write access to completed downloads, and read/write access to the library. prdb-fab moves files, so reading a finished download alone is insufficient. SABnzbd must create downloads that this identity can read and move. Sharing an appropriate media group and using inheritable group permissions is one way to arrange that. Avoid replacing existing media ACLs recursively just to make the container start.

3. Install the Custom App with YAML

In TrueNAS, open Apps → Discover Apps. Open the three-dot menu near Custom App and choose Install via YAML. Name the application prdb-fab and paste the Compose definition below. This is the YAML installation path, rather than the guided image-fields form opened by the Custom App button itself. See the official custom-app instructions.

services:
  prdb-fab:
    image: prdbnet/prdb-fab:0.21.0
    restart: unless-stopped
    ports:
      - "18080:8080"
    environment:
      PUID: "1000"
      PGID: "1000"
      UMASK: "022"
    volumes:
      - type: bind
        source: /mnt/tank/apps/prdb-fab
        target: /data
        bind:
          create_host_path: false
      - type: bind
        source: /mnt/tank/media
        target: /media
        bind:
          create_host_path: false

Replace the two source paths and the user/group IDs before installing. The bind mounts require the directories to exist, which helps catch a mistyped path. Both mounts are writable: prdb-fab needs to maintain its state and file downloaded media.

Port 18080 is the example host port; change it if another app already uses it. Keep the container port on the right as 8080. Leave the image’s entrypoint and container user at their defaults: the entrypoint prepares /data, then runs the application as the PUID/PGID identity. Do not add a Compose user: override.

There is no API key in this YAML. prdb-fab asks for it in the browser and stores the configuration in /data.

Click Install and wait for the application to start. Open http://YOUR-TRUENAS-IP:18080 from your trusted local network, substituting your NAS address. Set the initial password immediately: the first visitor to an unconfigured installation chooses it. There is no default username or password. Plain HTTP does not encrypt credentials; use HTTPS through a reverse proxy or a protected VPN connection when accessing the app beyond your trusted LAN.

4. Complete the first-run wizard

The wizard saves each completed step and checks the connections you supply:

  1. prdb API key: enter your prdb.net key. This step is required and must pass validation before setup can proceed.
  2. SABnzbd: enter its reachable address, API key, download category and the finished folder as seen inside prdb-fab. You can skip this step if SABnzbd is not ready yet.
  3. Indexers: add your indexer addresses and API keys. Each is checked with a real search. This step can also be skipped and completed later in Settings.
  4. Library root: enter /media/library for this example. This required directory must be writable by the configured identity.

For a SABnzbd app published on the same NAS, use its reachable NAS address and published port, for example http://YOUR-TRUENAS-IP:18081 if that is how you configured SABnzbd. localhost inside prdb-fab refers to prdb-fab’s own container. Separate TrueNAS apps do not automatically share Compose service-name resolution.

Make the SABnzbd paths agree

Both applications need access to the same completed files, even if their container paths are different. The simplest arrangement is to mount /mnt/tank/media as /media in both applications and configure SABnzbd’s category to finish under /media/downloads/complete. Then prdb-fab uses that same path.

If your existing SABnzbd app instead mounts the host’s completed folder as /downloads, the relationship is:

ViewCompleted-download folder
TrueNAS host/mnt/tank/media/downloads/complete
Existing SABnzbd container/downloads
prdb-fab container in this guide/media/downloads/complete

Configure the SABnzbd path mapping in prdb-fab so the finished folder SABnzbd reports resolves to /media/downloads/complete. For example, a job reported beneath /downloads/job-name must resolve beneath /media/downloads/complete/job-name. Entering the host path /mnt/tank/... in prdb-fab will not work with these mounts.

5. Verify the first run

Setup ends on the wanted list while the initial catalogue work runs in the background. Open Status to follow it. With an indexer enabled, the app fills its rolling 90-day Recent Window; this is incremental, so an incomplete first fill is not by itself a failed installation.

Before enabling automation, select one eligible release and follow a manual download through SABnzbd, collection and filing. Confirm that the result appears beneath /mnt/tank/media/library on the NAS. A safely identified entry gets a Jellyfin-compatible folder and movie.nfo, with artwork when available. Files needing a decision appear in the review queue.

Review Settings → Reporting as part of setup. Fulfilment reporting and confirmed file-assignment reporting are independently enabled by default. The project’s privacy documentation explains their contents and how to turn either channel off.

If something does not work

SymptomWhat to check
The app will not startTrueNAS app logs, image tag, existing bind-mount paths and whether host port 18080 is free.
The library is not writablePUID, PGID, parent-directory traversal and the media dataset’s permissions or ACLs.
SABnzbd connection failsIts published address and port, API key and reachability from prdb-fab; avoid localhost.
A completed download cannot be collectedWhether both apps see the same files, finished-folder mapping and download permissions.
The prdb key is rejectedThe key and its API access; a free browsing account alone is insufficient.
Catalogue or indexer work is incompleteStatus details, connectivity and API limits; let the initial background fill progress.

Back up before updating

Use Settings → Backup to export the installation’s non-recoverable state before changing the image tag. The export contains readable credentials, including API keys, so keep it in protected, encrypted backup storage. It does not contain your video files or replace a media backup. For a dataset-level snapshot of /data, stop the app first so the database is quiescent.

To update, review the release notes, edit the Custom App YAML to the chosen pinned image tag, and save/redeploy through TrueNAS. Keep the same datasets mounted. Verify Status and your library after startup. Restore from the portable backup is offered on a fresh, empty installation; the project documentation explains that process.

Once filing works, you can mount the finished library read-only in prdb-viewer and give it its own application-data directory. Our overview of prdb-fab and prdb-viewer explains how the two fit together.