Dockerized tt-rss using docker-compose
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Andrew Dolgov 6418c518db Merge branch 'feature/php8.2' into 'master'
Bump to Alpine 3.18, PHP 8.2

See merge request tt-rss/ttrss-docker-compose!1
1 year ago
app Bump to Alpine 3.18, PHP 8.2 1 year ago
config.d initial for env-based setup 3 years ago
web-nginx Rename env var to APP_UPSTREAM 1 year ago
.env-dist fix incorrect syntax for AUTO_CREATE_USER_ACCESS_LEVEL 2 years ago
.gitignore add optional support for xdebug 3 years ago set random password for admin on first startup unless ADMIN_USER_PASS is set 2 years ago
docker-compose.yml remove caddy containers 3 years ago

Dockerized tt-rss using docker-compose

The idea is to provide tt-rss working (and updating) out of the box with minimal fuss.

General outline of the configuration is as follows:

  • separate containers (frontend: nginx, database: pgsql, app and updater: php/fpm)
  • tt-rss and plugins update from git master repository on container restart
  • tt-rss source code is stored on a persistent volume so plugins, etc. could be easily added
  • database schema is updated automatically
  • nginx has its http port exposed to the outside
  • feed updates are handled via update daemon started in a separate container (updater)
  • optional backups container which performs tt-rss database backup once a week


git clone ttrss-docker && cd ttrss-docker

Edit configuration files

Configuration is done primarily through the environment. Copy .env-dist to .env and edit any relevant variables you need changed.

You will likely have to change TTRSS_SELF_URL_PATH which should equal fully qualified tt-rss URL as seen when opening it in your web browser. If this field is set incorrectly, you will likely see the correct value in the tt-rss fatal error message.

Legacy configuration file (config.php) is not created automatically, if you need it, copy it from config.php-dist manually.

By default, frontend container binds to localhost port 8280. If you want the container to be accessible on the net, without using a reverse proxy sharing same host, you will need to remove from HTTP_PORT variable in .env.

Please don't rename the services inside docker-compose.yml unless you know what you're doing. Web container expects application container to be named app, if you rename it and it's not accessible via Docker DNS as http://app you will run into 502 errors on startup.

Build and start the container

docker-compose up --build -d

See docker-compose documentation for more information and available options.

Login credentials

You can set both internal 'admin' user password or, alternatively, create a separate user with necessary permissions on first launch through the environment, see .env-dist for more information.


Restarting the container will update tt-rss from the origin repository. If database needs to be updated, tt-rss will prompt you to do so on next page refresh. Normally this happens automatically on container startup.

Updating container scripts

Latest tt-rss source code expects latest container scripts and vice versa. Updating both is a good idea.

  1. Stop the containers: docker-compose down && docker-compose rm
  2. Update scripts from git: git pull origin master and apply any necessary modifications to .env, etc.
  3. Rebuild and start the containers: docker-compose up --build

Suggestions / bug reports