Skip to content

Install with Docker & NAS

The server is a single container. Everything it knows lives in one data folder; your media is mounted read-only next to it.

Folder layout

The scanner understands the common "Plex-style" naming. Sidecar subtitles next to the file are picked up automatically.

your library
Movies/Paper Boats (2019)/Paper Boats (2019).mkv
Movies/Paper Boats (2019)/Paper Boats (2019).en.srt   ← optional subtitles
TV/Signal & Noise (2011)/Season 01/Signal & Noise - S01E01.mkv
TV/Signal & Noise (2011)/Season 01/Signal & Noise - S01E01.fr.srt

Two folders of the same show or movie (say TV/Signal & Noise and TV/Signal & Noise (2011), or a copy on a second drive) become one title after each scan: the episodes are combined, and where both have the same episode, the better file plays. Admin → Library shows "2 folders" on it. Folders that name different years or IDs are left apart, since one of them is probably matched wrong; fix it with More → Fix match.

Any computer with Docker

Create a folder (for example ~/moovo), save this as docker-compose.yml inside it, and change the two media paths to where your Movies and TV live:

docker-compose.yml
# docker-compose.yml
services:
  moovo:
    image: git.ronniie.com/moovoapp/server:latest
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      MOOVO_PUBLIC_URL: https://movies.example.com   # how your people reach it
      MOOVO_MOVIE_ROOTS: /media/movies
      MOOVO_TV_ROOTS: /media/tv
      TMDB_API_KEY: ${TMDB_API_KEY:-}                # optional: posters & details
      TZ: America/New_York
    volumes:
      - ./data:/data                  # database, artwork, subtitles
      - /path/to/Movies:/media/movies:ro   # read-only: it never modifies your files
      - /path/to/TV:/media/tv:ro
SettingWhat it does
MOOVO_PUBLIC_URLThe address your people use to reach the server (see Remote access).
MOOVO_MOVIE_ROOTS / MOOVO_TV_ROOTSWhere the media is mounted inside the container. Separate several with commas.
TMDB_API_KEYOptional. A free key from themoviedb.org for posters, cast and descriptions. You can also add it later in the app.
TZThe server's own time zone, for its logs and schedules. Each person's clock and movie-night times follow their own computer.

Then start it:

terminal
docker compose up -d
docker compose logs -f moovo

Synology (DSM 7.2+)

  1. Install Container Manager from the Package Center.
  2. In File Station, create docker/moovo and a data folder inside it.
  3. Container Manager → Project → Create, pick the docker/moovo folder, and paste the compose file above. Use your shared folders as the media paths, e.g. /volume1/Movies:/media/movies:ro.
  4. Build and start it, then open the project's Logs tab for the setup code.

Unraid

Use the Docker Compose Manager plugin: add a stack called moovo, paste the compose file, and map /mnt/user/Movies and /mnt/user/TV. Put data under /mnt/user/appdata/moovo.

TrueNAS SCALE

Apps → Discover Apps → Custom App. Image git.ronniie.com/moovoapp/server, tag latest, port 8080. Add host-path storage for /data (a dataset for app data) and your media datasets for /media/movies and /media/tv, both read-only. Add the environment variables from the table above.

Media on another machine (SMB/NFS)

If your movies are on a separate NAS, let Docker mount the share itself, so it survives reboots:

docker-compose.yml (excerpt)
services:
moovo:
  volumes:
    - ./data:/data
    - nas-movies:/media/movies:ro
    - nas-tv:/media/tv:ro

volumes:
nas-movies:
  driver: local
  driver_opts:
    type: cifs
    device: "//192.168.1.20/Movies"
    o: "username=reader,password=${NAS_PASSWORD},vers=3.0,ro,uid=1000,gid=1000"
nas-tv:
  driver: local
  driver_opts:
    type: cifs
    device: "//192.168.1.20/TV"
    o: "username=reader,password=${NAS_PASSWORD},vers=3.0,ro,uid=1000,gid=1000"