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 ! ^_^

Vus : 577
Publié par Nicolas KAROLAK : 5