MonitoRSS-Clone Webinterface and Bot

MonitoRSS-Clone

MonitoRSS-Clone

A control panel for the news-delivering MonitoRSS (formerly known as Discord.RSS) bot.

MonitoRSS-Web

Creates a Container which runs synzen’s MonitoRSS-Clone, with lsiobase/alpine as the base image, as seen on https://monitorss.xyz/.

The lsiobase/alpine image is a custom base image built with Alpine linux and S6 overlay. Using this image allows us to use the same user/group ids in the container as on the host, making file transfers much easier

Deployment

TagsDescription
latestUsing the latest tag will pull the latest image for amd64/x86_64 architecture.

Pre-built images

version: "3.5"
services:
  mrss-redis:
    container_name: mrss-redis
    restart: unless-stopped
    image: redis:alpine
  mrss-mongo:
    container_name: mrss-mongodb
    restart: unless-stopped
    command: mongod --port 27017
    image: mongo:latest
    volumes:
      - ./path/to/config/db:/data/db
  mrss-bot:
    container_name: mrss-bot
    restart: unless-stopped
    image: griefed/monitorss-clone
    depends_on:
      - mrss-mongo
    environment:
      - TZ=Europe/Berlin
      - PUID=1000  # User ID
      - PGID=1000  # Group ID
      - DRSS_START=bot
      - DRSS_BOT_TOKEN=
      - DRSS_DATABASE_URI=mongodb://mrss-mongo:27017/rss
    volumes:
      - ./path/to/config/bot:/config
  mrss-web:
    container_name: mrss-web
    image: griefed/monitorss-clone
    restart: unless-stopped
    depends_on:
      - mrss-redis
      - mrss-mongo
    ports:
      - "8081:8081"
    environment:
      - TZ=Europe/Berlin
      - PUID=1000  # User ID
      - PGID=1000  # Group ID
      - DRSS_START=web
      - DRSSWEB_BOT_TOKEN=
      - DRSSWEB_DATABASE_REDIS=redis://mrss-redis:6379
      - DRSSWEB_DATABASE_URI=mongodb://mrss-mongo:27017/rss
      - DRSSWEB_BOT_REDIRECTURI=
      - DRSSWEB_BOT_CLIENTID=
      - DRSSWEB_BOT_CLIENTSECRET=
    volumes:
      - ./path/to/config/web:/config

Raspberry Pi

Due to MongoDB not having an armv7 compatible container, I won’t provide an arm compatible image for MonitoRSS-Clone.

Configuration

ConfigurationExplanation
Restart policy“no”, always, on-failure, unless-stopped
config volumeContains config files and logs.
data volumeContains your/the containers important data.
TZTimezone
PUIDfor UserID
PGIDfor GroupID
portsThe port where the service will be available at.
DRSS_START=botWhether the container should start as bot, web, or bot-web. One container must use bot and one container must use web
DRSS_BOT_TOKEN=Your Discord Bot Token
DRSS_DATABASE_URI=Address of your MongoDB. Keep default unless you know what you are doing.
DRSSWEB_BOT_TOKEN=Your Discord Bot Token
DRSSWEB_DATABASE_REDIS=Address of your Redis Instance. Keep default unless you know what you are doing.
DRSSWEB_DATABASE_URI=Address of your MongoDB. Keep default unless you know what you are doing.
DRSSWEB_BOT_REDIRECTURI=Redirect URL for the webinterface. See https://docs.monitorss.xyz/configuration/web-interface.
DRSSWEB_BOT_CLIENTID=Client ID Secret of your Discord App. See https://docs.monitorss.xyz/configuration/web-interface
DRSSWEB_BOT_CLIENTSECRET=Client Secret of your Discord App. See https://docs.monitorss.xyz/configuration/web-interface

User / Group Identifiers

When using volumes, permissions issues can arise between the host OS and the container. Linuxserver.io avoids this issue by allowing you to specify the user PUID and group PGID.

Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

  $ id username
    uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)

Standalone

docker-compose

version: "2"
services:
  monitorss-clone:
    image: griefed/monitorss-clone:latest
    container_name: monitorss-clone
    restart: unless-stopped
    environment:
      - PUID=1000   # User ID
      - PGID=1000   # Group ID
      - DRSS_START=web # Whether the container should start as bot, web, or bot-web
      - DRSS_DATABASE_URI=mongodb://mrss-mongo:27017/rss # Address of your MongoDB. Keep default unless you know what you are doing.
      - DRSS_BOT_TOKEN=123456 # Discord Bot Token
      - DRSSWEB_DATABASE_REDIS=redis://mrss-redis:6379 # Address of your Redis Instance. Keep default unless you know what you are doing.
      - DRSSWEB_BOT_TOKEN=123456 # Discord Bot Token
      - DRSSWEB_BOT_REDIRECTURI=http://localhost:8081/authorize # Redirect URL for the webinterface. See https://docs.monitorss.xyz/configuration/web-interface.
      - DRSSWEB_BOT_CLIENTSECRET=123456 # Client Secret of your Discord App. See https://docs.monitorss.xyz/configuration/web-interface
      - DRSSWEB_BOT_CLIENTID=123456 # Client ID Secret of your Discord App. See https://docs.monitorss.xyz/configuration/web-interface
    volumes:
      - /host/path/to/config:/config # Where config files will be stored
    ports:
      - 8081:8081/tcp # (When using web) Port at which the web interface will be available at

cli

docker create \
  --name=monitorss-clone \
  -e PUID=1000   `# User ID` \
  -e PGID=1000   `# Group ID` \
  -e DRSS_START=web `# Whether the container should start as bot, web, or bot-web` \
  -e DRSS_DATABASE_URI=mongodb://mrss-mongo:27017/rss `# Address of your MongoDB. Keep default unless you know what you are doing.` \
  -e DRSS_BOT_TOKEN=123456 `# Discord Bot Token` \
  -e DRSSWEB_DATABASE_REDIS=redis://mrss-redis:6379 `# Address of your Redis Instance. Keep default unless you know what you are doing.` \
  -e DRSSWEB_BOT_TOKEN=123456 `# Discord Bot Token` \
  -e DRSSWEB_BOT_REDIRECTURI=http://localhost:8081/authorize `# Redirect URL for the webinterface. See https://docs.monitorss.xyz/configuration/web-interface.` \
  -e DRSSWEB_BOT_CLIENTSECRET=123456 `# Client Secret of your Discord App. See https://docs.monitorss.xyz/configuration/web-interface` \
  -e DRSSWEB_BOT_CLIENTID=123456 `# Client ID Secret of your Discord App. See https://docs.monitorss.xyz/configuration/web-interface` \
  -v /host/path/to/config:/config `# Where config files will be stored` \
  -p 8081:8081/tcp `# (When using web) Port at which the web interface will be available at` \
  --restart unless-stopped \
  griefed/monitorss-clone:latest

Building the image yourself

Use the Dockerfile to build the image yourself, in case you want to make any changes to it

docker-compose.yml:

version: "3.5"
services:
  mrss-redis:
    container_name: mrss-redis-container
    restart: unless-stopped
    image: redis:alpine
  mrss-mongo:
    container_name: mrss-mongodb-container
    restart: unless-stopped
    command: mongod --port 27017
    image: mongo:latest
    volumes:
      - 'db-data:/data/db'
  mrss-bot:
    container_name: mrss-bot-container
    restart: unless-stopped
    build: ./MonitoRSS-Clone/.
    depends_on:
      - mrss-mongo
    environment:
      - TZ=Europe/Berlin
      - PUID=1000  # User ID
      - PGID=1000  # Group ID
      - DRSS_START=bot
      - DRSS_BOT_TOKEN=
      - DRSS_DATABASE_URI=mongodb://mrss-mongo:27017/rss
    volumes:
      - ./path/to/config:/config
  mrss-web:
    container_name: mrss-web-container
    build: ./MonitoRSS-Clone/.
    restart: unless-stopped
    depends_on:
      - mrss-redis
      - mrss-mongo
    ports:
      - "8081:8081"
    environment:
      - TZ=Europe/Berlin
      - PUID=1000  # User ID
      - PGID=1000  # Group ID
      - DRSS_START=web
      - DRSSWEB_BOT_TOKEN=
      - DRSSWEB_DATABASE_REDIS=redis://mrss-redis:6379
      - DRSSWEB_DATABASE_URI=mongodb://mrss-mongo:27017/rss
      - DRSSWEB_BOT_REDIRECTURI=
      - DRSSWEB_BOT_CLIENTID=
      - DRSSWEB_BOT_CLIENTSECRET=
    volumes:
      - ./path/to/config:/config

volumes:
  db-data:
  1. Clone the repository: git clone https://github.com/Griefed/MonitoRSS-Clone.git ./MonitoRSS-Clone
  2. Prepare docker-compose.yml file as seen above
  3. docker-compose up -d --build monitorss-clone
  4. Visit IP.ADDRESS.OF.HOST:8080
  5. ???
  6. Profit!

Information from the original repository by synzen

MonitoRSS Clone (Formerly Discord.RSS)


Driven by the lack of comprehensive RSS bots available, I have decided to try my hand at creating one of my own. Designed with as much customization as possible for both users and bot hosters, while also (or should be) easy to understand.

All documentation can be found at https://docs.monitorss.xyz/.

Publicly Hosted Instance

Don’t want to bother hosting your own instance? Use the publicly hosted one!

https://discordapp.com/oauth2/authorize?client_id=268478587651358721&scope=bot&permissions=19456

Web Interface

MonitoRSS also comes with a web interface! To run the web interface, see the documentation.

UI Screenshot

Deploy to Heroku

You can deploy the bot in a simple way to Heroku using the button below. Click here for detailed instructions – you must have MongoDB hosted with its URI ready to also insert into DRSS_DATABASE_URI environment variable.

Deploy

If you want to deploy manually without the button, you can follow this guide instead.

Hosting on Glitch

MonitoRSS requires node.js v12.16. As of 23 May 2020, Glitch does not install v12.16 automatically, and must be manually installed. For MonitoRSS to work on Glitch, follow these steps.

Setup

  1. Click the remix button and wait for the setup to complete. Be sure to make your project private to protect your configs.
Remix on Glitch
  1. Open terminal and run the following command. Adding the git remote will let you pull updates from the clone repo.
git remote add origin https://github.com/synzen/MonitoRSS-Clone.git && npm install --no-save node@12.16.3
  1. Set up your configs. You can use MongoDB Atlas for the MongoDB database and Redis for the Redis database.
  2. Use a tool like Uptime Robot to prevent the bot from going offline.

If you want the web interface, you will need to follow the web configuration and add the following in a file named .env:

image

The web port for Glitch is 3000.

Updating

See https://docs.monitorss.xyz/setting-up/staying-updated. Since using npm install will remove the required node v12.16 automatically, you must install it again after updating:

git reset --hard origin/master && npm install && npm install --no-save node@12.16.3