On any Docker host (Linux / macOS / Windows WSL), start with one command. The image is a self-contained official build (frontend + full backend, multi-arch amd64/arm64); data lives in a named volume.
Bashmkdir -p ~/bestnav && cd ~/bestnav
curl -fsSL https://nav.bestu.top/docker-compose-en.yml -o docker-compose.yml
docker compose up -d
The image is versioned and self-contained — no local binaries needed. This English page pulls from Docker Hub; mainland-China users should switch to the Chinese page for the Tencent TCR source file (docker-compose.yml). Upgrade with docker compose pull && docker compose up -d.
The Docker container-management card is disabled by default (one less helper container). To enable it, replace the official template with the full compose below: a built-in read-only proxy allows only container list/start/stop — docker.sock is never mounted into BestNav.
After replacing, run docker compose up -d to recreate (data is kept); the card connects within ~15 seconds. To disable, remove the socket-proxy service plus the DOCKER_HOST and depends_on lines.
Data lives in the named volume bestnav_data (mounted at /app/data: local JSON + file-search SQLite index), safe across upgrades
Default port 10788 (container always listens on 3000, mapped via ports)
Open http://:10788 after start
Environment Variables
Customize the deployment via env vars (in compose environment or a .env file):
Bash# Host port: edit the compose ports mapping (e.g. "8080:3000"); the container always listens on 3000
PUBLIC_URL=https://nav.example.com
TZ=Asia/Shanghai
Synology DSM
Open Container Manager → Project → Create, import docker-compose.yml (official self-contained image, no local binaries), or follow the download-page command.
Use bridged network with a fixed port 10788
Mount volume to /volume1/docker/bestnav
Configure domain & cert via External Access for HTTPS
fnOS
Install from fnOS App Center in one click, or run the Docker Compose command above via terminal, then open it in My Apps.
FygoOS (fnOS international)
FygoOS is the international edition of fnOS. It installs exactly like fnOS (fpk package + systemd service) but needs the dedicated intl package: use the "Download FPK (FygoOS)" button on the download page, or grab bestnav-intl-*.fpk from the archive.
Both editions ship identical features — the only difference is the distribution flag injected at build time (used for regional display and international payments). Upgrading works the same as fnOS: upload the new fpk in App Center and your data is preserved.
Direct-install packages and platform differences (fnOS FPK / DSM SPK)
Besides Docker, there are official native packages: search BestNav in the fnOS app centre for a one-click install, or sideload the SPK in DSM Package Centre. Nothing to compose, no image to pull. The table below lists how each form runs and where its data lives.
Form
Runs as
Data location
Upgrade
Uninstall and data
Docker management
fnOS (FPK)
Dedicated unprivileged user fn-bestnav, also in the docker group
Package data directory
Update from the app centre; bookmarks and settings survive
Uninstall wizard asks: keep data (auto-restored on reinstall) or erase everything
Available by default
DSM (SPK)
Unprivileged package user bestnav created by DSM (run-as package)
Package @appdata folder
Manual reinstall from Package Centre; data and settings survive
Uninstalling reclaims the data folder too — export a backup from Settings → Data first if you need it across installs
Not offered (see the note)
Docker / Compose
In a container with all capabilities dropped and no-new-privileges
Named volume bestnav_data
docker compose pull && up -d without data loss
Data disappears only if you delete the volume
Off by default; enable it explicitly (docker.sock is not mounted out of the box)
The Synology build intentionally has no Docker management: DSM isolates third-party packages from the Docker engine (socket is root:root 660, no group to join, no run-as root). That is a platform limit, not a missing feature, and we do not change the host to work around it — no chmod or chown on docker.sock, no /etc/group edits, no startup scripts, no containers created on your behalf. To manage containers on a Synology, deploy BestNav through Container Manager with Docker instead.
Other NAS (Unraid / TrueNAS / QNAP)
Deploy with the same Docker Compose above: Unraid via Docker Compose/template, TrueNAS Scale via Custom App, QNAP via Container Station or SSH. Bind a fixed port and a data volume after deploy.
QNAP
On QNAP, deploy via Container Station by importing docker-compose.yml, or run the Docker Compose command over SSH. Mount the data volume to /share/Container/bestnav for easy management.
Container Station → Applications → Create → Import YAML
Fix port 10788 and allow it in Network & Virtual Switch
Reuse the env vars and reverse proxy above for HTTPS
ZSpace
ZSpace also deploys via Docker: import docker-compose.yml in App Center → Docker, or run the command over SSH. Great for home media and self-hosted nav — mount the data volume to the Docker shared folder and start.
App Center → Docker → Import compose file
Mount volume to /mnt/zspace/docker/bestnav
Open http://:10788 after start
Reverse Proxy & HTTPS
For production, put BestNav behind Nginx / Caddy with HTTPS. Caddy example (auto TLS):