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.