Since I am the author of A Roon on (Synology) NAS Primer and @gtunes is the author of Walkthrough : Roon in a Docker container on Synology DSM 7 he and I figured it was worth collaborating on this, so many thanks to him, as he has vastly more experience with running Roon via Docker than I do.
Before I proceed, I want to offer many thanks to @Stephen the work that led to the creation of this guide:
All that said, here are a series of important notes, directions and observations for those who are migrating from @criekeâs Roon on NAS version in the event you wish to do so. The instructions below will only work on installations of Synology DSM that are capable of running Synology Container Manager, which was introduced in DSM 7.2.
There is something important to acknowledge in everything you read here, and that is the fact that I use a separate Synology top level volume (/volume2) on an SSD for my Roon Database, and all of these instructions assume that your /volume1 is comprised of spinning discs and that your SSD is on another volume like /volume2. If your setup does not resemble this, than this guide may not be for you.
Step 1: Installing Container Manager
When installing Synology Container Manager, accept all the defaults.
This creates a new top level âdockerâ shared folder. You will not be employing this folder at all in the setup I am about to describe.
Step 2: Creating the Folder Structure that Docker will use for Roon
What we will next is create a new folder on the same (presumably SSD) volume that has your current âRoonOnNASâ folder. We will call this folder âRoonOnDockerâ.
In this folder, we will create a subfolder named âRoonâ.
Step 3: Setting up your SSD volume
The instructions at Method 1: DSM 7.2 or later (Using Container Manager Projects) donât specify the following, but in the defaults on RoonServer Docker Configuration Generator, the setting for /Roon will map to /volume1, which is likely not your separate SSD.
So, in File Station, create another folder on your SSD volume that is a peer of your existing RoonOnNAS folder. Call it something like RoonOnDocker. In there, create a subfolder called Roon. Then change your setting in the configurator to point to this folder, e.g.:
/volume2/Roon SSD/RoonOnDocker/Roon
This will create a setting on the right that looks like this (if you have spaces in any of your volume names, like I do, it will add quotes around things):
â/volume2/Roon SSD/RoonOnDocker/Roon:/Roonâ
Note that it will still need the Shared Folder to be referenced (in this case Roon SSD) in addition to the subfolders youâve created.
Step 4: Pre-setting your new backups folder
You probably have a dedicated shared folder where your Roon backups live. On mine, this was a shared folder called RoonBackups. Because most of your old backups will not be useful in your new environment, create a new shared folder for your new backups (this is where the backup you create in step 2 of Migrating from a Native Installation will go).
I called mine RoonDockerBackups. It is also a top-level shared folder off of /volume1.
You must configure this so that RoonOnNAS can write its final backup to this folder: In File Station, select this new share, click the âEditâ button, click on the âPermissionsâ tab. Then, under the dropdown that defaults to âLocal Users,â select âSystem Internal User.â Scroll down to where you see âRoonServerâ and click the âRead/Writeâ checkbox, then hit âSave.â
A note about the backup process
Please follow steps 1â3 of Migrating from a Native Installation carefully. Note that you have to disable your current watched folder before you create the backup, and note that after you are done, you must stop the RoonOnNAS package. Backups will take time. My Roon database, which is just under 11 GB for a 2.8TB music collection, took about 12 minutes.
When you are in Step 2 of Migrating from a Native Installation, you will be able to save your new backup to the folder we created and set up above rather than âcopying themâ per Step 4 of that page. Yes, this means you can skip Step 4 of âMigrating from a Native Installation.â
A note about step 5 of the migration processs
Step 5 of âMigrating from a Native Installationâ should not read: Start the new Docker container. On first launch, it will prompt you to set up or restore. It should read: âAfter starting the new Docker container, launch your desktop Roon application. On first launch, it will prompt you to set up or restore.â More on that in Step 7 of this guide, belowâŚ
Step 5: Create your âdocker-compose.ymlâ file using RoonServer Docker Configuration Generator
Follow the basic steps for creating the configuration file for your Roon-on-Docker installation. You will use RoonServer Docker Configuration Generator per the instructions at Installing RoonServer on Synology with Docker under the heading âMethod 1: DSM 7.2 or later (Using Container Manager Projects)â
Step 6: Create Your Docker âProjectâ and Get Roon Server Running
In Container Manager, after selecting Create Project and giving it a name (e.g., roonserver), you must select the outer folder (e.g., RoonOnDocker) you created on your SSD volume using the Set Path button.
Once you have copied the docker-compose.yml contents that you created in Step 5 to your computerâs clipboardâŚ
âŚgo back to âCreate Projectâ and switch âSourceâ from âUpload docker-compose.ymlâ to âCreate docker-compose.ymlâ which will enable pasting per the instructions.
Next, paste the contents of your clipboard into the little text field as follows:
IMPORTANT â MEGA IMPORTANT â and illustrated above:
Modify this line:
- /volume1/music:/Music
So that it looks like this:
- /volume1/music:/MyMusic
If you really donât want to use the one or two Roon features that allow you to make modifications to your music collection, append â:roâ to the end of that line to make this directory âread onlyâ:
- /volume1/music:/MyMusic:ro
Skip the âWeb Portal Settingsâ screen - simply hit âNextâ
On the last screen, hit âDone.â
Step 7: Connecting Everything Up on the Desktop
Once your Docker container is running, launch your Roon desktop application, which will likely have a screen reporting that itâs Waiting for Roon Server, like this:
Press âSelect a different Roon Serverâ - it should bring you to a place with a green âReadyâ icon once your new Docker-based install is ready.
Press "Connect.â
Unfortunately, you may have to quit the application and relaunch it a few times and hit Connect each time until you get to the next partâŚ
Once things are humming, you will get to step 5 of âAfter installationâ (5. Set up a new Roon Server or restore from backup.)
Eventually after you hit connect, you should get a screen that has a âRestore a backupâ link at the bottom, almost hidden. Select this.
After that, you will have to hit Relaunch to continue:
This may seem to bring you to a dead-end, so just be patient. You may watch your server status turn red and green for a bit.
If you get into a cycle, just quit and restart the desktop application until you see this screen again:
This time, though, instead of selecting "Restore a backup,â select "Login.â
After you finish logging in via your web browser, there is a button to go back to the Roon desktop application. When you do, you may find the jellyfish spinning. Thatâs OK. Be patient. After a few minutes, you should get the âYouâre already signed inâ screen you see below.
Hit âUnauthorizeâ for your old Roon Server.
Now, you will get the screen showing you have nothing in your collection
DO NOT FRET. The magic happens in the next step.
Go to Settings > Storage, and go to your previously disabled storage location. Press the three dots icon to the right, and select âEnable.â
From there, you will see a notice that the drive is not available, with a link to âedit this folderâ.
Click âedit this folderâ and then in the dialog box that appears, select âBrowseâŚâ
Find âMyMusicâ and click on that.
You should see your music folder in there! Hit âSelect this folderâ then on the next box that appears, hit Save.
Then Roon will begin to scan your music collection just like it does with a normal reboot.
There will be a music location in Settings > Storage called âMusic Folderâ - use the ⌠menu to set it to âDisabledâ - it plays no role in this sort of environment.
Step 8: Loose Ends
-
Double check the location of your automated Roon backups and make sure they are pointing to the new folder you created in Step 4.
-
If you have extensions running, like RoPieee, you will need to re-enable them in your settings.**
-
Other than that, Youâre done!
Step 9: A Note on Post-Migration Performance
Iâve added this update after my personal migration experience. When you restore a backup from a Roon on NAS library, everything looks all set in the Roon desktop application - history, tags, metadata, etc., are all there working as before.
BUT.
It appears that Roon needs to do fairly extensive background processing â including
Background Audio Analysis â after the migration. This will be manifest through Roon getting very slow to respond to things like track-to-track transitions, etc.
I donât know if that is because that part of the underlying software cares about the fact that the internal path representation of each file changes during the migration (e.g., Roon on NAS pointed to
/var/packages/RoonServer/target/roonmnt/music/Non-Classical/Yes/Union/04 - Lift Me Up.flac and after migration to the Docker solution, the internal mapping for said song is /MyMusic/Non-Classical/Yes/Union/04 - Lift Me Up.flac). But it seems like a good possibility.
So, I recommend anyone noticing this slowdown be patient AND to turn on âScheduledâ background audio analysis for 12+ hour chunks for a couple of days. After 2 nights of this for my ~64,000 track library, things settled down. When you notice things settling down, itâs OK to reboot your Roon server and put the setting back to âUnscheduled.â
Appendix: Here is my YAML file, for reference
services:
roonserver:
image: ghcr.io/roonlabs/roonserver:latest
container_name: roonserver
network_mode: host
environment:
- ROON_INSTALL_BRANCH=production
- TZ=America/New_York
volumes:
- "/volume2/Roon SSD/RoonOnDocker/Roon:/Roon"
- /volume1/music:/MyMusic:ro
- /volume1/RoonDockerBackups:/RoonBackups
restart: unless-stopped
logging:
driver: local













