Skip to content
/ Influunt Public

Simple aggregator of rss news feeds. Implements a single news feed, with the ability to save posts to favorites, for further reading or as a note about an interesting article.

License

Notifications You must be signed in to change notification settings

AMEST/Influunt

Repository files navigation

CI hub.docker.com GitHub release (latest by date) GitHub

Influunt - rss agregator

Links

Description

Simple aggregator of rss news feeds. Implements a single news feed, with the ability to save posts to favorites, for further reading or as a note about an interesting article.
In order to use the service, you need to log in (so that the user can add his channels and refer to selected articles). Authorization via Google is implemented as standard, but if the self hosted option does not suit you, you can safely replace it with another provider.

Features

  1. Authorization: Google and Guest (for try service or local / self-hosted using)
  2. Infinite news feed (while added news from channels in user feed exists)
  3. Receiving news feed in parts (10 news)
  4. Favorites (add/remove)
  5. Channels (add/edit/change visible in feed/remove)
  6. PWA functional with offline mode (request caching)
  7. Automatic background fetch new news from channels and push to user feed for active accounts
  8. Redis distributed cache (cache remotes channels)

Self-hosted Requirements

  • MongoDB - For storing user data (channels, favorites) and for aspnet core secure storage.
  • AspNet Core 3.1 runtime or Docker for service start
  • Optional reverse proxy for https connection

Configurations

All configuration may be configured in appsettings.json or in Environment variables

Authentication

  • Authentication:Google:ClientSecret - client id in google
  • Authentication:Google:ClientId - client secret in google

Database

Influunt use MongoDB as persistent data storage and Redis for faster distributed cache.

  • ConnectionStrings:Mongo:ConnectionString - mongo connection string (example: mongodb://app:password@localhost/influunt?authSource=admin)
  • ConnectionStrings:Redis:ConnectionString - connection string for Redis cache type

Feed

  • FeedCrawler:Enabled - enable background channels fetch (default: true). In the future, can be disabled in api, and enabled in external worker
  • FeedCrawler:FetchInterval - interval between fetching news from channels (default: 00:30:00 (30min))
  • FeedCrawler:LastActivityDaysAgo - Minimal user last activity date, for fetch news. If user don't use service more then n days, don't fetch news from user channel (default 93 days (~3 month))

Screenshots

Welcome Feed
Favorites Channels

Using in docker

Docker compose file for swarm mode:

version: '3.8'

services:
  host:
    image: eluki/influunt
    environment:
      - "ConnectionStrings:Mongo:ConnectionString=[MONGO DB CONNECTION STRING]"
      - "ConnectionStrings:Redis:ConnectionString=[Redis address]" # optional redis-based distributed cache connection
      - "Authentication:Google:ClientSecret=[GOOGLE CLIENT SECRET]"
      - "Authentication:Google:ClientId=[GOOGLE CLIENT ID]"
    ports:
     - target: 80
       published: 30002
       protocol: tcp
       mode: host
    deploy:
      replicas: 1
    logging:
      driver: "json-file"
      options:
        max-size: "3m"
        max-file: "3"

Run stack:

docker stack deploy -c deploy.yml influunt

Docker run:

docker run -d \
           -p 30002:80 \
           -e "ConnectionStrings:Mongo:ConnectionString=[MONGO DB CONNECTION STRING]" \
           -e "Authentication:Google:ClientSecret=[GOOGLE CLIENT SECRET]" \
           -e "Authentication:Google:ClientId=[GOOGLE CLIENT ID]" \
           -e "ConnectionStrings:Redis:ConnectionString=[Redis address]" \
           --restart always \
           --name influunt \
           eluki/influunt