/ Self-hosting

Installer Isso sur Ubuntu 16.04 LTS pour remplacer disqus

Ayant récemment migré de WordPress vers Ghost, j'ai souhaité utiliser une autre solution que Disqus pour la gestion des commentaires sur le blog, de préférence self-hosted. Je me suis donc tourné vers Isso, un système de gestion de commentaires open-source permettant de gérer plusieurs sites.

Nous allons dans ce tutoriel voir comment installer Isso et comment le configurer pour gérer les commentaires de plusieurs sites.

Installer Isso

Pour l'installation, on commence par créer un nouvel utilisateur avec les droits sudo. De la même façon que pour installer ghost via la ghost-cli

adduser isso
adduser isso sudo

On se connecte ensuite avec cet utilisateur

su - isso

Et on commence par installer les paquets nécessaires pour isso

sudo apt-get install python-setuptools python-virtualenv

On définit alors notre environnement pour python.

virtualenv /opt/isso
source /opt/isso/bin/activate

Il y a plusieurs options pour installer isso, mais la plus simple étant visiblement via pip, c'est cette dernière que j'ai utilisé :

pip install isso
ln -s /opt/isso/bin/isso /usr/local/bin/isso

Pour mettre à jour isso, il suffit de faire :

source /opt/isso/bin/activate
pip install --upgrade isso

Configurer Isso

Nous avons terminé l'installation d'Isso, et nous allons pouvoir passer à la configuration. Pour cela on créer un fichier yourwebsite1.cfg et yourwebsite2.cfg dans le dossier de Isso dans lesquel nous allons définir les options suivantes :

  • la base de donnée
  • la modération
  • le serveur SMTP

Pour construire vos fichiers de configuration, utilisez l'exemple officiel disponible sur github : https://github.com/posativ/isso/blob/master/share/isso.conf
Comme vous pourrez le voir, il nous faut créer un dossier /var/lib/isso et créer un fichier vide pour chacun de nos sites :

mkdir -p /var/lib/isso && cd /var/lib/isso
touch comments.yourwebsite1.db comments.yourwebsite2.db

On pourra donc compléter la section générale dans la configuration de Isso :

[general]
name = yourwebsite1
host = http://yourwebsite1.tld/
dbpath = /var/lib/isso/yourwebsite1.db

Importer des commentaires

Avant de démarrer Isso, vous pouvez importer des commentaires provenant de WordPress ou de Disqus. Pour cela utililsez la commande suivante :

isso -c /path/to/isso.cfg import /path/to/disqus-or-wordpress.xml

L'opération est à réaliser pour chaque site.

Configuration du serveur Gunicorn

Pour exécuter Isso en multi-site, nous avons besoin d'installer Gunicorn. Cela se fait avec pip :

pip install gunicorn

On peut désormais lancer Isso, pour cela on définit tout d'abord l'emplacement de nos fichiers de configurations via la commande :

export ISSO_SETTINGS="/etc/isso.d/yourwebsite1.cfg;/etc/isso.d/yourwebsite2.cfg"

Puis on lance Gunicorn :

gunicorn isso.dispatch -b localhost:8080

Configuration de Nginx

Le serveur Gunicorn écoute sur le port 8080, accessible uniquement localement, nous allons donc utiliser Nginx en tant que reverse-proxy, pour rendre accessible notre système de commentaire via un sous-domaine, et installer un certificat SSL let's encrypt.

On installe donc Nginx si ce n'est pas déjà fait :

wget -O - https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo echo "deb http://nginx.org/packages/ubuntu/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx.list
sudo apt update
sudo apt install nginx

Et on créer notre vhost, ici sur le sous domaine comments.yourdomain.ltd :

upstream app_server {
    server 127.0.0.1:8080 fail_timeout=0;

}
server {

   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   ssl on;
   ssl_certificate     /etc/letsencrypt/live/comments.yourdomain.tld/fullchain.pem;
   ssl_certificate_key  /etc/letsencrypt/live/comments.yourdomain.tld/privkey.pem;

    keepalive_timeout 5;
    server_name comments.yourdomain.tld;


    access_log /var/log/nginx/comments.yourdomain.tld.access.log rt_cache;
    error_log /var/log/nginx/comments.yourdomain.tld.error.log;


    location / {

      try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto https;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://app_server;
    }


}

On installe ensuite certbot pour générer notre certificat SSL :

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx 

Et on génère le certificat via le serveur standalone de validation certbot, en arrêtant le service nginx pour libérer le port 80 et 443, avant la validation.

certbot certonly --pre-hook "service nginx stop" \
--standalone --cert-name comments.youdomain.tld \
-d votredomain.tld -d comments.yourdomain.tld \
-post-hook "service nginx start" -n \
--agree-tos -m you@votredomain.tld \
--rsa-key-size 4096

Lancer Isso automatiquemement

Pour lancer Isso automatiquement au démarrage de votre machine, nous allons le déclarer en tant que service systemd.
On créer pour cela un fichier /etc/systemd/system/isso.service avec le contenu suivant :

[Unit]
Description=lightweight Disqus alternative

[Service]
User=isso
Group=isso
Environment="ISSO_SETTINGS=/etc/isso.d/foo.example.cfg;/etc/isso.d/other.bar.cfg"
ExecStart=/usr/local/bin/gunicorn --log-file /var/log/isso.log isso.dispatch -b localhost:8080
SyslogIdentifier=isso

[Install]
WantedBy=multi-user.target

Puis on reload systemd avant de lancer le service

systemctl daemon-reload
systemctl enable isso
systemctl start isso

Ajouter Isso à son site

Si vous tentez d'accéder au sous-domaine d'Isso, il vous affichera les nom des différents sites sur lesquels vous pouvez installer le module de commentaire, sous la forme :

/yourblogname
/yourblogname2
/yourblogname3

Pour installer Isso sur votre blog, il vous suffit d'insérer le code suivant, en remplaçant yourblogname par le nom de votre blog :

<script data-isso="//comments.example.tld/yourblogname/"
        src="//comments.example.tld/yourblogname/js/embed.min.js"></script>

<section id="isso-thread"></section>

Vous pouvez également ajouter des paramètres via ce code, dont la liste est disponible dans la documentation officielle de Isso.