• Get In Touch
December 27, 2016

How to Create Your Own RSS Reader Using MiniFlux on Ubuntu 14.04

Want your very own server? Get our 1GB memory, Xeon V4, 25GB SSD VPS for £10.00 / month.
Get a Cloud Server

Miniflux is an open source, simple, minimalist RSS reader released under the AGPL v3 license. Developed with simplicity in mind, no social network support, no fancy features and also fast, simple and efficient.

Features

Miniflux has several main features:

  • Responsive design, works with your smartphone, tablet or desktop.
  • Send your bookmarks to Pinboard or Instapaper.
  • Compatible with the Fever API, read your feeds through existing mobile and desktop clients.
  • Use the Bookmarklet to subscribe to a website directly from any browsers.
  • Import and export your subscriptions by using the standard format OPML.
  • Update your feeds from a background task or from the user interface
  • Themes available
  • External links are opened inside a new tab with a rel=”noreferrer” attribute to respect your privacy.
  • API to interact programatically with your feeds and items.
  • Translated into multiple languages
  • Support for RTL languages (Right-to-Left)
  • No data locking, host anywhere

Objective

In this tutorial we’ll learn how to install and configure MiniFlux on Ubuntu 14.04. We’ll install all MiniFlux prerequisites before installing MiniFlux itself.

Prerequisites

We need to install these applications before we can install MiniFlux.

  • Fresh install of Ubuntu Server 14.04. You can use any ubuntu flavors but using ubuntu server will make sure your server have minimalist ubuntu installation so your system will not be loaded by unnecessary softwares.
  • Apache 2
  • Sqlite
  • PHP > 5.3.3. MiniFlux also need php5-sqlite and php5-PHP library

Update Base System

Before we install MiniFlux and its prerequisites let’s update the system to the latest update.

$ sudo apt-get update
$ sudo apt-get -y upgrade

Install Apache

Now the base system is ready, let’s install the Apache webserver first

$ sudo apt-get install apache2 apache2-bin apache2-data apache2-mpm-prefork libaio1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libdbi-perl libhtml-template-perl libterm-readkey-perl libwrap0 ssl-cert tcpd
...
Need to get 2,258 kB of archives.
After this operation, 7,917 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y

Press Y when apt ask whether we want to continue the prosess or not.

After installation we can check Apache 2 process using command below

$ sudo service  apache2 status
 * apache2 is running

The output above shows that apache2 process is running.

We can also check apache process using netstat to check if it’s already listen on default http port (80).

$ sudo netstat -naptu | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      6894/apache2 

apache2 process already listen on port 80.

Install PHP 5

Our Apache 2 webserver is now ready. Next we install PHP 5 including php5-sqlite library that is needed by MiniFlux. We can install PHP 5 and all of its components using commmand below.

$ sudo apt-get install libapache2-mod-php5 php5-cli php5-common php5-json php5-readline php5-sqlite

Since no dependency installed, apt will directly install all packages that we provided.

Install SQLite

Now let’s install SQLite. SQLite will be used by MiniFlux to store task data.

$ sudo apt-get install sqlite

Install MiniFlux

We can download Miniflux from Miniflux download page. At the time of this writing the latest version of Miniflux is v1.1.10.

Let’s download the latest stable version of Miniflux using wget

$ cd ~
$ wget -c https://miniflux.net/miniflux-latest.zip

We need unzip to extract downloaded archive. If you don’t have unzip, you can install unzip using command below:

$ sudo apt-get install unzip

Now let’s extract downloaded archive with unzip.

$ unzip miniflux-latest.zip

Move the extracted folder to /var/www directory.

$ sudo mv miniflux /var/www

Change ownership of the miniflux directory to www-data user.

$ sudo chown -R www-data:www-data /var/www/miniflux

Configure Apache Virtual Host for HTTP Only

Create a new apache configuration file on /etc/apache2/sites-available/miniflux.conf with the contents below.

<VirtualHost *:80>
    ServerName miniflux.exampleserver.xyz

    DocumentRoot /var/www/miniflux

    <Directory /var/www/miniflux>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/miniflux.exampleserver.xyz-error.log
    CustomLog ${APACHE_LOG_DIR}/miniflux.exampleserver.xyz-access.log combined

</VirtualHost>

Don’t forget to swap the miniflux.exampleserver.xyz from the example above with the domain name that you use for your Minixflux installation.

Enable the site using a2ensite command.

$ sudo a2ensite miniflux

Reload the apache2 process so it reads the new virtualhost configuration:

$ sudo service apache2 reload

Minixflux .htaccess configuration uses mod_rewrite for its configuration, we need to enable the module first.

$ sudo a2enmod rewrite

Now restart apache2 process so the new module enabled will be used by Apache.

$ sudo service apache2 restart

Using Miniflux

Now miniflux is ready, point our browser to Miniflux address. We will be greeted with login page.

HP_NO_IMG/data/uploads/users/2bf921f9-3b46-43aa-a673-2a9a74a5ce9a/2015460224.png” alt=”” />

Miniflux default username and password is admin.

HP_NO_IMG/data/uploads/users/2bf921f9-3b46-43aa-a673-2a9a74a5ce9a/301484477.png” alt=”” />

Change Default Admin Password

For security reasons, we need to change default admin password. Go to preferences. Input a new password on password and confirmation column. Scroll down to the end of the page and click save

HP_NO_IMG/data/uploads/users/2bf921f9-3b46-43aa-a673-2a9a74a5ce9a/149975916.png” alt=”” />

Add Feeds

To add a feed, go to subscriptions, click add. For example let’s try adding HostPresto! tutorial, the feed address is https://hostpresto.com/community/tutorials/feed/.

Input feed url and let’s group the feed under Tutorials group.

HP_NO_IMG/data/uploads/users/2bf921f9-3b46-43aa-a673-2a9a74a5ce9a/1197164469.png” alt=”” />

When the subscription added successfully it will show up on main page as undead.

HP_NO_IMG/data/uploads/users/2bf921f9-3b46-43aa-a673-2a9a74a5ce9a/1882850483.png” alt=”” />

Import OPML File

OPML (Outline Processor Markup Language) is an XML format for outlines (often blogrolls). We can import an OPML file to our Miniflux installation. To import OPML file we can go to subscription -> import.

HP_NO_IMG/data/uploads/users/2bf921f9-3b46-43aa-a673-2a9a74a5ce9a/2095891806.png” alt=”” />

Export OPML file

We can also export an OPML file from Miniflux, this can be a method to share our reading list to family, friends or even to the world. We can export our reading list on Miniflux from subscription -> export

Configure miniflux To Use HTTPS only

A secure connection is now a requirement for web applications. The last step that we will do in this tutorial is changing the connection to only use https. We assume that you already have SSL certificate and private key.

Let’s create new apache virtual host configuration on /etc/apache2/sites-available/miniflux-ssl.conf with contents below. Don’t forget to change:

  • ServerName
  • SSLCertificateFile
  • SSLCertificateChainFile
  • SSLCertificateKeyFile
<VirtualHost *:80>
   ServerName miniflux.exampleserver.xyz
   Redirect permanent / https://miniflux.exampleserver.xyz/
</VirtualHost>

<VirtualHost *:443>

    ServerName miniflux.exampleserver.xyz

    DocumentRoot /var/www/miniflux

    <Directory /var/www/miniflux>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/miniflux.exampleserver.xyz-error.log
    CustomLog ${APACHE_LOG_DIR}/miniflux.exampleserver.xyz-access.log combined

    SSLEngine on
    SSLCertificateFile      /etc/apache2/ssl/miniflux.exampleserver.xyz.crt
    SSLCertificateChainFile /etc/apache2/ssl/miniflux.exampleserver.xyz.crt
    SSLCertificateKeyFile   /etc/apache2/ssl/miniflux.exampleserver.xyz.key

    # Uncomment the following directive when using client certificate authentication
    #SSLCACertificateFile    /path/to/ca_certs_for_client_authentication


    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"

</VirtualHost>

 # intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder     on

We need to enable two new modules, mod_ssl and mod_headers before we can enable new virtual host config that we just created.

$ sudo a2enmod ssl
$ sudo a2enmod headers

We will also disable miniflux http only virtual host and enable the new virtual config.

$ sudo a2dissite miniflux
$ sudo a2ensite miniflux-ssl

Now, restart Apache 2 service so it will use both modules that we just enable and also new ssl site.

$ sudo service apache2 restart

Summary

In this tutorial we learned how-to create our won RSS reader using Miniflux on Ubuntu 14.04 We installed Miniflux on top of Apache, SQLite and PHP stack.

Hopefully using Miniflux will simplify your content collection from the internet and help you reduce time to visit each of your favorite site since you can go to Miniflux and only go to the sites if you find news or tutorial that interest you. Have fun!

Want your very own server? Get our 1GB memory, Xeon V4, 25GB SSD VPS for £10.00 / month.
Get a Cloud Server

Share this Article!

Related Posts

Node.js Authentication – A Complete Guide with Passport and JWT

Node.js Authentication – A Complete Guide with Passport and JWT

Truth be told, it’s difficult for a web application that doesn’t have some kind of identification, even if you don’t see it as a security measure in and of itself. The Internet is a kind of lawless land, and even on free services like Google’s, authentication ensures that abuses will be avoided or at least […]

Node.js and MongoDB: How to Connect MongoDB With Node

Node.js and MongoDB: How to Connect MongoDB With Node

MongoDB is a document-oriented NoSQL database, which was born in 2007 in California as a service to be used within a larger project, but which soon became an independent and open-source product. It stores documents in JSON, a format based on JavaScript and simpler than XML, but still with good expressiveness. It is the dominant […]

Using MySQL with Node.js: A Complete Tutorial

Using MySQL with Node.js: A Complete Tutorial

Although data persistence is almost always a fundamental element of applications, Node.js has no native integration with databases. Everything is delegated to third-party libraries to be included manually, in addition to the standard APIs. Although MongoDB and other non-relational databases are the most common choice with Node because if you need to scale an application, […]

Node.Js Vs Django: Which Is the Best for Your Project

Node.Js Vs Django: Which Is the Best for Your Project

Django and NodeJs are two powerful technologies for web development, both have great functionality, versatile applications, and a great user interface. Both are open source and can be used for free. But which one fits your project best? NodeJs is based on JavaScript, while Django is written in Python. These are two equally popular technologies […]

Nodejs Vs PHP:  Which Works Best?

Nodejs Vs PHP: Which Works Best?

Before getting into the “battle” between Node.js and PHP we need to understand why the issue is still ongoing. It all started with the increased demand for smartphone applications, their success forcing developers to adapt to new back-end technologies that could handle a multitude of simultaneous requests. JavaScript has always been identified as a client-side […]