FreshRSS Feed Reader
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:latest4 container_name: freshrss5 environment: 6 - TZ=UTC7 - CRON_MIN=1,318 volumes: 9 - freshrss-data:/var/www/FreshRSS/data10 - freshrss-extensions:/var/www/FreshRSS/extensions11 ports: 12 - "8080:80"13 depends_on: 14 - db15 networks: 16 - freshrss-network17 restart: unless-stopped1819 db: 20 image: postgres:15-alpine21 container_name: freshrss-db22 environment: 23 - POSTGRES_USER=freshrss24 - POSTGRES_PASSWORD=${DB_PASSWORD}25 - POSTGRES_DB=freshrss26 volumes: 27 - postgres-data:/var/lib/postgresql/data28 networks: 29 - freshrss-network30 restart: unless-stopped3132volumes: 33 freshrss-data: 34 freshrss-extensions: 35 postgres-data: 3637networks: 38 freshrss-network: 39 driver: bridge.env Template
.env
1# FreshRSS2DB_PASSWORD=secure_freshrss_passwordUsage Notes
- 1Web UI at http://localhost:8080
- 2Complete setup wizard
- 3Import OPML feeds
- 4Mobile apps available
- 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 file2cat > docker-compose.yml << 'EOF'3services:4 freshrss:5 image: freshrss/freshrss:latest6 container_name: freshrss7 environment:8 - TZ=UTC9 - CRON_MIN=1,3110 volumes:11 - freshrss-data:/var/www/FreshRSS/data12 - freshrss-extensions:/var/www/FreshRSS/extensions13 ports:14 - "8080:80"15 depends_on:16 - db17 networks:18 - freshrss-network19 restart: unless-stopped2021 db:22 image: postgres:15-alpine23 container_name: freshrss-db24 environment:25 - POSTGRES_USER=freshrss26 - POSTGRES_PASSWORD=${DB_PASSWORD}27 - POSTGRES_DB=freshrss28 volumes:29 - postgres-data:/var/lib/postgresql/data30 networks:31 - freshrss-network32 restart: unless-stopped3334volumes:35 freshrss-data:36 freshrss-extensions:37 postgres-data:3839networks:40 freshrss-network:41 driver: bridge42EOF4344# 2. Create the .env file45cat > .env << 'EOF'46# FreshRSS47DB_PASSWORD=secure_freshrss_password48EOF4950# 3. Start the services51docker compose up -d5253# 4. View logs54docker compose logs -fOne-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 | bashTroubleshooting
- 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
Components
freshrsspostgresql
Tags
#rss#freshrss#feed-reader#news#aggregator
Category
Productivity & CollaborationAd Space
Shortcuts: C CopyF FavoriteD Download