docker.recipes

Tiny Tiny RSS

intermediate

Web-based news feed reader and aggregator.

Overview

Tiny Tiny RSS (tt-rss) is a self-hosted, web-based RSS/Atom feed reader and aggregator that provides a clean, customizable interface for managing news feeds and articles. Originally developed as an alternative to Google Reader, tt-rss offers features like feed categorization, article filtering, plugin support, and mobile synchronization, making it a popular choice for users seeking privacy-focused news consumption without relying on external services. This deployment consists of three interconnected services: the main tt-rss web application running on PHP-FPM with static content serving, a dedicated ttrss-updater service that handles background feed updates and maintenance tasks, and a PostgreSQL database for storing feeds, articles, and user data. The updater runs continuously to fetch new content from subscribed feeds, ensuring articles are available when users access the web interface. This configuration is ideal for privacy-conscious individuals, news enthusiasts, and small teams who want complete control over their RSS consumption without depending on third-party services. The separation of the updater from the main application ensures reliable feed processing while maintaining responsive web performance, making it suitable for both personal use and small organizational deployments.

Key Features

  • Dual-service architecture with separate web interface and background feed updater for optimal performance
  • PostgreSQL backend providing robust data integrity and advanced querying capabilities for feed management
  • Plugin ecosystem supporting custom filters, themes, and third-party integrations
  • Mobile application support with synchronization API for iOS and Android clients
  • Advanced feed filtering with keyword-based rules, regular expressions, and automatic tagging
  • Multi-user support with individual preferences, sharing capabilities, and access controls
  • OPML import/export functionality for easy migration from other feed readers
  • Built-in article archiving and search with full-text indexing through PostgreSQL

Common Use Cases

  • 1Personal RSS aggregation for tracking blogs, news sites, and technical publications
  • 2Small team knowledge sharing with curated feeds and article recommendations
  • 3News monitoring and research with advanced filtering and categorization
  • 4Privacy-focused alternative to commercial feed readers like Feedly or Inoreader
  • 5Corporate internal news aggregation for industry updates and competitor monitoring
  • 6Academic research with RSS feeds from journals, preprint servers, and conference sites
  • 7Content curation workflow for bloggers and content creators tracking source material

Prerequisites

  • Docker and Docker Compose installed with at least 1GB available RAM for PostgreSQL
  • Port 8080 available for the tt-rss web interface
  • Environment variables configured: DB_PASSWORD and TTRSS_URL for your domain
  • Basic understanding of RSS/Atom feeds and feed URL formats
  • Web browser with JavaScript enabled for the full tt-rss interface experience
  • SSL certificate and reverse proxy setup recommended for production deployments

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 ttrss:
3 image: cthulhoo/ttrss-fpm-pgsql-static:latest
4 container_name: ttrss
5 environment:
6 - TTRSS_DB_HOST=db
7 - TTRSS_DB_NAME=ttrss
8 - TTRSS_DB_USER=ttrss
9 - TTRSS_DB_PASS=${DB_PASSWORD}
10 - TTRSS_SELF_URL_PATH=${TTRSS_URL}
11 volumes:
12 - ttrss-data:/var/www/html
13 ports:
14 - "8080:80"
15 depends_on:
16 - db
17 networks:
18 - ttrss-network
19 restart: unless-stopped
20
21 ttrss-updater:
22 image: cthulhoo/ttrss-fpm-pgsql-static:latest
23 container_name: ttrss-updater
24 command: /opt/tt-rss/updater.sh
25 environment:
26 - TTRSS_DB_HOST=db
27 - TTRSS_DB_NAME=ttrss
28 - TTRSS_DB_USER=ttrss
29 - TTRSS_DB_PASS=${DB_PASSWORD}
30 volumes:
31 - ttrss-data:/var/www/html
32 depends_on:
33 - ttrss
34 networks:
35 - ttrss-network
36 restart: unless-stopped
37
38 db:
39 image: postgres:15-alpine
40 container_name: ttrss-db
41 environment:
42 - POSTGRES_USER=ttrss
43 - POSTGRES_PASSWORD=${DB_PASSWORD}
44 - POSTGRES_DB=ttrss
45 volumes:
46 - postgres-data:/var/lib/postgresql/data
47 networks:
48 - ttrss-network
49 restart: unless-stopped
50
51volumes:
52 ttrss-data:
53 postgres-data:
54
55networks:
56 ttrss-network:
57 driver: bridge

.env Template

.env
1# Tiny Tiny RSS
2TTRSS_URL=http://localhost:8080/tt-rss
3DB_PASSWORD=secure_ttrss_password

Usage Notes

  1. 1Web UI at http://localhost:8080/tt-rss
  2. 2Default login: admin / password
  3. 3Change password immediately
  4. 4Plugin ecosystem
  5. 5Mobile apps available

Individual Services(3 services)

Copy individual services to mix and match with your existing compose files.

ttrss
ttrss:
  image: cthulhoo/ttrss-fpm-pgsql-static:latest
  container_name: ttrss
  environment:
    - TTRSS_DB_HOST=db
    - TTRSS_DB_NAME=ttrss
    - TTRSS_DB_USER=ttrss
    - TTRSS_DB_PASS=${DB_PASSWORD}
    - TTRSS_SELF_URL_PATH=${TTRSS_URL}
  volumes:
    - ttrss-data:/var/www/html
  ports:
    - "8080:80"
  depends_on:
    - db
  networks:
    - ttrss-network
  restart: unless-stopped
ttrss-updater
ttrss-updater:
  image: cthulhoo/ttrss-fpm-pgsql-static:latest
  container_name: ttrss-updater
  command: /opt/tt-rss/updater.sh
  environment:
    - TTRSS_DB_HOST=db
    - TTRSS_DB_NAME=ttrss
    - TTRSS_DB_USER=ttrss
    - TTRSS_DB_PASS=${DB_PASSWORD}
  volumes:
    - ttrss-data:/var/www/html
  depends_on:
    - ttrss
  networks:
    - ttrss-network
  restart: unless-stopped
db
db:
  image: postgres:15-alpine
  container_name: ttrss-db
  environment:
    - POSTGRES_USER=ttrss
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_DB=ttrss
  volumes:
    - postgres-data:/var/lib/postgresql/data
  networks:
    - ttrss-network
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 ttrss:
5 image: cthulhoo/ttrss-fpm-pgsql-static:latest
6 container_name: ttrss
7 environment:
8 - TTRSS_DB_HOST=db
9 - TTRSS_DB_NAME=ttrss
10 - TTRSS_DB_USER=ttrss
11 - TTRSS_DB_PASS=${DB_PASSWORD}
12 - TTRSS_SELF_URL_PATH=${TTRSS_URL}
13 volumes:
14 - ttrss-data:/var/www/html
15 ports:
16 - "8080:80"
17 depends_on:
18 - db
19 networks:
20 - ttrss-network
21 restart: unless-stopped
22
23 ttrss-updater:
24 image: cthulhoo/ttrss-fpm-pgsql-static:latest
25 container_name: ttrss-updater
26 command: /opt/tt-rss/updater.sh
27 environment:
28 - TTRSS_DB_HOST=db
29 - TTRSS_DB_NAME=ttrss
30 - TTRSS_DB_USER=ttrss
31 - TTRSS_DB_PASS=${DB_PASSWORD}
32 volumes:
33 - ttrss-data:/var/www/html
34 depends_on:
35 - ttrss
36 networks:
37 - ttrss-network
38 restart: unless-stopped
39
40 db:
41 image: postgres:15-alpine
42 container_name: ttrss-db
43 environment:
44 - POSTGRES_USER=ttrss
45 - POSTGRES_PASSWORD=${DB_PASSWORD}
46 - POSTGRES_DB=ttrss
47 volumes:
48 - postgres-data:/var/lib/postgresql/data
49 networks:
50 - ttrss-network
51 restart: unless-stopped
52
53volumes:
54 ttrss-data:
55 postgres-data:
56
57networks:
58 ttrss-network:
59 driver: bridge
60EOF
61
62# 2. Create the .env file
63cat > .env << 'EOF'
64# Tiny Tiny RSS
65TTRSS_URL=http://localhost:8080/tt-rss
66DB_PASSWORD=secure_ttrss_password
67EOF
68
69# 3. Start the services
70docker compose up -d
71
72# 4. View logs
73docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/tt-rss-reader/run | bash

Troubleshooting

  • tt-rss shows database connection errors: Verify DB_PASSWORD matches between ttrss and db services, ensure database container is running
  • Feeds not updating automatically: Check ttrss-updater container logs with 'docker logs ttrss-updater', restart updater service if stuck
  • Login fails with admin/password: Database may not be initialized, restart ttrss service and wait for schema creation
  • Articles not loading or interface broken: Verify TTRSS_SELF_URL_PATH matches your actual access URL including protocol and port
  • PostgreSQL container fails to start: Check postgres-data volume permissions, ensure no port 5432 conflicts with existing PostgreSQL installations
  • Plugin installation fails: Ensure ttrss-data volume is properly mounted and writable, check plugin compatibility with tt-rss version

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space