TrueNASGuide
applications

TrueNAS SCALE Apps: A Practical Getting-Started Guide

TrueNAS SCALE Apps let you run Plex, Jellyfin, Nextcloud, and other services directly on your NAS. Here is how the app system works, how to set it up cleanly, and the patterns that prevent headaches later.

By Editorial · · 8 min read

One of TrueNAS SCALE’s largest functional advantages over CORE is its Apps system: a built-in way to deploy containerized services directly on the NAS, with the storage already attached. Run Plex, Jellyfin, Nextcloud, Pi-hole, Vaultwarden, Home Assistant, Immich, and dozens of other applications without setting up a separate Docker host.

It is also, in equal measure, the system most likely to confuse a new SCALE user. The terminology overlaps with Docker and Kubernetes without being identical to either; the path to “I just want to run Jellyfin” is more layered than it looks; and a misconfigured app can write data into places you did not intend, which is awkward when those places are on the same pool as your photos.

This guide is a practical orientation.

How SCALE Apps actually work

Under the hood, TrueNAS SCALE Apps are containerized services. Recent SCALE releases have been migrating from a Kubernetes-based system (k3s under the hood) to a more direct Docker Compose model — both still work and both deploy from the Apps section of the web UI.

What this means in practice:

You do not need to know Docker or Kubernetes to deploy stock apps from the catalog. You will benefit from knowing them if you eventually want to deploy custom containers via the Custom App option.

Set up the storage layout before installing anything

The single biggest mistake new SCALE users make: installing apps without thinking about where the app data goes.

Default app installs will offer to create their data directories under the app system’s managed pool path. This works, but co-mingles app config, app cache, and any media the app generates with internal SCALE app infrastructure. When you eventually want to back up just your Nextcloud data, separating it from a tangled ix-applications tree is painful.

Better pattern: create your own datasets for each app’s persistent data, then point the app at those datasets at install time.

tank/
├── apps/
│   ├── jellyfin/
│   │   ├── config/
│   │   └── cache/
│   ├── nextcloud/
│   │   ├── data/
│   │   ├── db/
│   │   └── config/
│   ├── immich/
│   │   ├── library/
│   │   ├── db/
│   │   └── thumbs/
│   └── homeassistant/
│       └── config/
└── media/      # already exists; apps mount this read-only or read-write
    ├── movies/
    ├── tv/
    └── photos/

Each app gets its own subtree under tank/apps/. Snapshot schedules can target the parent dataset tank/apps with one recursive task and reasonable retention.

A reference: deploying Jellyfin cleanly

Jellyfin is one of the simplest apps to deploy and the steps generalize. We use it as the worked example.

1. Prepare datasets

Create the app’s datasets via Datasets → Add Dataset:

Leave compression at lz4. Recordsize at 128K is fine.

2. Install the app

Go to Apps → Discover Apps, search for Jellyfin, click Install.

In the install wizard:

Mount your media read-only unless the app legitimately needs to write (Jellyfin does not — it reads media and writes metadata to its own config volume). Read-only mounts are a small but real safety boundary.

Save and wait for the app to come up. The first start can take 30–90 seconds while the image is pulled.

3. Configure inside the app

Hit the Web UI button on the app’s card to open Jellyfin. Walk through the initial setup wizard, pointing it at /movies and /tv as media libraries (the paths inside the container, not the host paths).

4. Set up reverse-proxy access if remote

For LAN-only access, you are done. For access from outside the LAN, set up a reverse proxy with HTTPS — either using the TrueNAS Apps catalog’s Traefik or Nginx Proxy Manager, or by running a proxy on a separate device. We recommend not exposing app ports directly to the public internet.

Apps that are worth running on the NAS

Some apps are obvious wins; others are better hosted elsewhere. A rough division:

Excellent fit for the NAS itself:

Better hosted elsewhere or in a VM:

Updating and snapshotting

Snapshot before every update. A periodic snapshot task on tank/apps with a daily cadence covers most accidental upgrades; before manually clicking “Update” on an app, take a one-off snapshot from the Datasets view of that app’s dataset. If the new image is broken or migrates data incompatibly, you can roll back the dataset.

Update apps one at a time, verify they work, then move on. Bulk-updating ten apps and discovering one is broken hours later is much harder to diagnose than updating one and testing it.

When apps misbehave

The most useful single command for diagnosing a broken app is the container log. From the Apps page, click the app’s name and then Logs in the menu that appears. 90% of “the app is broken” issues are visible there:

For apps that come from non-official catalogs (TrueCharts, community catalogs), be prepared for occasional incompatibilities after TrueNAS version upgrades. Stock catalog apps tend to track TrueNAS more closely.

Where to go from here

#truenas-scale #apps #plex #jellyfin #nextcloud #containers

Related

Comments