A primitive set of scripts to deploy tt-rss via docker-compose

krimil 32bd22435f Remove cron update script, add updater service 1 month ago
app 32bd22435f Remove cron update script, add updater service 1 month ago
web 0d5684ff4c switch to caddy from nginx 3 months ago
web-ssl 0d5684ff4c switch to caddy from nginx 3 months ago
.env-dist 0168b8e689 clarify what HTTP_HOST does in .env-dist 1 month ago
.gitignore 9b0a93677d 1. move .env to .env-dist so local customization is not clashing with the 1 month ago
README.md 49ef37c4b4 update README.md 1 month ago
docker-compose.yml 32bd22435f Remove cron update script, add updater service 1 month ago

README.md

A primitive set of scripts to deploy tt-rss via docker-compose

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

Not fully tested yet, don't use in production unless you know what you're doing. Some features may be unimplemented or broken, check the TODO.

The general outline of the configuration is as follows:

  • three linked containers (frontend: caddy, database: pgsql, application: php/fpm)
  • caddy has its http port exposed to the outside
  • feed updating is done via embedded cron job, every 15 minutes
  • tt-rss source updates from git master repository on container restart
  • schema is installed automatically if it is missing
  • config.php is generated if it is missing
  • SSL termination not included, use a sidecar container for that (TODO)
  • tt-rss code is stored on a persistent volume so plugins, etc. could be easily added

Installation

Check out scripts from Git:

git clone https://git.tt-rss.org/fox/ttrss-docker-compose.git ttrss-docker && cd ttrss-docker

Edit configuration files:

Copy .env-dist to .env and edit any relevant variables you need changed.

  • You will likely have to change 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.

Note: SELF_URL_PATH is updated in generated tt-rss config.php automatically on container restart. You don't need to modify config.php manually for this.

  • By default, 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 127.0.0.1: from HTTP_PORT variable in .env.

Build and start the container

docker-compose up --build

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

Updating

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.

Updating container scripts

  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

Using SSL with Letsencrypt (untested!)

  • HTTP_HOST in .env should be set to a valid hostname (i.e. no localhost or IP address)
  • comment out web container, uncomment web-ssl in docker-compose.yml
  • ports 80 and 443 should be externally accessible i.e. not blocked by firewall and/or conflicting with host services

How do I add plugins and themes?

By default, tt-rss code is stored on a persistent docker volume (app). You can find its location like this:

docker volume inspect ttrss-docker_app | grep Mountpoint

Alternatively, you can mount any host directory as /var/www/html by updating docker-compose.yml, i.e.:

volumes:
      - app:/var/www/html

Replace with:

volumes:
      - /opt/tt-rss:/var/www/html

Copy and/or git clone any third party plugins into plugins.local as usual.

How do I put this container behind a reverse proxy?

A common pattern is shared nginx doing SSL termination, etc.

   location /tt-rss/ {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header X-Forwarded-Proto $scheme;

      proxy_pass http://127.0.0.1:8280/tt-rss/;
      break;
   }

You will need to set SELF_URL_PATH to a correct (i.e. visible from the outside) value in the .env file.

TODO

Suggestions / bug reports