{"id":421,"date":"2026-01-02T19:14:20","date_gmt":"2026-01-02T19:14:20","guid":{"rendered":"https:\/\/nocoffei.com\/?p=421"},"modified":"2026-01-02T19:14:20","modified_gmt":"2026-01-02T19:14:20","slug":"making-firefox-syncserver-rs-work-on-unraid","status":"publish","type":"post","link":"https:\/\/nocoffei.com\/?p=421","title":{"rendered":"Making Firefox syncserver-rs work on Unraid"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This is one of those things it feels like it&#8217;s useful to share with the world; it was very mundane and annoying and no one else had figured it out yet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">syncserver-rs is the theoretically self-hostable solution to Firefox Sync, developed and published by Mozilla as open source software. However, it is very clearly not designed for the individual to actually self host. It&#8217;s mostly published as a courtesy, with users being left to fend for themselves to actually figure out how to work it. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I got this running on my Unraid server. These instructions take some preexisting ones and modify them accordingly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/forums.unraid.net\/topic\/114415-plugin-docker-compose-manager\">Docker Compose Manager<\/a> is our starting point. Install this, then use it to create a new compose stack. Name the stack syncserver-rs, but don&#8217;t do anything with it yet. Instead, open a terminal and navigate to <code>\/boot\/config\/plugins\/compose.manager\/projects\/syncserver-rs<\/code>, where Compose Manager keeps the data related to the stack.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, copy the contents of the <a href=\"https:\/\/github.com\/buildplan\/ffs-rs\">buildplan instructions for running syncserver<\/a> to this folder. I suggest git cloning it on your computer, then moving it to one of your shares, then finally moving it to that directory through the Unraid terminal. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Generate the secrets and input them into the environment file as stated in the instructions here. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>BE SURE TO UPDATE YOUR DESIRED SYNC URL NOW.<\/strong> Since I am using <a href=\"https:\/\/tailscale.com\/\">Tailscale<\/a> to connect all my devices, I simply set the URL to <code>http:\/\/tower:8069<\/code>, also indicating the port number we&#8217;ll set later. If you do not update this now, you will find it difficult to do so later; it turns out that Firefox caches the URL presented to it when it connects for the first time, and the only way to clear that is to sign out and back in again. I spent a good hour and a half scratching my head over this.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Continue following the instructions, including filling out the <code>docker-compose.yml<\/code> file. However, here we diverge from the instructions. The Docker Compose Manager plugin stores configuration files on the boot flash drive, which only allows directories to be owned by <code>root<\/code>. This prevents MariaDB from initializing properly, not that you&#8217;d want to store a database there anyway. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead, create a new share called Firefox-Syncserver. Then, update the database container <code>volumes<\/code> entry to look like this instead:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    volumes:\n      - \/mnt\/user\/Firefox-Syncserver\/data\/config:\/config\n      - \/mnt\/user\/Firefox-Syncserver\/data\/initdb.d\/init.sql:\/config\/initdb.d\/init.sql\n      - \/mnt\/user\/Firefox-Syncserver\/db:\/var\/lib\/mysql<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you intend to access using a port directly, like on Tailscale, make sure to delete the <code>127.0.0.1<\/code> limiter in the compose file as well. Otherwise, you will need a reverse proxy. I suggest <a href=\"https:\/\/forums.unraid.net\/topic\/110245-support-nginx-proxy-manager-npm-official\/\">Nginx Proxy Manager<\/a>, which you should just be able to dump the example configuration into verbatim. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then, just click &#8220;Compose Up&#8221; in the Docker menu and watch it work! Depending on how long the database takes to initialize, it may time out and proclaim it is &#8220;unhealthy&#8221;; just wait another minute or two and try again.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Self explanatory<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-421","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/posts\/421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nocoffei.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=421"}],"version-history":[{"count":1,"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/posts\/421\/revisions"}],"predecessor-version":[{"id":422,"href":"https:\/\/nocoffei.com\/index.php?rest_route=\/wp\/v2\/posts\/421\/revisions\/422"}],"wp:attachment":[{"href":"https:\/\/nocoffei.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nocoffei.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nocoffei.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}