DEEN

Installing Nupplo

Nupplo runs wherever Docker runs – on a NAS, on an old computer, on a Raspberry Pi, or with a hosting provider. Five routes, one of which will suit you. The first is the one most people take.

What you need first

What you do not need: no account with us, no sign-up, no command line. The credentials for BrickLink and Rebrickable are free and can be added later – without them everything still runs, just without prices and without searching by name. BrickLink additionally requires a shop to have been opened once; it may stay empty.

Which route suits you?

Route 1: Synology NAS

The usual route, and it manages without a command line. It needs Container Manager from the Package Center (DSM 7.2 or newer). If your package is still called Docker, your DSM is older; for that case there is a box with three SSH commands at the end of this section.

1

Create the folders

In File Station, create a folder nupplo under docker, and a folder data inside it.

Result: /volume1/docker/nupplo/data

This one folder is the important one – your database lives there. Everything else is replaceable.

2

Create the project

Container Manager → Project → Create. Three fields need filling in:

Project name nupplo · Path via Set Path to /docker/nupplo · Source Create docker-compose.yml

Into the text box goes:

services:
  nupplo:
    image: ghcr.io/melle79/nupplo:latest
    container_name: nupplo
    restart: unless-stopped
    ports: ["8300:8300"]
    volumes: ["./data:/data"]
The “Create project” dialog in Container Manager: project name nupplo, source “Create docker-compose.yml”, and below it the seven lines of the Compose file
This is what it looks like once everything is filled in. The DSM screenshots on this page are from a German installation; the fields sit in the same places.

Next → Next → Done. Container Manager pulls the image and starts it. The first time this takes a minute or two.

3

Open it

In your browser, open http://<NAS-IP>:8300. From here the setup wizard takes over.

If port 8300 is taken, change the left number in the YAML, for example to "8399:8300", and open the app on :8399.

4

Updating later

Container Manager → Project → nupplo → Action → Build. DSM pulls the current image and restarts. The contents of data are left untouched.

If you want a restore point first: download the JSON file in the app under More → Backup.

Is it running?

Under Container in Container Manager there is then a row with a green dot, the image beside it, and how long it has been up.

Container Manager under “Container”: a row named nupplo with a green dot, the image nupplo-nupplo:latest and its uptime

Would you rather use the search in Container Manager? You can – the image is on Docker Hub as well. But then you must map a folder to /data: without that one step Docker creates an anonymous volume. The database ends up nameless under /volume1/@docker/volumes/…, you see nothing of it in File Station – and at the next update the new container gets a new, empty volume. The collection would appear to be gone. The project above is the easier route, because everything sits in one file there and survives updates.

Older DSM, only the “Docker” package? Then it goes through SSH. Sign in to the NAS and run:

sudo mkdir -p /volume1/docker/nupplo && cd /volume1/docker/nupplo
sudo curl -sLo docker-compose.yml https://raw.githubusercontent.com/Melle79/nupplo/main/docker-compose.example.yml
sudo docker compose up -d

Later updates happen in the same folder with sudo docker compose pull and sudo docker compose up -d.

Route 2: PC, server or Raspberry Pi

The shortest route if a command line is within reach. Nupplo comes for x86-64 (any ordinary Intel or AMD machine) and for arm64 (Raspberry Pi 3 and newer, ARM NAS boxes, Apple silicon). Docker picks the right one itself; the command is the same everywhere.

1

Install Docker

If you have not already – without Docker there is no next step. On Windows and macOS take Docker Desktop; on Linux and Raspberry Pi OS the package from your package manager:

sudo apt install docker.io docker-compose-v2

docker --version tells you whether it is running. On a Raspberry Pi, log out and back in once afterwards – otherwise your user lacks the right to operate Docker.

2

Create a folder and a file

Create a folder of your choosing and, inside it, a file docker-compose.yml with this content:

services:
  nupplo:
    image: melle79/nupplo:latest
    container_name: nupplo
    restart: unless-stopped
    ports: ["8300:8300"]
    volumes: ["./data:/data"]

Above it says ghcr.io/melle79/nupplo, here melle79/nupplo: the image lives in both registries. Container Manager only searches Docker Hub by default, which is why the full name appears there.

3

Start it

In that folder:

docker compose up -d

Docker creates the data folder itself.

4

Open it, and update it later

Open http://<machine>:8300 in your browser. An update takes two lines in the same folder:

docker compose pull
docker compose up -d

Route 3: Unraid

For Unraid there is a ready-made template – the image, the port and the path to /data are already in it. Add this address once under Docker → Settings → Template Repositories:

https://github.com/Melle79/unraid-templates

After that Nupplo appears in the template picker under Docker → Add Container, and all you choose is the folder on your array.

Look at the template repo

QNAP and everything else with Container Station or Portainer uses the same Compose file as in route 2 – only the path in front of the colon is called something different there.

Route 4: Without a machine of your own

If nothing at home stays switched on, Render or Railway can do the running. Both read the template from the project and set everything up themselves. The instance is yours – data, costs and access. There is no Nupplo service in between.

This costs money, and there is a reason. Nupplo needs a permanent directory for its database. Render’s free tier does not have one – the collection would be gone after every restart. The template therefore deliberately specifies the smallest paid tier with a 2 GB disk, rather than offering a setup that loses data.

Look at render.yaml Railway template

Route 5: From source

For contributing, or for changes of your own:

git clone https://github.com/Melle79/nupplo
cd nupplo
docker compose up -d --build

Behind the scenes it is FastAPI and SQLite; in the browser it is plain JavaScript. The front end therefore needs no build step.

After the first start

On first opening, a wizard walks you through the rest: admin account, display name and the credentials for prices and catalogue search. Every step can be skipped and caught up later under More → Settings.

BrickLink

Supplies the average prices, new and used. The account is free and stays yours – your instance fetches the prices itself, not us. The interface is only open to sellers, though: a shop has to have been opened once in the account, but you need not offer anything in it.

Rebrickable

Supplies names, pictures and the contents of sets. Free as well.

Without either

Still runs. Scanning, recording and lists all work; what is missing is prices and searching by name.

You make the instance reachable from outside later, using a Cloudflare Tunnel or a VPN – not by forwarding a port on the router. How that works is on a page of its own; in the app there is a wizard for it under More → External access.

When something gets stuck

“Image cannot be found”

Container Manager only has Docker Hub listed under Registry. That does not matter: a project with the full name (ghcr.io/…) pulls directly – you do not need the search for it at all.

The container does not start

If the log mentions missing write permissions, data belongs to the wrong owner. In File Station under Properties → Permission, grant write permission for nupplo including its subfolders.

The collection is empty after an update

Then no folder was mapped to /data and the database was sitting in an anonymous volume. It is not lost: look under Container → Details → Volume to see where it is. Switch to a project afterwards and it will not happen again.

ARM models

Devices like the DS220j or DS223 work – the image exists for arm64. Only very old 32-bit models (armv7) are out.

Port already in use

Change the left number under ports, for example to "8399:8300". The right one stays as it is – that is the port the app listens on inside the container.

Anything else?

The manual goes into setup and operation in more detail, and for questions there are the issues in the project.

To the manual Ask a question