Skip to content

Selfhosting FreshRSS with docker-compose

Guide copied over from here with fixes for a few things How to Self-Host a RSS Reader with FreshRSS

Why FreshRSS?

One of the biggest selling points of FreshRSS is that it comes with a built-in web scraper. This means that you can create basic RSS feeds even on websites that do not support it.

FreshRSS also supports push notifications on modern content platforms. As a result, the platform can be incredibly quick and reactive to post updates. Lastly, it is also simple to install which makes it an ideal project for novice users that are just getting started with self-hosting.

Installing FreshRSS

Assumption: This article assumes that you have a working domain name with an A and PTR record pointing to your VPS instance’s IP address and hostname.

We will be using Docker to install FreshRSS.

Install Docker

Fetch the Docker repository’s signing key from the project’s website:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Create a new repository file for Docker:

sudo nano /etc/apt/sources.list.d/docker.list

Write the following line of code inside your new repository file:

deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable

Refresh your system repositories, update your system, and install the Docker binaries:

sudo apt update && sudo apt upgrade
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin nginx

Building the FreshRSS Docker Container

Make a new directory in your user’s home directory for FreshRSS and go inside it:

mkdir ~/freshrss && cd ~/freshrss

Create a “docker-compose.yml” file using your favorite text editor:

nano ./docker-compose.yml

Paste the following block of code inside your new docker-compose file:

version: "2.4"
volumes:
  data: null
  extensions: null
services:
  freshrss:
    image: freshrss/freshrss:latest
    build:
      context: https://github.com/FreshRSS/FreshRSS.git#latest
      dockerfile: Docker/Dockerfile-Alpine
    container_name: freshrss
    hostname: freshrss
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
    volumes:
      - ./data:/var/www/FreshRSS/data
      - ./extensions:/var/www/FreshRSS/extensions
    ports:
      - "8080:80"   # YOU CAN CHANGE THE PORT TO 8081:80 if 8080:80 is taken, only change the port on the left side
    environment:
      TZ: Europe/Sofia # CHANGE TO YOUR TIMEZONE
      CRON_MIN: 3,33

Save your docker-compose.yml file. Run the following command the build your docker container:

sudo docker compose up -d

Setting Up Reverse Proxy and SSL

Once the FreshRSS instance is up and running, next we will configure Nginx to a reverse proxy so you can access it publicly via your domain name.

To start, create an Nginx site configuration file for your instance:

sudo nano /etc/nginx/sites-available/freshrss

Paste the following block of code inside your new site configuration file:

server {
    listen 80;
    listen [::]:80;

    root                    /var/www/html;
    server_name             freshrss.your-domain-name.here;

    location / {
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    Host $http_host;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_pass          http://localhost:8080;
    }
}

Save your new site configuration file and run the following command to create a symbolic link to “/etc/nginx/sites-enabled”:

sudo ln -s /etc/nginx/sites-available/freshrss /etc/nginx/sites-enabled/

If everything is fine, reload your Nginx server daemon and enabling it on system startup:

sudo systemctl reload nginx

Enabling SSL For Your Instance

To obtain an SSL certificate, install the core snap daemon to your system:

certbot --nginx

Accessing and Configuring FreshRSS

Open a web browser and navigate to the address of your new FreshRSS instance. Click the dropdown list on the page and select the language that you want FreshRSS to run on, then click “Submit.”

Doing that will load FreshRSS’ self-test module which will check whether the current instance is running properly. To continue, scroll down to the bottom of the page, then click “Go to the next step.”

Click the dropdown list, select “SQLite” then click “Submit.”

Fill in the details of your instance’s administrator user, then click “Submit” to create it.

Click “Complete installation” to properly start your new FreshRSS instance.

Installing extensions

Press the cog wheel in the top right > Extensions.

ONLY ADMINS CAN ADD/REMOVE EXTENSIONS

cd ~/freshrss/extensions

I'll demonstrate how to download ThreePanesView, the process is the same for all other extensions.

Press on the anchor tag for ThreePanesView or your desired extensions - it should lead you to a repository. In my case https://framagit.org/nicofrand/xextension-threepanesview.

Click on the download icon and copy the link for the zip file - https://framagit.org/nicofrand/xextension-threepanesview/-/archive/master/xextension-threepanesview-master.zip.

In the folder:

wget https://framagit.org/nicofrand/xextension-threepanesview/-/archive/master/xextension-threepanesview-master.zip

Then unzip the file:

unzip xextension-threepanesview-master.zip

Use ls to check what's inside the folder, if it's a subfolder you'll have to move it with mv to ~/freshrss/extensions. Extensions will usually have the following files: metadata.json, extension.php etc.

If you want an extension to be enabled or disabled by default for all users (without their ability to enable or disable said extensions), use your favorite text editor and edit the following line in metadata.json:

"type": "system"

The other value is "user", which will allow users to change it at will.

Changing the theme

Press the cog wheel in the top right > Display.

Cycle through the themes and when you've picked your favorite, press Submit at the bottom. This is a User side change and won't affect other users.

Enabling User Registration

I WOULD NOT RECOMMEND DOING THIS WITH AN SQLITE DATABASE, USE POSTGRESQL INSTEAD

To start, login to your FreshRSS administrator account, then click the cog icon on the page’s upper right corner.

Scroll to the “Administration” category, then select “System configuration.”

Go to the “User registration form” subcategory, click the dropdown box beside the “Registration form”, then select the “Enabled: No limit of accounts.” option.

Save your new site configuration by clicking the “Submit” button on the bottom of the page.

Wiping an Existing User’s Data

Go to your FreshRSS administrator account, then click the cog icon on the page’s upper right corner.

Go to the “Administration” category, then select “Manage users.”

This will bring up a page with a list of the current users in your FreshRSS instance. Click the name of the user that you want to disable.

Click the “Purge” button to wipe the user’s RSS feeds clean.


Last update: December 19, 2023