2015 may mark the rebirth of the blog. This year, Medium’s raised $25 million, WordPress raised $160 million and Dave Winer is trying to help Facebook tear down the wall around its garden.
I thought it might be a good time to revisit alternatives to now defunct Google Reader, its popular web-based news reader. Certainly there are pre-built options, but I’d like to walk through four do it yourself, self-hosted options.
Below, I’ll walk through the installation of four newsreader apps using a cloud instance at Digital Ocean running Ubuntu 14.04. Digital Ocean instances, called droplets, cost only $5 per month and run on fast SSD drives for high performance.
The Four Do It Yourself News Readers
Of the four readers, two are free open source PHP-based readers (Selfoss and Tiny RSS), the third is an open source Python reader (GoRead) which runs easiest on Google App Engine and my favorite, Fever, whose PHP code costs $30 but can be easily self-hosted. All of them import OPML files – which is handy for migrating from another reader application.
1. Selfoss. A free, open source PHP-based news reader named after a beautiful waterfall in Iceland. It has a nice interface, it offers a plugin system for extensibility, it provides a mobile web interface, it imports OPML files and is fairly easy to install and configure. Install it.
2. Tiny RSS. A free, open source PHP-based news reader which offers an Android client. Install it.
3. GoRead, as close to a clone of Google Reader as you’ll find. It’s free, open source and Python-based. The latter makes it a bit more difficult to self-host. However, it is fairly easy to run at Google App Engine. And, it also offers an Android client. Install it.
4. Fever. A $30 PHP-based news reader that I’ve been using for the past year. Of the four, it’s my favorite. And, there are third party apps available for it, such as Ashes for Fever ($5.99) and Sunstroke (which recently missing from the App Store). Install it.
Let’s get started…
News Reader Installation Guides
Configure Your Server Instance
Digital Ocean is an easy to use, economical hosting option with very fast performance. This tutorial describes how to install the four news readers on Ubuntu 14.04 LTS at Digital Ocean for only $5 monthly. You’ll want to have a domain name or sub-domains registered for your newsreaders. If you don’t have a registrar or need more information, I recommend NameCheap.
Sign up at Digital Ocean now, the process is simple and only requires an email and password:
Digital Ocean’s cloud instances are called Droplets. Once you sign up, you can create your first Droplet using the selections below. You’ll want to have a hostname (domain or sub-domain name) chosen for your readers in mind. You can also select any region closest to you or your typical reader e.g. San Francisco or New York. Under Select Image, choose Applications: LAMP on Ubuntu 14.04 LTS.
[galleria transition=”fade” height=”450″ width=”600″ speed=”1000″ enable=”show_imagenav,pause_on_interaction”][image]http://publishingwithwordpress.com/wp-content/uploads/2014/06/01-digitalocean-menu-1024×576.png[/image][image]http://publishingwithwordpress.com/wp-content/uploads/2014/06/create-droplet-1024×767.png[/image]
[image]http://publishingwithwordpress.com/wp-content/uploads/2014/06/create-droplet-region-1024×773.png[/image]
[image]http://publishingwithwordpress.com/wp-content/uploads/2014/06/create-droplet-distro-1024×799.png[/image]
[image]http://publishingwithwordpress.com/wp-content/uploads/2014/06/03-droplet-creation-status-1024×597.png[/image]
[image]http://publishingwithwordpress.com/wp-content/uploads/2014/06/05-yoursite-com-1024×769.png[/image]
[image]http://publishingwithwordpress.com/wp-content/uploads/2014/06/04-droplet-email-1024×373.png[/image]
[image]http://publishingwithwordpress.com/wp-content/uploads/2014/06/06-do-ssh-entry-1024×340.png[/image][/galleria]
Creating a droplet only takes a minute. Digital Ocean will email you your IP address and root password.
Once you have your IP address, you can begin the process of mapping your domains and subdomains e.g. yourdomain.com to your IP address. Visit your domain registrar’s DNS settings and change the A record for your yourdomain.com to the new IP address e.g. 54.234.124.117.
Wait until your DNS changes propagate (sometimes up to 24 hours or more – check them here), try to connect via SSH using your domain and the password provided in the Digital Ocean email.
ssh root@yourhostname.com
You can also use your IP address until your domain name is active:
ssh root@xx.xx.xx.xx
Change your password when prompted, or use:
passwd
There are a few things you’ll want to do to get your droplet ready for installing the newsreaders.
sudo apt-get install zip sudo apt-get update sudo apt-get upgrade sudo a2enmod rewrite
It’s also best to run through the script for securing your MySQL server installation:
mysql_secure_installation
If you’re using the $5 512MB RAM droplet, you may want to create a Swap file for your LAMP stack to operate reliably:
dd if=/dev/zero of=/swapfile bs=1M count=1024 mkswap /swapfile swapon /swapfile
Edit the fstab file:
sudo nano /etc/fstab
Add this line:
/swapfile swap swap defaults 0 0
Verify the swap file is active by typing:
free
Installing Selfoss
Installing Selfoss is pretty easy. Sign in to your Droplet via SSH as shown above. Download the code:
mkdir /var/www/selfoss cd /var/www/selfoss wget http://selfoss.aditu.de/selfoss-2.11.zip unzip selfoss-2.11.zip
I had to manually create the .htaccess file as it didn’t unzip properly.
Visit https://github.com/SSilence/selfoss/blob/master/.htaccess and click raw. Copy the file to the clipboard.
Create /var/www/selfoss/.htaccess and paste the contents:
nano /var/www/selfoss/.htaccess
Set the file permissions for Selfoss:
chmod -R 777 /var/www/selfoss/data chmod 777 /var/www/selfoss/public
Login to MySQL. The password for your MySQL Server is usually shown when you login to your Droplet.
mysql -u root -p
Create a database for Selfoss and grant permissions:
create database selfoss; grant all privileges on selfoss.* TO "root"@"localhost" identified by "your-password"; flush privileges; exit;
You’ll have to provide these database settings in the defaults.ini file:
nano /var/www/selfoss/defaults.ini
db_type=mysql db_host=localhost db_database=selfoss db_username=root db_password=your-password db_port=3306 db_prefix=
Next, we’ll create an Apache configuration file for the Selfoss website:
nano /etc/apache2/sites-available/selfoss.conf
Paste in the following – replace your sub-domain or domain name:
<VirtualHost *:80> ServerName selfoss.yourdomain.com DocumentRoot /var/www/selfoss DirectoryIndex index.php AllowOverride All Order Deny,Allow Allow from all </Directory> </VirtualHost>
Activate the site and reload Apache:
a2ensite selfoss.conf service apache2 reload
We’ll use cron to configure a background task to regularly update our feeds:
crontab -e
Paste in the following line – replace your domain (this will update every ten minutes):
*/10 * * * * wget -O /dev/null http://selfoss.yourdomain.com/update
Visit your website e.g. http://selfoss.yourdomain.com and you should be able to start using Selfoss. You can import your existing OPML file at http://selfoss.yourdomain.com/opml or add feeds by hand to get started (click on the cloud in the lower left).
Installing TinyRSS
Installing TinyRSS is a bit more difficult than Selfoss. The installation guide is here.
Sign in to your Droplet via SSH as shown above. Download the code:
mkdir /var/www/tinyrss cd /var/www/ wget https://github.com/gothfox/Tiny-Tiny-RSS/archive/1.13.tar.gz mv 1.13.tar.gz tiny.tar.gz tar zxfv tiny.tar.gz mv Tiny-Tiny-RSS-1.13/ tinyrss
Set the file permissions for TinyRSS:
chmod -R 777 cache chmod -R 777 feed-icons chmod -R 777 lock
Login to MySQL. The password for your MySQL Server is usually shown when you login to your Droplet.
mysql -u root -p
Create a database for TinyRSS and grant permissions:
create database tinyrss; grant all privileges on tinyrss.* TO "root"@"localhost" identified by "your-password"; flush privileges; exit;
Next, we’ll create an Apache configuration file for the TinyRSS website:
nano /etc/apache2/sites-available/tinyrss.conf
Paste in the following – replace your sub-domain or domain name:
<VirtualHost *:80> ServerName tinyrss.yourdomain.com DocumentRoot /var/www/tinyrss DirectoryIndex index.php AllowOverride All Order Deny,Allow Allow from all </Directory> </VirtualHost>
Activate the site and reload Apache:
a2ensite tinyrss.conf service apache2 reload
Updating feeds in TinyRSS is a bit more complex. Here are their updating instructions and options which I’ll summarize below:
Install the PHP5 command line interpreter so that TinyRSS can run updates in the background:
apt-get install php5-cli
Configure a cron task to run the update daemon:
crontab -e
Paste in the following command:
*/10 * * * * /usr/bin/php5 /var/www/tinyrss/update.php --feeds --quiet
Configure your database through the web interface. Visit http://tinyrss.yourdomain.com/install. You should see something like this:
Visit your website e.g. http://tinyrss.yourdomain.com and you should be able to start using TinyRSS.
Add individual fees or visit Actions -> Preferences -> Feeds -> OPML to import OPML files:
Installing GoRead
GoRead is a Python app which makes it a bit more difficult to host. GoRead’s been designed to easily run in Google AppEngine, which it does. However, if you want to use your own domain name, you’ll need to configure and run SSL. Here’s the GoRead installation instructions on Github, as a Python and AppEngine newbie, I found them unclear at first. But, after a while, I succeeded at launching my AppEngine instance of GoRead.
Here’s how I install my own instance of GoRead within Google AppEngine:
apt-get install git mercurial
Create directories for GoRead and Google AppEngine and download the code for AppEngine:
mkdir ~/go mkdir ~/go_appengine cd ~/go_appengine wget https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.10.zip unzip go_appengine_sdk_linux_amd64-1.9.10.zip
Edit .bashrc to set up paths:
nano ~/.bashrc
Paste the following at the bottom:
PATH=$PATH:~/go PATH=$PATH:~/go_appengine export GOPATH=~/go
Run source to update:
source ~/.bashrc
Let’s install GoRead locally:
goapp get -d github.com/mjibson/goread cd $GOPATH/src/github.com/mjibson/goread git checkout master
Copy the settings files and configure them:
cp app.sample.yaml app.yaml cp settings.go.dist settings.go
Now, let’s go sign up for Google AppEngine, if you haven’t already. Visit the AppEngine Developer Console. Go through the steps to add a project for GoRead and Enable Billing.
You’ll eventually see something like this (at least, you will after successful deployment):
Next, edit app.yaml with the Google application name:
cd $GOPATH/src/github.com/mjibson/goread nano app.yaml
Edit application with the application name from the Google developer console:
application: your-google-app-name version: 1 runtime: go api_version: go1
Then, deploy the application to Google AppEngine:
goapp deploy
During the deployment process, it will request your Google AppEngine email and password. Enter the account you use with Google Developer Console.
However, when you try to activate and login to your AppEngine instance, Google will block you and report suspicious activity on your account. You need to visit Google’s Security dashboard and approve access. I had to repeat my requests a handful of times before Google finally relented. It did not work in a logical way – I had to keep trying over a period of a half hour before it began working.
Visit https://your-project-name.appspot.com and you should see this page when it’s up and running successfully:
To begin using GoRead, you’ll need to login via your Google account. GoRead is multi-user capable, which is pretty cool. So, you can invite your friends and family to use it as long as they share in the costs. Don’t publicize your URL though – as strangers could use it and inadvertently run up your bills.
Keep in mind, Google App Engine will bill you for time and usage, so it’s helpful to set a budget for your GoRead instance. You can do this from the project settings page (it’s a bit hard to find, because well, Google):
Installing Fever
Installing Fever is very easy and fairly well automated. Sign in to your Droplet via SSH as shown above. Download the code:
mkdir /var/www/fever cd /var/www/fever wget http://feedafever.com/gateway/public/fever.zip unzip fever.zip
Set the file permissions for Fever:
chmod 777 /var/www/fever
Login to MySQL. The password for your MySQL Server is usually shown when you login to your Droplet.
mysql -u root -p
Create a database for Fever and grant permissions:
create database fever; grant all privileges on fever.* TO "root"@"localhost" identified by "your-password"; flush privileges; exit;
Next, we’ll create an Apache configuration file for the Fever website:
nano /etc/apache2/sites-available/fever.conf
Paste in the following – replace your sub-domain or domain name:
<VirtualHost *:80> ServerName fever.yourdomain.com DocumentRoot /var/www/fever DirectoryIndex index.php AllowOverride All Order Deny,Allow Allow from all </Directory> </VirtualHost>
Activate the site and reload Apache:
a2ensite fever.conf service apache2 reload
We’ll use cron to configure a background task to regularly update our feeds:
crontab -e
Paste in the following line – replace your domain (this will update every ten minutes):
00,15,30,45 * * * * curl -L -s --user-agent 'Fever Refresh Cron' 'http://fever.yourdomain.com/?refresh'
Visit your website e.g. http://fever.yourdomain.com and you should see the web interface for configuring Fever. Enter in your database settings and click check privileges:
You’ll see something like this:
Now return to the FeedAFever website to purchase a license, which you can enter on this screen. Fever’s automated installation process will take it from here. It’s quite easy.
Conclusion
I hope you’ve found this useful. Please feel free to post feedback, corrections, questions or comments below. You can also reach me on Twitter @reifman or email me directly.
Share this: