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 python3-setuptools python3-virtualenv python3-dev sqlite3 build-essential

On définit alors notre environnement pour python.

python3 -m venv /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

On peut ensuite sortir du virtualenv avec la commande :

deactivate

Pour pouvoir utiliser directement la commande isso depuis le virtualenv, il suffit de créer un symlink entre /opt/isso/bin/isso et /usr/local/bin/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
deactivate

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 acme.sh pour générer notre certificat SSL :

wget -O -  https://get.acme.sh | sh
source ~/.bashrc

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, durant la validation.

acme.sh --issue -d comments.yourdomain.tld --keylength ec-384 --standalone --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"

Il ne reste plus qu'à déployer le certificat :

# créer le répertoire
mkdir -p /etc/letsencrypt/live/comments.yourdomain.tld

# déployer le certificat
acme.sh --install-cert -d comments.yourdomain.tld --ecc \
--cert-file /etc/letsencrypt/live/comments.yourdomain.tld/cert.pem \
--key-file /etc/letsencrypt/live/comments.yourdomain.tld/key.pem \
--fullchain-file /etc/letsencrypt/live/comments.yourdomain.tld/fullchain.pem \
--reloadcmd "service nginx restart"

Et à ajouter la configuration suivante dans votre vhost Nginx :

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

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 /lib/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

Il suffit alors d'activer le service avec systemd pour créer un symkink entre le dossier /lib/systemd/system et /etc/systemd/system avant de le lancer.

systemctl enable isso.service
systemctl start isso.service

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.

Commentaires

licence creative common

L’ensemble des articles publiés sur jesuisadmin.fr sont mis à disposition
selon les termes de la licence CC BY-NC-SA 4.0.

Article précédent Article suivant