Lumio / self-hosted
Guide

Install Lumio on QNAP & Unraid.

Both are NAS/home-server platforms with Docker — the stack is the same as on Synology. This guide shows the platform-specific entry points; for the shared details we point to the Synology guide.

Will your device run it?

  • QNAP with Container Station 3+ (ships Docker Compose v2) or Unraid 6.12+ with Docker
  • 64-bit — x86-64 recommended, arm64 possible (without GPU tagging); 32-bit not supported
  • RAM: photos only from 4 GB, with video 8 GB, AI tagging +4 GB (best left off on a NAS)
  • Free space on a volume/pool for the data

QNAP — Container Station

  1. Install Container Station from the App Center (version 3+).
  2. Put the Lumio files into a shared folder, e.g. /share/Container/lumio — via SSH (git clone) or upload via File Station.
  3. In Container Station create an Application from the existing docker-compose.yml (or run docker compose … up -d over SSH).
  4. Move the Caddy ports aside (QTS uses 80/443): CADDY_HTTP_PORT=8080, CADDY_HTTPS_PORT=8443.
  5. TLS via the QNAP reverse proxy or a tunnel — external RP mode as in the Synology guide.

Unraid — Docker

  1. Via Community Apps install the Docker Compose Manager plugin (makes docker compose usable in the Unraid UI).
  2. Put the Lumio files under /mnt/user/appdata/lumio (git clone via terminal or upload).
  3. Create a new compose stack in the plugin pointing at this docker-compose.yml.
  4. If the Unraid web UI uses 80/443, put Caddy on high ports (CADDY_HTTP_PORT=8080/8443).
  5. TLS most easily via your existing reverse proxy (SWAG or Nginx Proxy Manager) — external RP mode, see the Synology guide.

Shared — configure & start

The same on both platforms (via SSH/terminal):

cp .env.example .env
# Set secrets
sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -base64 24 | tr -d '/+=')|" .env
sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$(openssl rand -base64 32 | tr -d '/+=')|" .env
sed -i "s|^SESSION_SECRET=.*|SESSION_SECRET=$(openssl rand -base64 32 | tr -d '/+=')|" .env
sed -i "s|^S3_ACCESS_KEY=.*|S3_ACCESS_KEY=$(openssl rand -hex 12)|" .env
sed -i "s|^S3_SECRET_KEY=.*|S3_SECRET_KEY=$(openssl rand -base64 32 | tr -d '/+=')|" .env

# For an external reverse proxy (QNAP RP / SWAG / NPM / tunnel):
# set LUMIO_HOST, LUMIO_S3_HOST, PUBLIC_URL, S3_PUBLIC_URL
# and CADDY_HTTP_PORT=8080 (details: Synology guide)

docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
docker compose exec api npm run create-admin -- --email=you@yourstudio.com --password=atleast12chars

The shared TLS/reverse-proxy details are covered in depth in the Synology guide; backups are explained in the backup guide.

Common questions about QNAP & Unraid

QNAP or Unraid — which is easier? +

Unraid, if you already run a reverse proxy (SWAG or Nginx Proxy Manager) — then Lumio slots right in. QNAP is convenient via Container Station for anyone who dislikes the command line. The actual stack is identical on both; the differences are only the interface and the reverse proxy.

Does it run on ARM-based QNAP models? +

On 64-bit ARM (arm64) yes, with the same limits as on any ARM machine: no GPU tagging, transcoding on the CPU. The x86-64 models with enough RAM are recommended, though — just like with Synology. 32-bit models are not supported.

How do I resolve port conflicts with the NAS interface? +

Both QTS (QNAP) and the Unraid web UI typically use 80/443. Put Lumio's Caddy on high ports in the .env (CADDY_HTTP_PORT=8080, CADDY_HTTPS_PORT=8443) and front it with the system's reverse proxy or your SWAG/NPM. That's the same external reverse-proxy mode as in the Synology guide.

How do I do backups on QNAP/Unraid? +

As everywhere: back up the Postgres database and the MinIO object data, plus the .env. On Unraid the appdata backup plugin is handy, on QNAP Hybrid Backup Sync. The exact commands are in the backup guide.

Ready for your own gallery?

Source code on GitHub, questions and discussions there too. If anything in the guide trips you up, reach out — we're happy to improve the docs.