Blog de benji1000

Installer isso sur Ubuntu

Le 4 août 2020 dans Sysadmin

J'ai récemment changé de serveur (je vous expliquais d'ailleurs comment désactiver le SoftRaid sur Kimsufi), et j'en ai profité pour passer d'un moteur Wordpress à un moteur flat-file maison. Le but était de me débarrasser de toute la complexité, la lourdeur et la maintenance d'un système dont je n'utilisais qu'une très faible partie des fonctionnalités. Suite à ce changement, je souhaitais quand même laisser la possibilité de commenter, et je me suis donc tourné vers le système isso.

J'ai pas mal galéré à l'installer, dû à des tutos incomplets et/ou obsolètes. Je vous propose donc ici un tuto que j'espère aussi complet que possible, et valide à la date de rédaction de cet article (août 2020). L'installation est faite sur une Ubuntu Server 18.04 LTS.

Installation des dépendances

Isso se base pour fonctionner sur des modules Python 3 et sur une base de données sqlite.

sudo apt-get install python3 python3-pip python3-wheel python3-setuptools python3-dev python3-virtualenv python3-venv sqlite3 libffi-dev build-essential 

On va le faire fonctionner dans un environnement virtuel nommé venv sous l'identité d'un compte spécifique.

sudo adduser --disabled-login --gecos 'Commentaires isso' isso
sudo su - isso
python3 -m venv /home/isso/isso
source /home/isso/isso/bin/activate

Nous sommes maintenant dans l'environnement virtuel. On va installer davantage de dépendances :

pip3 install wheel
pip3 install isso
pip3 install Werkzeug
pip3 install gevent

EDIT 4 août 2021 : dans la version initiale de l'article, je conseillais de ne pas installer la version 1.0.1 du module Werkzeug qui était incompatible avec d'autres modules, et de rester sur la version 0.16.1. Il semble désormais que stagner sur cette version obsolète cause d'autres soucis (ImportError: cannot import name 'ContextVar'), et que les problèmes soient résolus avec Werkzeug 2.x. Il est donc maintenant conseillé d'installer la dernière version de ce module.

Pour info, l'installation du module isso provoque de nombreuses erreurs. Ne vous inquiétez pas et passez à la ligne suivante. L'installation du module gevent était très longue sur mon serveur.

Configuration d'isso

On édite le fichier de configuration :

nano /home/isso/isso.conf

Voici le contenu de mon fichier. Je vous laisse faire les ajustements nécessaires à l'aide de la documentation officielle.

[general]
name = votredomaine.tld
host = 
    http://votredomaine.tld/
    https://votredomaine.tld/
    http://www.votredomaine.tld/
    https://www.votredomaine.tld/
dbpath = /home/isso/isso.db
max-age = 15m
notify = smtp
log-file = /home/isso/isso.log
gravatar = false

[admin]
password = <Insérez ici un mot de passe solide>
enabled = true

[moderation]
enabled = true
purge-after = 90d

[server]
listen = http://localhost:8080
public-endpoint = http://isso.votredomaine.tld
reload = on
profile = off

[smtp]
host = localhost
port = 25
security = none
to = <Insérez ici votre adresse email>
from = "Commentaires du blog" isso@votredomaine.tld
timeout = 10

[guard]
enabled = true
ratelimit = 2
direct-reply = 3
reply-to-self = false
require-author = true
require-email = false

[markup]
options = strikethrough, autolink, fenced_code, no_intra_emphasis

[hash]
salt = <Insérez ici une valeur de sel aléatoire>
algorithm = pbkdf2

Concernant la valeur de sel, il s'agit de générer une chaîne d'au moins une vingtaine de charactères, uniquement des chiffres et des lettres majuscules et minuscules (à priori). Vous pouvez vous aider pour cela d'un site tel que celui-ci (générez-en deux et collez-les).

Vous l'aurez remarqué, j'ai ici configuré l'envoi de notifications depuis mon serveur SMTP local. J'ai utilisé pour cela un simple postfix sur lequel je ne m'attarde pas. Si vous souhaitez un article complet à ce sujet, n'hésitez pas à m'en faire part dans les commentaires !

On sort ensuite de l'environnement virtuel et de l'utilisateur isso :

deactivate
exit

On crée un raccourci système, on instancie les bons fichiers et dossiers avec les droits appropriés :

sudo ln -s /home/isso/isso/bin/isso /usr/local/bin/isso
sudo touch /home/isso/isso.db /home/isso/isso.log
sudo chown isso /home/isso/isso.db /home/isso/isso.log

On retourne dans l'environnement virtuel de l'utilisateur isso :

sudo su - isso
source /home/isso/isso/bin/activate

On teste ensuite le lancement d'isso :

isso -c /home/isso/isso.conf

Si rien ne s'affiche, c'est que le système fonctionne ! On l'arrête avec Ctrl+C.

Import d'un backup Wordpress

Si vous souhaitez importer les commentaires de votre Wordpress, vous pouvez le faire avec la commande suivante :

isso -c /home/isso/isso.conf import wordpress-backup.xml

Le backup Wordpress au format XML aura été généré sur le panneau d'administration de Wordpress, dans Outils > Exporter.

Création d'un service

Créer un service va permettre qu'isso se lance automatiquement au démarrage du système, comme Apache ou nginx finalement.

On quitte l'environnement virtuel de l'utilisateur isso avec :

deactivate
exit

On crée un fichier de définition du service :

sudo nano /etc/systemd/system/isso.service

Qu'on renseigne comme suit :

[Unit]
Description=Isso Commenting Server
After=network.target

[Service]
Type=simple
User=isso
WorkingDirectory=/home/isso
ExecStart=/home/isso/isso/bin/isso -c /home/isso/isso.conf
SyslogIdentifier=isso
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

On active le service puis on le démarre :

sudo systemctl enable isso.service
sudo systemctl start isso.service

Configuration d'un reverse proxy

Vous l'avez peut-être compris dans le fichier de configuration : isso ne sera pas exposé tel quel sur Internet, mais sera situé derrière un reverse proxy. J'ai pour ma part choisi d'utiliser Apache pour cette tâche, car je suis plus familier avec cet outil que nginx, mais rien ne vous empêche d'utiliser nginx si vous préférez.

On active donc le module de reverse proxy d'Apache :

sudo a2enmod proxy proxy_http

On crée un vhost spécifique à isso :

<VirtualHost *:80>
    ServerName isso.votredomaine.tld
    ServerAlias isso.votredomaine.tld

    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/

    ErrorLog ${APACHE_LOG_DIR}/isso/error.log
    CustomLog ${APACHE_LOG_DIR}/isso/access.log combined
</VirtualHost>

On crée les dossiers de log, on active le vhost et on redémarre Apache :

sudo mkdir /var/log/apache2/isso
sudo a2ensite isso
sudo service apache2 restart

À ce stade, vous devriez être en mesure d'accéder à isso.votredomaine.tld, et plus spécifiquement au fichier /js/embed.min.js. Si ce n'est pas le cas, inutile d'aller plus loin, il vous faudra chercher la cause de l'erreur. Commencez par regarder les fichiers de logs d'Apache (/var/log/apache2/error.log) et du vhost propre à isso (/var/log/apache2/isso/error.log).

Insertion de la zone de commentaires dans les pages web

Il suffit pour cela d'insérer le code suivant à l'endroit où vous souhaitez voir s'afficher la zone de commentaires :

<script data-isso="http://isso.votredomaine.tld/" src="http://isso.votredomaine.tld/js/embed.min.js"></script>
<section id="isso-thread" data-title="<Titre de l'article ou de la page>"></section>

Mise en place du HTTPS

Vous l'avez peut-être remarqué dans le fichier de configuration, j'ai préparé le terrain pour la mise en place du HTTPS. Utiliser le HTTPS est aujourd'hui une étape essentielle, à la fois pour la sécurité des informations échangées, mais aussi pour le référencement. Cet aspect n'étant toutefois pas l'objet du tuto, je mets la commande que j'utilise uniquement à titre de référence. Si vous êtes intéressés pour que j'aille plus loin, quitte à en faire un article spécifique, n'hésitez pas à me le dire dans les commentaires !

Sous le compte root :

certbot certonly -t -n --rsa-key-size 4096 --agree-tos -m webmaster@votredomaine.tld --server https://acme-v02.api.letsencrypt.org/directory --dns-ovh --dns-ovh-credentials /etc/letsencrypt/scripts/ovh.ini -d isso.votredomaine.tld

N'oubliez pas de mettre une tâche de renouvellement de ce style le crontab de root :

0 6 * * 1 root /usr/bin/certbot renew --post-hook "service apache2 restart"

Puis on remplace tout le fichier du vhost par celui-ci :

<VirtualHost *:443>
        ServerName isso.votredomaine.tld
        ServerAlias isso.votredomaine.tld

        ProxyPass / http://localhost:8080/
        ProxyPassReverse / http://localhost:8080/

        ErrorLog ${APACHE_LOG_DIR}/isso/error.log
        CustomLog ${APACHE_LOG_DIR}/isso/access.log combined

        <Location /admin>
                Order allow,deny
                Allow from A.B.C.D
        </Location>

        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/isso.votredomaine.tld/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/isso.votredomaine.tld/privkey.pem
</VirtualHost>

Vous voyez le A.B.C.D dans le vhost ? C'est votre adresse IP, celle depuis laquelle vous administrerez isso. Inutile de laisser l'administration ouverte aux quatre vents sur Internet.

Puis on redémarre Apache :

sudo service apache2 restart

Il faut ensuite retourner dans le venv de l'utilisateur isso pour modifier le fichier de configuration (/home/isso/isso.conf) et plus spécifiquement le paramètre public-endpoint pour indiquer le HTTPS. Également, pensez à modifier le code HTML inséré dans vos pages pour tenir compte du HTTPS. On quitte le venv de l'utilisateur isso, puis on recharge le service :

sudo systemctl restart isso

Terminé ! On doit maintenant avoir à ce stade un environnement isso fonctionnel et sécurisé.

Mise à jour d'isso

Pour mettre à jour isso, il faut retourner dans le venv du compte isso, faire la mise à jour, quitter le venv puis redémarrer le service :

sudo su - isso
source /home/isso/isso/bin/activate
pip3 install --upgrade isso
exit
sudo systemctl restart isso

EDIT 4 août 2021 : dans la version initiale de l'article, je conseillais de ne pas installer la version 1.0.1 du module Werkzeug qui était incompatible avec d'autres modules, et de rester sur la version 0.16.1. Il semble désormais que stagner sur cette version obsolète cause d'autres soucis (ImportError: cannot import name 'ContextVar'), et que les problèmes soient résolus avec Werkzeug 2.x. Il est donc maintenant conseillé de mettre à jour vers la dernière version de ce module.

Si vous le souhaitez, vous pouvez ajouter la ligne source /home/isso/isso/bin/activate à la toute fin du fichier ~/.bashrc de l'utilisateur isso afin que vous n'ayez pas à la saisir à chaque fois que vous souhaitez travailler sur la configuration d'isso ou le mettre à jour. Chaque fois que vous passerez sous le compte isso, l'environnement virtuel Python sera chargé, mais vous pourrez le quitter avec deactivate.

Vous pouvez également ajouter l'alias suivant dans le fichier ~/.bash_aliases de l'utilisateur isso pour faciliter la mise à jour :

alias update='pip3 install --upgrade isso'

Pensez ensuite à vous déconnecter/reconnecter du compte isso pour que l'alias prenne effet.

Je termine en citant les articles qui m'ont mis sur la voie : JeSuisAdmin, TheRandomBits, Stan's blog et OverIQ.