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.
- Authorization: Google and Guest (for try service or local / self-hosted using)
- Infinite news feed (while added news from channels in user feed exists)
- Receiving news feed in parts (10 news)
- Favorites (add/remove)
- Channels (add/edit/change visible in feed/remove)
- PWA functional with offline mode (request caching)
- Automatic background fetch new news from channels and push to user feed for active accounts
- Redis distributed cache (cache remotes channels)
- 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
All configuration may be configured in appsettings.json
or in Environment variables
Authentication:Google:ClientSecret
- client id in googleAuthentication:Google:ClientId
- client secret in google
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
FeedCrawler:Enabled
- enable background channels fetch (default:true
). In the future, can be disabled in api, and enabled in external workerFeedCrawler: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))
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