QUICK ANSWER
What should you install on a NAS for Sanshuai Player?
Install Navidrome or Jellyfin. Navidrome is a focused music server that exposes a Subsonic/OpenSubsonic-compatible API. Jellyfin is a broader media server with its own API and can manage music alongside video. OpenSubsonic itself is an API specification, not a server package you install.
How are OpenSubsonic, Navidrome, and Jellyfin different?
An open API specification for authentication, library browsing, search, cover art, and audio streaming. It describes communication; it does not scan a disk.
A self-hosted server focused on personal music collections. It scans your files and provides a Subsonic/OpenSubsonic-compatible client API.
A self-hosted media server for video, television, and music. It uses the Jellyfin server API rather than OpenSubsonic.
The correct workflow is therefore to install a compatible server and select the matching server type in Sanshuai. API compatibility can vary by server version and does not guarantee that every optional extension behaves identically.
What should you prepare before deployment?
- Check the CPU architecture
Navidrome publishes images for common amd64 and ARM platforms; Jellyfin also publishes multi-architecture images. Verify support before using an older or unusual NAS.
- Create two storage locations
Use one persistent location for database, configuration, and cache data, plus one location for your music files. Mount the music collection read-only first.
- Confirm file permissions
The container UID:GID must be allowed to read music and write to its configuration directory. `1000:1000` is only an example.
- Keep the NAS address stable
Reserve its DHCP address in the router so client settings do not break after the IP changes.
- Start on the local network
Verify scanning and playback before adding remote access. Do not begin by exposing an unencrypted service port to the internet.
How do you deploy Jellyfin with Docker Compose?
Choose Jellyfin if you want one server for music and video. This example maps only 8096/TCP, which is enough for a manually entered server address. UDP 7359 is used for local discovery and is not required for this connection method.
services:
jellyfin:
image: jellyfin/jellyfin:10.11
container_name: jellyfin
user: "1000:1000"
ports:
- "8096:8096/tcp"
restart: unless-stopped
volumes:
- /YOUR_APP_DATA/jellyfin/config:/config
- /YOUR_APP_DATA/jellyfin/cache:/cache
- /YOUR_MUSIC:/media:roOpen http://NAS-IP:8096, complete the setup wizard, create a user, and add a Music library. Select the container path /media inside Jellyfin—not the host path named `/YOUR_MUSIC`.
The official image supports exact, minor-series, and `latest` tags. The example stays on the 10.11 minor line to avoid an unexpected major/minor jump. Back up `/config` and read the release notes before updating.
Official references: Jellyfin Container and Jellyfin Quick Start.
Where do you deploy the Compose file on each NAS?
| NAS platform | Recommended entry point | Important detail |
|---|---|---|
| fnOS | Enable Docker, open its Compose/Projects area, then paste or import the YAML. | Copy the original absolute paths for music and app data from the file manager. Labels can change between fnOS versions. |
| Synology DSM 7.2+ | Install Container Manager and create a Project from a shared folder containing `compose.yaml`. | Grant read access to the music share and write access to the configuration directory. |
| QNAP QTS / QuTS | Open Container Station, choose Create Application, paste the Compose YAML, and validate it. | Create persistent shared folders first and make sure the host ports are unused. |
| TrueNAS SCALE | Check the Apps Catalog first, or use the Custom App Compose YAML editor. | Select an Apps pool and configure dataset/host-path permissions for the app identity. |
| Unraid | Use Community Applications or Add Container and enter the image, ports, and paths individually. | Unraid's official documentation says Docker Compose is not native; translate the YAML mappings into container form fields. |
Every platform must produce the same four results: the correct image, persistent app data, a read-only music mount, and a port reachable from your local network. Never copy another person's `/volume1`, `/vol1`, or `/mnt/user` paths without replacing them.
Platform references: fnOS developer Docker documentation, Synology Container Manager Project, QNAP Container Station, TrueNAS Apps, and Unraid Docker Overview.
How do you connect the finished server to Sanshuai Player?
- Test the server in a browser first
Connect the iPhone and NAS to the same Wi-Fi and make sure Safari can open the Navidrome or Jellyfin sign-in page.
- Allow Local Network access
When iOS asks, allow Sanshuai Player to access devices on the local network.
- Select the matching server type
Use the Navidrome/OpenSubsonic-compatible type for Navidrome and the Jellyfin type for Jellyfin. Labels may vary with the app version.
- Enter the complete base URL
Examples:
http://192.168.1.20:4533for Navidrome orhttp://192.168.1.20:8096for Jellyfin. Include any reverse-proxy base path. - Use a media-server account
Enter the account created inside Navidrome or Jellyfin—not the NAS administrator account. A separate, lower-privilege playback user is preferable.
- Connect and let the first sync finish
Large libraries need time to load artists, albums, and artwork. Test one known album before configuring remote access.
How should you connect from outside your home network?
Prefer a trusted VPN into your home network or an HTTPS reverse proxy with a valid certificate. Do not expose unencrypted ports such as 4533 or 8096 directly to the public internet.
- Use a dedicated hostname or a clearly configured base path and enter the final URL in Sanshuai.
- Use a certificate trusted by iOS; self-signed certificates often cause client compatibility problems.
- Use strong passwords and keep the NAS, container images, and proxy updated.
- Navidrome works behind a reverse proxy by default. If the proxy adds its own sign-in, do not accidentally block the client-facing
/rest/*API. - For Jellyfin, pass the required proxy headers. If a Base URL is configured, include it in the client address.
- Never expose passwords, API keys, tokens, or private host details in public logs or support screenshots.
Security references: Navidrome Externalized Authentication, Jellyfin Networking, and Jellyfin Reverse Proxy.
What should you check when the connection fails?
| Symptom | Check first |
|---|---|
| Safari cannot open the server | Container status, port mapping, NAS firewall, changed IP address, and whether both devices are on the same LAN. |
| The web UI works, but Sanshuai cannot connect | Server type, http/https, port, base path, Local Network permission, and certificate validity. |
| Wrong username or password | Use the music-server account, retype it without trailing spaces, and do not substitute the NAS administrator account. |
| Connection succeeds, but the library is empty | Host-path mapping to `/music` or `/media`, read permission, and whether the server scan has finished. |
| Artwork appears, but audio does not play | Play the same track in the server web UI, then check the file, transcoding, proxy timeouts, and network path. |
| LAN works, remote access does not | VPN/proxy routing, DNS, HTTPS certificate, port rules, and Jellyfin user remote-access permission. |
If the problem remains, email [email protected] with the app version, iOS version, NAS platform, server type, LAN/remote scenario, a redacted URL shape, and the error message. Never send passwords, tokens, or unredacted logs.
Where do music, credentials, and playback data go?
Sanshuai connects directly to the NAS or music server you enter. Himhuu does not proxy your music traffic and does not upload your library, server account, or playback history to Himhuu. Connection settings stay on the device, while credentials or access tokens are stored in the system Keychain.
This does not mean every workflow is completely offline. Your chosen server, reverse proxy, DNS, or remote-access provider may process connection logs. When server-provided lyrics or artwork are unavailable and an online lookup is triggered, a third-party provider may receive track title, artist, album, or duration. See the Sanshuai Player privacy policy for the current boundary.
Frequently asked questions
Do I install OpenSubsonic on the NAS?
No. OpenSubsonic is an API specification. Install a compatible server such as Navidrome, then connect with a compatible client.
Should I choose Navidrome or Jellyfin?
Navidrome is a focused, lightweight choice for music. Jellyfin can be more convenient if it already manages several media types on your NAS. The right choice also depends on your hardware and existing setup.
Should a Navidrome URL end with /rest?
Usually no. Enter the server base URL, such as http://192.168.1.20:4533. Add a path only when the reverse proxy is explicitly configured with that base path.
Why should I avoid direct public port forwarding?
It expands the attack surface, and plain HTTP does not protect credentials or media requests. Prefer a VPN or a correctly configured HTTPS reverse proxy with a valid certificate.
Why mount the music library read-only?
A media server usually only needs to read audio and metadata. A read-only mount reduces the chance that a mistake or server vulnerability modifies original files. Keep the database and cache in a separate writable location.
Can I copy the Compose example without changes?
You can reuse its structure, but you must change paths, UID:GID, image versions, and ports for your NAS. Back up configuration and check current official documentation before deployment.