docker.recipes

Miniflux Feed Reader

beginner

Minimalist and opinionated RSS reader.

Overview

Miniflux is a minimalist, open-source RSS and Atom feed reader written in Go, designed with a philosophy of simplicity and efficiency. Created by Frédéric Guillot, it prioritizes speed, security, and a clean user interface over feature bloat, making it an excellent choice for users who want a straightforward feed reading experience without unnecessary complexity. Miniflux supports modern web standards, keyboard shortcuts for power users, and includes API compatibility with popular feed reader protocols. This deployment configuration sets up Miniflux with a dedicated PostgreSQL database backend, creating a two-container architecture that separates the application layer from data persistence. The miniflux service runs the web application and API server, while the db service provides a PostgreSQL 15 Alpine instance specifically configured for Miniflux's data storage needs. The setup includes automatic database migrations and admin user creation, making the initial deployment process streamlined. This stack is ideal for individuals, small teams, or organizations looking for a self-hosted RSS solution that combines simplicity with reliability. The PostgreSQL backend ensures data integrity and performance for users with large numbers of feeds and articles, while the lightweight Miniflux application keeps resource usage minimal. This configuration is perfect for homelab enthusiasts, privacy-conscious users, and teams wanting to maintain control over their feed reading infrastructure.

Key Features

  • Minimalist web interface with focus on readability and speed
  • Built-in Fever API and Google Reader API compatibility for mobile app integration
  • Comprehensive keyboard shortcuts for efficient navigation and article management
  • Automatic HTTPS feed fetching with certificate validation
  • PostgreSQL backend with ACID compliance for reliable article storage and user data
  • Automatic database schema migrations and admin user provisioning
  • Feed autodiscovery and import/export functionality in OPML format
  • Real-time feed updates with configurable refresh intervals

Common Use Cases

  • 1Personal RSS aggregation for news, blogs, and technical publications
  • 2Team knowledge sharing by centralizing industry feeds and updates
  • 3Content curation for research projects requiring systematic information gathering
  • 4Alternative to cloud-based feed readers for privacy-conscious users
  • 5Homelab deployment for self-hosted productivity tools
  • 6Mobile feed reading through Fever API compatible applications
  • 7Backup solution for users wanting to maintain feed reading during service outages

Prerequisites

  • Docker and Docker Compose installed on the host system
  • Minimum 512MB RAM available (PostgreSQL requires 256MB+ and Miniflux needs additional memory)
  • Port 8080 available on the host for web interface access
  • Environment variables configured: ADMIN_USER, ADMIN_PASSWORD, and DB_PASSWORD
  • Basic understanding of RSS/Atom feeds and feed reader concepts
  • Network access for the container to fetch RSS feeds from external sources

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 miniflux:
3 image: miniflux/miniflux:latest
4 container_name: miniflux
5 environment:
6 - DATABASE_URL=postgres://miniflux:${DB_PASSWORD}@db/miniflux?sslmode=disable
7 - RUN_MIGRATIONS=1
8 - CREATE_ADMIN=1
9 - ADMIN_USERNAME=${ADMIN_USER}
10 - ADMIN_PASSWORD=${ADMIN_PASSWORD}
11 ports:
12 - "8080:8080"
13 depends_on:
14 - db
15 networks:
16 - miniflux-network
17 restart: unless-stopped
18
19 db:
20 image: postgres:15-alpine
21 container_name: miniflux-db
22 environment:
23 - POSTGRES_USER=miniflux
24 - POSTGRES_PASSWORD=${DB_PASSWORD}
25 - POSTGRES_DB=miniflux
26 volumes:
27 - postgres-data:/var/lib/postgresql/data
28 networks:
29 - miniflux-network
30 restart: unless-stopped
31
32volumes:
33 postgres-data:
34
35networks:
36 miniflux-network:
37 driver: bridge

.env Template

.env
1# Miniflux
2ADMIN_USER=admin
3ADMIN_PASSWORD=secure_admin_password
4DB_PASSWORD=secure_miniflux_password

Usage Notes

  1. 1Web UI at http://localhost:8080
  2. 2Login with admin credentials
  3. 3Keyboard navigation
  4. 4Fever and Google Reader API
  5. 5Automatic HTTPS fetching

Individual Services(2 services)

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

miniflux
miniflux:
  image: miniflux/miniflux:latest
  container_name: miniflux
  environment:
    - DATABASE_URL=postgres://miniflux:${DB_PASSWORD}@db/miniflux?sslmode=disable
    - RUN_MIGRATIONS=1
    - CREATE_ADMIN=1
    - ADMIN_USERNAME=${ADMIN_USER}
    - ADMIN_PASSWORD=${ADMIN_PASSWORD}
  ports:
    - "8080:8080"
  depends_on:
    - db
  networks:
    - miniflux-network
  restart: unless-stopped
db
db:
  image: postgres:15-alpine
  container_name: miniflux-db
  environment:
    - POSTGRES_USER=miniflux
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_DB=miniflux
  volumes:
    - postgres-data:/var/lib/postgresql/data
  networks:
    - miniflux-network
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 miniflux:
5 image: miniflux/miniflux:latest
6 container_name: miniflux
7 environment:
8 - DATABASE_URL=postgres://miniflux:${DB_PASSWORD}@db/miniflux?sslmode=disable
9 - RUN_MIGRATIONS=1
10 - CREATE_ADMIN=1
11 - ADMIN_USERNAME=${ADMIN_USER}
12 - ADMIN_PASSWORD=${ADMIN_PASSWORD}
13 ports:
14 - "8080:8080"
15 depends_on:
16 - db
17 networks:
18 - miniflux-network
19 restart: unless-stopped
20
21 db:
22 image: postgres:15-alpine
23 container_name: miniflux-db
24 environment:
25 - POSTGRES_USER=miniflux
26 - POSTGRES_PASSWORD=${DB_PASSWORD}
27 - POSTGRES_DB=miniflux
28 volumes:
29 - postgres-data:/var/lib/postgresql/data
30 networks:
31 - miniflux-network
32 restart: unless-stopped
33
34volumes:
35 postgres-data:
36
37networks:
38 miniflux-network:
39 driver: bridge
40EOF
41
42# 2. Create the .env file
43cat > .env << 'EOF'
44# Miniflux
45ADMIN_USER=admin
46ADMIN_PASSWORD=secure_admin_password
47DB_PASSWORD=secure_miniflux_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/miniflux-reader/run | bash

Troubleshooting

  • Database connection failed errors: Verify DB_PASSWORD environment variable matches between miniflux and db services
  • Admin login not working: Ensure ADMIN_USERNAME and ADMIN_PASSWORD are properly set and CREATE_ADMIN=1 is configured
  • Feeds not updating or fetching: Check container logs for SSL/TLS certificate issues and verify network connectivity
  • Port 8080 already in use: Modify the port mapping in docker-compose.yml to use an alternative port like 8081:8080
  • PostgreSQL startup failures: Ensure sufficient disk space is available for the postgres-data volume
  • Migration errors on startup: Delete the postgres-data volume and restart to recreate the database with fresh schema

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