Running Thingport on TrueNAS SCALE
Thingport is a 4-container stack (Postgres, FlareSolverr, backend, frontend) that talk to
each other by container name — the frontend’s nginx config, for example, proxies /api/*
straight to http://backend:8000. There are two ways to run a multi-container stack like
this on SCALE, depending on your version:
Option A: Custom App via YAML (SCALE 24.10 “Electric Eel” and later)
- Apps -> Discover Apps -> Custom App -> Install via YAML.
- Paste in
docker-compose.ymlfrom this folder. - Copy
.env.exampleinto the app’s environment variables editor and fill in:APPDATA_PATH— a dataset on one of your pools, e.g./mnt/tank/apps/thingport(replacetankwith your actual pool name)AUTH_SECRET— any random string, e.g.openssl rand -hex 32from a terminalPOSTGRES_PASSWORD— any password
- Save/Install.
If your SCALE version’s Custom App form doesn’t offer YAML upload, use Option B instead.
Option B: Plain docker compose over SSH (any SCALE version)
- Create a dataset for the stack, e.g.
/mnt/tank/apps/thingport, from Datasets in the UI (ormkdir -pit over SSH). - SSH into TrueNAS and copy
docker-compose.ymland.env.exampleinto that dataset, renaming the latter to.envand filling in the same values listed in Option A above. - From inside the dataset folder, run:
docker compose up -d
Either way, Thingport creates two folders on first start:
$APPDATA_PATH/postgres (database) and $APPDATA_PATH/storage (your imported models).
Since these live on a dataset, they’re covered by whatever snapshot/replication tasks you
already have configured for that pool.
Open it
Once all 4 containers show healthy/running, open http://<your-truenas-ip>:<WEB_PORT>
(default port 80). The first account you register becomes the admin account.
Notes
- Do not rename the
backendservice/container. The frontend’s nginx config resolves it by that exact name over the compose network; renaming it breaks/api/*requests. - If the backend can’t write to
$APPDATA_PATH/storage, check the dataset’s owning uid/gid (ls -non the parent folder) and setPUID/PGIDin your.envto match. - Provider setup (MakerWorld / Thingiverse credentials) works the same as any other install
— see
docs/PROVIDER_SETUP.mdin the main repo. - To pin a specific build instead of
:latest, see the tagging note indocker-compose.deploy.ymland setBACKEND_IMAGE/FRONTEND_IMAGEaccordingly (add those two env vars to the stack and swap theimage:lines to${BACKEND_IMAGE:-...}/${FRONTEND_IMAGE:-...}if you want that flexibility).