docker.recipes

FreshRSS Feed Reader

beginner

Self-hosted RSS feed aggregator with web interface.

Overview

FreshRSS is a powerful, self-hosted RSS and Atom feed aggregator that allows users to stay updated with their favorite websites and blogs through a clean, web-based interface. Originally developed as an open-source alternative to Google Reader, FreshRSS provides advanced features like feed categorization, article filtering, full-text search, and keyboard shortcuts for efficient news consumption. Built with PHP and designed for privacy-conscious users, it keeps all your reading data under your control while offering a responsive design that works across desktop and mobile devices. This deployment combines FreshRSS with a PostgreSQL database backend, creating a robust and scalable feed reading platform. The freshrss service runs the main application server with automated feed fetching via cron jobs, while the db service provides PostgreSQL 15 for reliable data storage of feeds, articles, and user preferences. The configuration includes persistent volumes for both application data and database storage, ensuring your feeds and reading history survive container updates. This stack is ideal for individuals, families, or small teams who want to centralize their news consumption without relying on third-party services. The PostgreSQL backend makes it particularly suitable for users with large numbers of feeds or those who require advanced querying capabilities for article management. With support for OPML import/export and mobile app connectivity, this deployment serves as a complete replacement for commercial feed readers while maintaining full data ownership.

Key Features

  • Advanced feed management with categories, tags, and automatic duplicate detection
  • Full-text search across all articles with PostgreSQL's powerful indexing capabilities
  • Automated feed refreshing with configurable cron schedule (1,31 minutes by default)
  • OPML import/export for easy migration from other feed readers like Google Reader or Feedly
  • Multi-user support with individual reading preferences and feed subscriptions
  • API access for integration with mobile apps like EasyRSS or FeedMe
  • Article filtering and labeling system for organizing content by keywords or sources
  • Keyboard shortcuts and reading view customization for power users

Common Use Cases

  • 1Personal news aggregation for staying updated with tech blogs, news sites, and industry publications
  • 2Small team knowledge sharing by subscribing to relevant industry feeds and sharing articles
  • 3Research workflow management for academics tracking multiple journal RSS feeds and publication updates
  • 4Content curation for bloggers and writers who need to monitor competitor and inspiration sources
  • 5Privacy-focused news consumption for users wanting to avoid tracking by commercial feed readers
  • 6Family news hub for sharing and organizing feeds from local news, school updates, and hobby sites
  • 7Developer productivity tool for following GitHub releases, documentation updates, and programming blogs

Prerequisites

  • Docker and Docker Compose installed on the host system
  • Minimum 512MB RAM available (1GB recommended for PostgreSQL performance)
  • Port 8080 available for the FreshRSS web interface
  • Database password configured in environment variables or .env file
  • At least 2GB free disk space for application data and article storage
  • Basic understanding of RSS/Atom feeds and OPML format for feed management

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 freshrss:
3 image: freshrss/freshrss:latest
4 container_name: freshrss
5 environment:
6 - TZ=UTC
7 - CRON_MIN=1,31
8 volumes:
9 - freshrss-data:/var/www/FreshRSS/data
10 - freshrss-extensions:/var/www/FreshRSS/extensions
11 ports:
12 - "8080:80"
13 depends_on:
14 - db
15 networks:
16 - freshrss-network
17 restart: unless-stopped
18
19 db:
20 image: postgres:15-alpine
21 container_name: freshrss-db
22 environment:
23 - POSTGRES_USER=freshrss
24 - POSTGRES_PASSWORD=${DB_PASSWORD}
25 - POSTGRES_DB=freshrss
26 volumes:
27 - postgres-data:/var/lib/postgresql/data
28 networks:
29 - freshrss-network
30 restart: unless-stopped
31
32volumes:
33 freshrss-data:
34 freshrss-extensions:
35 postgres-data:
36
37networks:
38 freshrss-network:
39 driver: bridge

.env Template

.env
1# FreshRSS
2DB_PASSWORD=secure_freshrss_password

Usage Notes

  1. 1Web UI at http://localhost:8080
  2. 2Complete setup wizard
  3. 3Import OPML feeds
  4. 4Mobile apps available
  5. 5API for external clients

Individual Services(2 services)

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

freshrss
freshrss:
  image: freshrss/freshrss:latest
  container_name: freshrss
  environment:
    - TZ=UTC
    - CRON_MIN=1,31
  volumes:
    - freshrss-data:/var/www/FreshRSS/data
    - freshrss-extensions:/var/www/FreshRSS/extensions
  ports:
    - "8080:80"
  depends_on:
    - db
  networks:
    - freshrss-network
  restart: unless-stopped
db
db:
  image: postgres:15-alpine
  container_name: freshrss-db
  environment:
    - POSTGRES_USER=freshrss
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_DB=freshrss
  volumes:
    - postgres-data:/var/lib/postgresql/data
  networks:
    - freshrss-network
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 freshrss:
5 image: freshrss/freshrss:latest
6 container_name: freshrss
7 environment:
8 - TZ=UTC
9 - CRON_MIN=1,31
10 volumes:
11 - freshrss-data:/var/www/FreshRSS/data
12 - freshrss-extensions:/var/www/FreshRSS/extensions
13 ports:
14 - "8080:80"
15 depends_on:
16 - db
17 networks:
18 - freshrss-network
19 restart: unless-stopped
20
21 db:
22 image: postgres:15-alpine
23 container_name: freshrss-db
24 environment:
25 - POSTGRES_USER=freshrss
26 - POSTGRES_PASSWORD=${DB_PASSWORD}
27 - POSTGRES_DB=freshrss
28 volumes:
29 - postgres-data:/var/lib/postgresql/data
30 networks:
31 - freshrss-network
32 restart: unless-stopped
33
34volumes:
35 freshrss-data:
36 freshrss-extensions:
37 postgres-data:
38
39networks:
40 freshrss-network:
41 driver: bridge
42EOF
43
44# 2. Create the .env file
45cat > .env << 'EOF'
46# FreshRSS
47DB_PASSWORD=secure_freshrss_password
48EOF
49
50# 3. Start the services
51docker compose up -d
52
53# 4. View logs
54docker 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/freshrss-reader/run | bash

Troubleshooting

  • Database connection failed during setup: Ensure DB_PASSWORD environment variable is set and matches between freshrss and db services
  • Feeds not updating automatically: Check that CRON_MIN environment variable is properly configured and container has sufficient resources
  • PostgreSQL container fails to start: Verify postgres-data volume permissions and ensure no other PostgreSQL instances are using default ports
  • FreshRSS interface shows database errors: Wait for PostgreSQL to fully initialize before accessing the web UI, or restart the freshrss container
  • Cannot import OPML file: Ensure the OPML file is valid XML and doesn't exceed PHP upload limits in the FreshRSS configuration
  • Mobile app cannot connect to API: Verify that API access is enabled in FreshRSS settings and authentication tokens are properly configured

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