One container, three steps
Interface and API come from the same image. Take the compose snippet, start it, set it up.
services:
nexview:
image: ghcr.io/derkezorm/nexview:latest
container_name: nexview
restart: unless-stopped
ports:
- "5173:8000"
volumes:
- ./data:/data
environment:
PUID: 1000
PGID: 1000
TZ: Europe/Berlin
Without a TMDB key Nexview starts with sample data, so you can look first and decide after. Database, keys and profile pictures live in the ./data folder next to the compose file. If you run with network_mode: host there is no port mapping, then NEXVIEW_PORT sets what Nexview listens on; otherwise it stays 8000.
Behind a reverse proxy: after several wrong passwords Nexview slows the next attempt down, and after ten it closes the door for fifteen minutes, the lock opens again by itself. Counting per account always works and needs no setting. To count per address as well, set NEXVIEW_CLIENT_IP to proxy (or proxy:2 for two, say Cloudflare and then your own) and make sure the proxy passes X-Forwarded-For, Nginx Proxy Manager, Caddy and Traefik do that on their own. With no proxy the value is direct. Leave it empty if unsure: saying direct while a proxy sits in front makes every request look like it comes from the same address, one typo would then lock out the whole household.
Under a sub-path behind the reverse proxy: Nexview can live at yourdomain.com/nexview instead of its own subdomain. One line in the compose file is enough, NEXVIEW_URL_BASE=/nexview, then restart the container. Both common proxy setups work, passing the path through and stripping it; copy-paste examples for nginx, Caddy, Traefik and Nginx Proxy Manager are in the README. Important: the public address in the settings must include the sub-path, Nexview suggests it correctly and warns when it is missing; without it, links in outgoing mail lead nowhere.
NEXVIEW_URL_BASE: /nexview
Proxy example: nginx
location /nexview {
proxy_pass http://127.0.0.1:5173;
proxy_set_header Host $host;
}
Proxy example: Caddy
handle /nexview* {
reverse_proxy 127.0.0.1:5173
}
Proxy example: Traefik
- traefik.http.routers.nexview.rule=PathPrefix(`/nexview`)
- traefik.http.services.nexview.loadbalancer.server.port=8000
Proxy example: Nginx Proxy Manager
On your proxy host, add a Custom Location /nexview and forward it to Nexview's host and port. Nothing more needed, no advanced settings.
-
1
Start the container
Take the compose snippet, run
docker compose up -d, open the interface on port 5173. - 2 Run the wizard Enter the TMDB, Radarr and Sonarr keys, pick quality profiles and target folders.
- 3 Bring people in By invitation with a confirmed e-mail address, or, if a Plex server is connected, straight with a Plex account. You set role, approvals, quotas and age limit as you go, and in advance for anyone who signs themselves up. Family & friends
Three steps after that
The container is running, now it needs an account and the services.
First run
The wizard step by step: account, public address, mail server and the TMDB key, including what can be skipped and what had better not be.
Connecting services
Connecting Radarr, Sonarr, Plex and the notification services, plus the three things that tend to go wrong.
Moving from Seerr
The third way into the wizard: Nexview reads your running Seerr installation and takes over services, accounts, pictures and the block list, in one go.
On Unraid and TrueNAS, straight from the catalogue
If you run either of them, you never touch a docker-compose.yml. Nexview is in both app catalogues, search, install, done. The setup wizard takes it from there, exactly as everywhere else.
On Unraid you will find it under Community Applications. On TrueNAS it sits in the Community catalogue of apps.
Updates arrive by themselves. The Unraid template follows whichever version is published; on TrueNAS their own automation pulls each new release. Nothing to do on your side when a version appears here.