TT-RSS with Synology Docker

Last modified date

Comments: 20

After the demise of the much loved Google Reader I’ve pretty much tried every RSS service out there and have always come back to TT-RSS ( It’s clean, very functional and give me everything I need to track all my RSS feeds. This is a guide to setting it up with the offical Docker container using the GUI front end of Synology Docker.

This tutorial is going to assume a number of basics are already in place but I’ll look to expand on these in future posts. Because Synology DSM doesn’t support docker-compose from the GUI we have to do each part by hand and it’s this docker-compose file that we’re going to replicate Four containers in total need to be set up.

‘DB’ Container

First of all we’re going to start with the database of which TTRSS recommend the use of Postgres.

  • Open Docker in DSM
  • Navigate to Registry and search for the Postgres official container and download it
  • Once downloaded go to Image and launch postgres. Give it a name you’ll recognise and click advanced settings
  • Select ‘Enable auto-restart’ This setting will start the container for you when you reboot your NAS
  • In the ‘Volume’ tab select a folder for the database to be saved with the mount path as ‘/var/lib/postgresql/data’
  • Network & Links should be left as the default values.
  • For ports enter a port number you wish to use, I’ve used a local port of 5434
  • Add the following entries into Environment (POSTGRES_DB, POSTGRES_USER & POSTGRES_PASSWORD). The values can be anything you want them to be.
  • Now start the container and check the logs to confirm all is well

‘APP’ Container

Now it’s time for the app (cthulhoo/ttrss-fpm-pgsql-static). Download it in the same way as you did for Postgres. You’ll then need to enter the following settings
Volumes – mount path of ‘/var/www/html’ to a folder on your NAS
Links – select the container set up previously with an Alias of ‘db’
Ports – leave this as Auto

Environment Variables……
TTRSS_DB_PASS – the password you used in the db container
TTRSS_DB_USER – the user you used in the db container
TTRSS_DB_NAME – the db name you used in the db container
OWNER_GID – see in a new tab)
OWNER_UID – as above
TTRSS_SELF_URL_PATH – the address to be used to access the app in the format http(s)://ADDRESS:XXXX/tt-rss/ where XXXX is the port number you wish to use to access TTRSS

‘WEB’ Container

Next, set up a container for ‘web’ using the image called cthulhoo/ttrss-web-nginx. It requires the port you have used in the SELF_URL_PATH above against the container port 80 and it requires a volume with mount path /var/www/html. Link the container to the ‘app’ container as below.

‘UPDATER’ Container

Next is the container to update the feeds. Set up the container cthulhoo/ttrss-fpm-pgsql-static as before but add the command in the environment tab ‘/bin/sh /opt/tt-rss/’. This container also needs to be linked to the app and db container as shown


Once all those containers have been set up and running it’s now ready to be set up the application on the address used for SELF_URL_PATH.



20 Responses

    • I’ve had success using MySQL before but this is the response by the developer in his FAQs

      What should I use – MySQL or PostgreSQL?
      tt-rss is developed with PostgreSQL in mind, MySQL support is an afterthought.

      If possible, consider using PostgreSQL for tt-rss. MySQL is supported but some minor features may be exclusive to Postgres and you’re going to see worse performance (because InnoDB is slow).

  1. Hi,
    Very good tutorial. However, I am a bit lost at the end. If I understood correctly, we must have 4 containers in total (‘db’, ‘app’, ‘updater’ and ‘web’). The container ‘updater’ is a dummy copy of ‘app’ (environment variables, volumes, etc.) except that it runs a feed update script, isn’t it? And Finally, for the ‘web’ container if I use the same ports as for the ‘app’ container, Docker tells me that this port is already used. If I remove the port mapping in the container ‘app’ then I can create the ‘web’ container however when accessing the web at http://ADDRESS: 8182/tt-rss/ I get “404 not found”. Can you help me ?

    • Hi

      Thanks for reading the blog, hopefully we can get you over the line. If you take a look at the docker-compose file you’ll see as you say that the ‘updater’ and ‘app’ are from the same image, the only difference being the execution command. The port used for both of these is irrelevant and can be anything you wish as long as they’re not the same (the docker-compose file doesn’t even specify the port). The port used to actually get to the app is from the ‘web’ container and it’s whatever you’ve chosen to map against 2015. I’ve made a couple of changes to the instructions to mention leaving the ports for the ‘app’ and ‘updater’ as AUTO. Hope this helps

  2. Hi Oli,

    thanks for your nice tutorial. I followed your instructions, but I can’t get it to work. Can you help me?
    The app-container seems to be stuck on an error and restarts every few seconds. These lines can be found in the log:

    + pg_isready -h postgres -U postgres
    postgres:5432 – accepting connections
    + id app
    id: unknown user app
    + addgroup -g 1000 app
    addgroup: group ‘app’ in use

    Does it have something to do with the uid and gid? I set the environment OWNER_UID = 1000 and OWNER_GID = 1000. These are the settings in the original docker-compose.yml.
    I also tried different IDs from an existing synology-user (uid = 1026, gid = 100). I found them using your other tutorial. But in both cases I get the same error.

    Thank You.

    • Hi.

      This usually happens because the individual containers a=can’t talk to each other. Could you go through the guide and make sure you have created the links i.e. the ‘APP’ container is linked to your database, the ‘UPDATER’ container is linked to the database and the ‘APP’ container etc etc

  3. Hi Oli,

    I checked the container links, they were set correctly. I deleted everything, started from scratch and used the exact naming as in your tutorial. Now it works!
    Before I used different ports and other container names than yours. I don’t know what the problem was before, but nevermind, now I’m happy!

      • Hi there. Thanks for the tutorial. I’m stuck on the app container. It starts, and then fails, and continuously restarts (obviously).

        I’m getting the following error in the log:
        addgroup: gid ‘100’ in use

        Note: I am using the PID and GID based on the NAS user ID, (not the DB user)
        Another note: at the composer link “ “ in the APP section is this incorrect: DB_NAME=${POSTGRES_USER} ? I assume the value should be the DB name as set in the DB container as per the tutorial..

        Any assistance would be appreciated. I’m surprised with the error. My hoobs container has the same UID and GID without issue. Thanks!

        • Are you user your user group is 100? That would suggest the user isn’t an administrator (101). What do you see when you run ‘id’ on the command line?

  4. Hey, I have SSL on my diskstation already as well as a custom domain, how do I get TTRSS running via SSL instead of http?

  5. Hello Oli,
    Firstly, thank you for putting this guide together. Really Helped and works perfect.
    But after 48 hours – for some reason Docker deletes the Updater and the Web container saying that it stopped unexpectedly.
    Any ideas what I need to do ?
    Thanks once again

  6. Hi Oli,

    By any chance, is it possible to post some screenshots of all containers configuration ? (of course, without the confidential datas)
    Some containers keep stopping-restarting again and again, and I would prefer this solution to use the 80/443 port (http(s):///tt-rss) rather than sameersbn/dragas images(from you previous blog, as it could be tricky to access to tt-rss with this solution due to some proxy rules)

  7. Hi,

    Would you mind to put an update on how to use the new docker compose installation process, as I don’t know how to deal with link to a .env files ?

    • Apologies for the delay, the developer changed the docker compose a while ago. Just list the individual environment variables instead of dealing with .env files.

  8. Hi,
    Im trying to get this to work, but it cant find the (log: no such file or directory). Should this be a standard script of DSM? How to resolve?


    • The developer changed the docker compose recently, you now have to use /bin/sh /opt/tt-rss/ as the execution command

  9. I`ve made your tutorial step by step but I recieve 404 error on my 7000 port. Maybe is an error on permisions?

    I don’t know what to do with them…

Leave a Reply

Your email address will not be published. Required fields are marked *

Post comment