selfhostedworld.com logoselfhostedworld.com

Try describing what you need:

NewsBlur logo

NewsBlur

★ 7.7k
MIT LicenseOpen Core — Some Features Paid12 Containers — 12 containers — heavy hosting footprintDocker · Compose · SourceNeeds Postgres1+ active committer (12mo)

About

NewsBlur is a personal news reader built around RSS feeds, content filtering, and social sharing. It is aimed at people who want a more intelligent way to follow news sources, manage large numbers of...

Community Ratings

No ratings yet

Features

  • Real-time RSS
  • Original site view
  • Training classifiers
  • Shared stories
  • Full-text search
  • Story tagging
  • Blurblog privacy
  • Saved searches
  • Email newsletters
  • Multiple layouts

Details

Last Updated
Oct 14, 2026
Created
Jan 5, 2009
Install Methods
dockerdocker-composesource
Requirements
DockerDocker ComposePostgreSQLMongoDBRedisElasticsearch (optional)CeleryNode.jsPython 3.7+
Authentication
oauthlocal
API
REST
Backup & Export
file-backupdatabase-dump
Runtime / Stack
Python
Privacy & Independence
Cloud: Optional
User Model
Multi-User
Deployment

Deployment: Docker Compose ✓12 Containers — heavy hosting footprintRuns as 12 containers

Run NewsBlur with Docker Compose

Compose file from the NewsBlur project repository.

12 services · database: postgres · infra: nginx, postgres, redis, elasticsearch, mongo, haproxy · 2 unclassified (imageproxy, dejavu)

≈2.0 GB RAM requested (from Docker memory limits)

needs persistent storage (17 volumes)

docker-compose.yml · @ 84f2eed · scanned Sep 24, 2026

services:
  newsblur_web:
    hostname: nb.com
    container_name: newsblur_web
    image: newsblur/newsblur_${NEWSBLUR_BASE:-python3}:latest
    build:
      context: .
      dockerfile: docker/newsblur_base_image.Dockerfile
    # user: "${CURRENT_UID}:${CURRENT_GID}"
    environment:
      - DOCKERBUILD=True
      - RUNWITHMAKEBUILD=${RUNWITHMAKEBUILD:-True}
    stdin_open: true
    tty: true
    restart: unless-stopped
    depends_on:
      - newsblur_db_mongo
      - newsblur_db_postgres
      - newsblur_db_redis
      - newsblur_db_elasticsearch
    ulimits:
      nproc: 10000
      nofile:
        soft: 10000
        hard: 10000
    ports:
      - 8000:8000
    # only use gunicorn if the TEST env variable is not "True"
    entrypoint: /bin/sh -c newsblur_web/entrypoint.sh
    volumes:
      - ${PWD}:/srv/newsblur

  newsblur_node:
    container_name: newsblur_node
    image: newsblur/newsblur_node:latest
    user: "${CURRENT_UID:-1000}:${CURRENT_GID:-1000}"
    environment:
      - NODE_ENV=docker
      - MONGODB_PORT=29019
    command: node newsblur.js
    restart: unless-stopped
    stop_signal: HUP
    depends_on:
      - newsblur_db_mongo
      - newsblur_db_postgres
      - newsblur_db_redis
    ports:
      - 8008:8008
    volumes:
      - ${PWD}/node:/srv
      - ${PWD}/node/originals:/srv/originals

  imageproxy:
    container_name: newsblur_imageproxy
    # image: ghcr.io/willnorris/imageproxy:latest # Enable if you don't need arm64 and want the original imageproxy
    image: yusukeito/imageproxy:v0.11.2 # Enable if you want arm64
    user: "${CURRENT_UID:-1000}:${CURRENT_GID:-1000}"
    entrypoint: /app/imageproxy -addr 0.0.0.0:8088 -cache /tmp/imageproxy -verbose
    restart: unless-stopped
    ports:
      - 8088:8088
    volumes:
      - /tmp:/tmp/imageproxy

  nginx:
    container_name: newsblur_nginx
    image: nginx:1.19.6
    restart: unless-stopped
    ports:
      - 81:81
    depends_on:
      - newsblur_web
      - newsblur_node
      - newsblur_db_postgres
      - newsblur_db_redis
      - newsblur_db_mongo
      - newsblur_db_elasticsearch
    environment:
      - DOCKERBUILD=True
    volumes:
      - ./docker/nginx/nginx.local.conf:/etc/nginx/conf.d/nginx.conf
      - ${PWD}:/srv/newsblur

  newsblur_db_postgres:
    container_name: newsblur_db_postgres
    image: postgres:13.1
    restart: unless-stopped
    environment:
      - POSTGRES_USER=newsblur
      - POSTGRES_PASSWORD=newsblur
    # healthcheck:
    #   test: ["CMD-SHELL", "pg_isready -U newsblur"]
    #   interval: 10s
    #   timeout: 5s
    #   retries: 5
    ports:
      - 5434:5432
    volumes:
      - ./docker/volumes/postgres:/var/lib/postgresql/data

  newsblur_db_redis:
    container_name: newsblur_db_redis
    image: redis:latest
    ports:
      - 6579:6579
    restart: unless-stopped
    volumes:
      - ./docker/redis/redis.conf:/etc/redis/redis.conf
      - ./docker/redis/redis_server.conf:/usr/local/etc/redis/redis_replica.conf
      - ./docker/volumes/redis:/data
    command: redis-server /etc/redis/redis.conf --port 6579

  # Prod Redis
  # db_redis:
  #   container_name: db_redis
  #   image: redis:latest
  #   ports:
  #     - 6579:6579
  #   restart: unless-stopped
  #   volumes:
  #     - ./docker/redis/redis.conf:/etc/redis/redis.conf
  #     - ./docker/redis/redis_server.conf:/usr/local/etc/redis/redis_replica.conf
  #     - ./docker/volumes/redis_prod:/data
  #   command: redis-server /etc/redis/redis.conf --port 6579

  newsblur_db_elasticsearch:
    container_name: newsblur_db_elasticsearch
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    mem_limit: 2g
    mem_reservation: 512m
    restart: unless-stopped
    environment:
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms384m -Xmx384m -XX:UseSVE=0"
      - "CLI_JAVA_OPTS=-XX:UseSVE=0"
      - cluster.routing.allocation.disk.threshold_enabled=false
      - xpack.security.enabled=false
      - bootstrap.memory_lock=false
      - indices.breaker.total.use_real_memory=false
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - ./docker/volumes/elasticsearch:/usr/share/elasticsearch/data
      - ./config/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

  # Dejavu is a web UI for Elasticsearch
  dejavu:
    container_name: newsblur_dejavu
    image: appbaseio/dejavu:3.6.0
    restart: unless-stopped
    ports:
      - 1358:1358

  newsblur_db_mongo:
    container_name: newsblur_db_mongo
    image: mongo:4.0
    restart: unless-stopped
    ports:
      - 29019:29019
    command: mongod --port 29019 --wiredTigerEngineConfigString="checkpoint=(wait=60),file_manager=(close_idle_time=0)"
    volumes:
      - ./docker/volumes/db_mongo:/data/db:delegated

  task_celery:
    container_name: newsblur_celery
    image: newsblur/newsblur_python3
    user: "${CURRENT_UID:-1000}:${CURRENT_GID:-1000}"
    command: "celery worker -A newsblur_web -B --loglevel=INFO"
    restart: unless-stopped
    volumes:
      - ${PWD}:/srv/newsblur
    environment:
      - DOCKERBUILD=True

  newsblur_mcp:
    container_name: newsblur_mcp
    build:
      context: ./newsblur_mcp
    restart: unless-stopped
    environment:
      - PYTHONPATH=/srv/newsblur_mcp
      - NEWSBLUR_BASE_URL=http://newsblur_web:8000
      - MCP_PORT=8099
      - MCP_HOST=0.0.0.0
      - MCP_OAUTH_CLIENT_ID=newsblur-mcp-server
      - MCP_OAUTH_CLIENT_SECRET=newsblur-mcp-dev-secret
      - MCP_OAUTH_BASE_URL=http://localhost/mcp
      - MCP_OAUTH_UPSTREAM_URL=http://localhost
      - MCP_OAUTH_INTERNAL_URL=http://newsblur_web:8000
      - MCP_REDIS_URL=redis://newsblur_db_redis:6579/5
    volumes:
      - ${PWD}/newsblur_mcp/newsblur_mcp:/srv/newsblur_mcp/newsblur_mcp
    depends_on:
      - newsblur_web

  haproxy:
    container_name: newsblur_haproxy
    image: haproxy:latest
    restart: unless-stopped
    depends_on:
      - nginx
      - newsblur_web
      - newsblur_node
      - imageproxy
      - newsblur_db_redis
      - newsblur_db_postgres
      - newsblur_db_elasticsearch
      - newsblur_db_mongo
    ports:
      - 80:80
      - 443:443
      - 1936:1936
    volumes:
      - ./docker/haproxy/haproxy.docker-compose.cfg:/usr/local/etc/haproxy/haproxy.cfg
      - ${PWD}:/srv/newsblur

This file may be out of date. Check the NewsBlur documentation for current setup steps.

Track your self-hosted stack

Bookmark software to try, rate tools you've used, and keep your collection in one place.

Metadata extracted from README on Jul 30, 2026

Related Software

Haven logo

Haven

811
Haven is a private blog application built with Ruby on Rails that supports sharing with selected people and includes a built-in RSS reader.
Blogging PlatformsPermissive LicenseRSS Feed Readers+2
2 Containers
Details
fx logo

fx

328
A self-hosted Twitter/Bluesky-like microblogging service.
Blogging PlatformsPermissive LicenseSocial Networks+3
Details
Huginn logo

Huginn

50.1k
Huginn is a self-hosted automation system for building agents that monitor online events and perform actions on your behalf.
Automation ToolsPermissive LicenseAI Agents+3
4 Containers
Details
FreshRSS logo

FreshRSS

16.3k
FreshRSS is a self-hosted RSS feed aggregator with multi-user support, an API, and a command-line interface.
RSS Feed ReadersCopyleft LicenseSelf Hosting Solutions+2
Single Container
Details
RSSHub logo

RSSHub

46.5k
RSSHub is a large open source RSS network that aggregates content from many sources into RSS feeds.
RSS Feed ReadersPermissive LicenseSelf Hosting Solutions+1
3 Containers
Details
RSS-Bridge logo

RSS-Bridge

9.3k
RSS-Bridge is a PHP web application that generates RSS/Atom-style web feeds for websites that do not provide one.
RSS Feed ReadersPermissive LicenseSelf Hosting Solutions+2
Single Container
Details
Miniflux logo

Miniflux

9.8k
A minimalist, opinionated feed reader for RSS, Atom, and JSON Feed.
RSS Feed ReadersSelf Hosting SolutionsBookmark Management+2
Details
CommaFeed logo

CommaFeed

3.6k
A self-hosted RSS reader inspired by Google Reader.
RSS Feed ReadersSelf Hosting SolutionsPermissive License
Details
Yarr logo

Yarr

4.1k
yarr is a web-based RSS feed aggregator for desktop use or self-hosting.
RSS Feed ReadersPermissive LicenseSelf Hosting Solutions+1
2 Containers
Details
Glance logo

Glance

37.5k
Glance is a lightweight, highly customizable dashboard for displaying feeds and widgets in a streamlined interface.
Personal DashboardsRSS Feed ReadersCopyleft License+1
Details
Cypht logo

Cypht

1.8k
Cypht is a webmail and news reader that combines email from multiple accounts into one interface.
Webmail ClientsRSS Feed ReadersSelf Hosting Solutions+1
Details
Stringer logo

Stringer

4.1k
Stringer is a self-hosted RSS reader with keyboard shortcuts and Fever API compatibility.
RSS Feed ReadersSelf Hosting SolutionsPermissive License
Details