Ajouter des commentaires à Ghost, sans Disqus
Grâce à un passage chez Wonderfall j'ai trouvé le moyen d'ajouter un système de commentaires à Ghost, avec Isso une alternative libre et auto-hébergeable à Disqus.
Les fonctionnalités sont les suivantes :
- Syntaxe Markdown
- Possibilité d'éditer son commentaire pendant 15 min après envoi
- Modération par mail
- Stockage dans une base SQLite
- Import depuis Disqus et WordPress
Et c'est extrêmement simple à installer et intégrer !
Installation de Isso
La procédure qui va suivre est fonctionnelle pour Debian Jessie, pour d'autres distributions il faudra se référer à la documentation.
Pour commencer on installe donc les paquets pré-requis :
apt install python-setuptools python-virtualenv python-dev sqlite3 build-essential
On créer un utilisateur avec lequel notre instance de Isso va tourner :
adduser isso
Ensuite on se connecte sous cet utilisateur, on créer un virtualenv Python et on le charge :
su - isso
virtualenv /home/isso/app
source /home/isso/app/bin/activate
Dans ce virtualenv, on installe Isso via pip :
pip install isso
Et voilà, c'est tout pour l'installation. Toutefois il reste la configuration bien sûr…
À l'avenir, pour les mises à jour, une simple commande suffira :
su - isso -c 'source ~/app/bin/activate; pip install --upgrade isso'
Configuration de Isso
On créer donc un fichier /home/isso/app/config.ini
, qui va contenir les paramètres de configuration de notre instance Isso. On peut reprendre et personnaliser celui-ci, ou suivre la documentation. Voici le mien pour exemple :
# Isso configuration file
# vim: set filetype=ini
[general]
dbpath = /home/isso/app/comments.db
host = https://blog.example.net/
max-age = 15m
notify = smtp
[moderation]
enabled = true
purge-after = 30d
[server]
listen = http://127.0.0.1:4280
reload = off
profile = off
[smtp]
username = noreply@example.net
password = monmotdepasse
host = mail.example.net
port = 587
security = starttls
to = moi@example.net
from = noreply@example.net
timeout = 10
[guard]
enabled = true
ratelimit = 2
direct-reply = 3
reply-to-self = false
require-email = false
[markup]
options = strikethrough, autolink, fenced_code, no_intra_emphasis
allowed-elements =
allowed-attributes =
[hash]
salt = Eech7co8Ohloopo9Ol6baimi
algorithm = pbkdf2
On peut maintenant tester si ça tourne correctement (toujours sous l'utilisateur isso
) :
/home/isso/app/bin/isso -c /home/isso/app/config.ini run
Si tout se passe bien on devrait avoir les messages suivants dans la console :
2016-03-11 15:19:24,054 INFO: connected to SMTP server
2016-03-11 15:19:24,122 INFO: connected to https://blog.example.net/
Puisque c'est bon, on peut arrêter en faisant Ctrl + C, et on va créer un service systemd pour que Isso se lance automatiquement au démarrage. On repasse en root
et on créer donc un fichier /etc/systemd/system/isso.service
:
[Unit]
Description=lightweight Disqus alternative
After=network.target
[Service]
WorkingDirectory=/home/isso/app
ExecStart=/home/isso/app/bin/isso -c config.ini run
Type=simple
User=isso
StandardOutput=journal
StandardError=inherit
SyslogIdentifier=isso
[Install]
WantedBy=multi-user.target
On active notre service nouvellement créé, on le démarre, et on en vérifie le statut :
systemctl enable isso
systemctl start isso
systemctl status isso
Configuration de Apache pour Isso
Notre instance de Isso est normalement fonctionnelle, mais il faut la rendre accessible depuis le Web. Pour ça il faut qu'on ai un nom DNS qui pointe vers le serveur de notre instance. On peut par exemple faire un CNAME de comments.example.net
vers blog.example.net
si Isso tourne sur le même serveur que notre Ghost.
Une fois la configuration DNS faite, on peut créer notre VirtualHost dans Apache. On créer donc un fichier /etc/apache2/sites-available/comments.conf
:
<VirtualHost *:80>
ServerName comments.example.net
ServerAdmin moi@example.net
Redirect permanent / https://comments.example.net/
ErrorLog /home/isso/logs/error.log
CustomLog /home/isso/logs/access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName comments.example.net
ServerAdmin moi@example.net
ProxyPass "/" "http://127.0.0.1:4280/"
ProxyPassReverse "/" "http://127.0.0.1:4280/"
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/blog.example.net/privkey.pem
SSLCertificateFile /etc/ssl/certs/blog.example.net.pem
SSLCACertificateFile /etc/ssl/certs/ca-certificates.crt
Header always set Strict-Transport-Security "max-age=15768000"
ErrorLog /home/isso/logs/error.log
CustomLog /home/isso/logs/access.log combined
</VirtualHost>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Dans mon cas, mon certificat pour blog.karolak.fr
est également signé pour comments.karolak.fr
(par Let's Encrypt), c'est pourquoi vous pouvez noter que je réutilise ce certificat.
Il n'y a plus qu'à activer le module proxy_http
pour Apache, si ce n'est pas déjà fait, activer notre VirtualHost et redémarrer le service Apache2 :
a2enmod proxy_http
a2ensite comments
systemctl restart apache2
Si comme moi vous avez configuré les logs pour aller dans le répertoire /home/isso/logs/
, il faut bien sûr le créer au préalable. Et éventuellement configurer la rotation des logs, en créant par exemple un fichier /etc/logrotate.d/apache2-users
:
/home/*/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
}
Intégration de Isso dans Ghost
Rien de plus simple. Il suffit d'ouvrir le fichier de template des posts, /chemin/vers/ghost/content/themes/montheme/post.hbs
, et d'ajouter les ligne suivantes en dessous de la balise {{/author}}
:
<script data-isso="//comments.example.net/" src="//comments.example.net/js/embed.min.js"></script>
<section id="isso-thread"></section>
Et c'est tout, ça devrait fonctionner !
Lorsque quelqu'un post un commentaire, on devrait recevoir un mail à l'adresse qu'on a renseigné dans la configuration de Isso, avec un lien pour supprimer ou valider le commentaire.
Si vous rencontrez des problèmes ou avez des suggestions, vous pouvez laisser un commentaire ci-dessous ! ^_^