Installing Isso

Isso is an open source alternative to Disqus. It is written in Python and allows users to enter comments in markdown. Unlike Disqus however, it is very lightweight and uses SQLite database store comments. Lately, Disqus has been criticized because of its privacy policies and bad site performance. If you are really concerned about these issues then isso might be a great alternative. This post describes how you can install isso on a blog written in Flask running on Ubuntu server though it can be adapted to any framework or server of your choice.

What you need?

Before we begin you should have the following:

  1. Linux server because Isso doesn’t work on Windows.
  2. A domain which points to your server (optional).

Let’s get started.

Installing Isso

First of all, we need Python. Most Linux distributions these days already come with Python installed by default. You can check the version of the Python on your machine using the following command:

If the preceding command gives an error then it means you don’t have Python on your computer.

To install Python and other necessary dependencies on Debian based system like Ubuntu use the following command:

Next, install virtualenv using the following command.

The virtualenv package allows us to create a virtual environment. A virtual environment is simply a separate Python installation where we can install packages specific to our project without polluting the global Python installation. This way our projects can run different versions of the same package without conflicting with each other.

Creating Virtual Environment

Create a new directory called flask_blog and change your current working directory to this directory using the cd command.

To create virtualenv environment type the following command:

This will create a directory named env inside the flask_blog. The env directory constitutes a separate Python installation.

To use this virtual environment, we have to activate it first. You can do so using the following command:

Installing Blog

In this post, we will be running Isso on a blog. You can download the project files from [nofollow-here](https://github.com/overiq/flask_project) or simply clone the repo using the following command.

Now you should have a directory named flask_project inside the parent flask_blog directory. Currently, your project structure should look like this:

Install the project dependencies using the following command:

To run the project type the following command:

We can move the process into the background by hitting Ctrl+Z followed by the bg command.

Your application is now up and running. To see it in action fire up your browser and navigate to http://localhost:5000. If you are following this guide on a live server replace the localhost with the IP address.

Although our project is running fine, but that’s now how we will serve our project in production. In production, we will proxy requests through a more capable web server like Nginx. Let’s do this!

Install Nginx using the following command:

Nginx will automatically start once the installation is finished. Visit http://localhost/ and you should see a page like this:

This means our Nginx is up and running. You can also test the status of Nginx using the following command:

Now, let’s configure Nginx to serve our application. In the /etc/nginx/sites-available directory create a new server configuration file flask_blog and add the following code to it:

/etc/nginx/sites-available/flask_blog

To activate this configuration simply create a symbolic link in the /etc/nginx/sites-enabled directory using the following command:

Restart the server for the changes to take effect.

Now visit http://localhost/ and you should be able to see the home page of our blog as follows:

Installing Isso

Inside the virtualenv environment install isso using the following command:

Next, we have to set up some configurations options for isso. Create a new file named isso.cfg inside the flask_blog directory and add the following configurations to it.

flask_blog/isso.cfg

The configurations options should be quite obvious. Anyway here is rundown of some important configurations we have used:

Property Description
dbpath It refers to the location of the database where comments will be stored.
host It refers to the website where you want to install Isso.
listen It refers to the location of the Isso server.
enabled (under guard section) it enables or disables basic spam protection.
direct-reply It refers to the number of direct comments a thread can have. By default, Isso allows only 3 direct comments per thread.
enabled (under moderation section) it enables or disables moderation queue.
purge-after It refers to the number of days after which comments will be removed from the moderation queue.
log-file Location of the log file. If specified Isso will log messages to the file instead of spitting them in the console.

To display comments on the client, isso needs a single JS file. Open single_post.html and add modify the file as follows (changes are highlighted).

flask_blog/templates/single_post.html

If you now visit any blog post, it will trigger a request to /isso/js/embed.min.js/ URL.

As the output shows the request failed with 404 error this is because Isso is not currently running. Before we start the Isso server, we have to configure Nginx to proxy the request the request ending in /isso to the Isso server. Open server configuration file we created in the preceding section and modify it as follows (changes are highlighted):

/etc/nginx/site-available/flask_blog

Restart the Nginx again.

Finally, start the isso server using the following command:

Again hit Ctrl+Z followed by bg command to move the process into the background.

Navigate to any post and you will be displayed a comment form like this:

Enter a comment and hit submit.

After every comment submission you will receive a notification via email like this:

The submitted comment will not be shown to the users until you activate the comment.

Importing Comments

Isso also gives you the option to import your existing comments from WordPress and Disqus. Once you have an XML dump you can use the following command to import your comments.

Running Isso as Service

The way we are running Isso is not recommended in production. If the Isso process stops for some reason, users will not be able to view and post comments and you would have to manually start Isso by logging into the server. A more robust way is to run Isso as a service. To accomplish this task we will use supervisor.

Install supervisor using the following command:

Next, create a config file named isso.conf inside the /etc/supervisor/conf.d/ directory.

Add the following configurations to the file:

You should replace the path names relative to your isso installation. To run the service enter the following commands:

That’s all there is to it. If you have encountered any errors please let me know.

Leave a Comment