Docker : ISSO
Je vous ai présenté ISSO, un serveur de commentaires Open Source, il y a bientôt 6 ans. Aujourd'hui je vous propose de l'utiliser sous Docker !
La première fois que je vous ai proposé ISSO (il y a 6 ans), nous avions pu le mettre en place en suivant la documentation officielle.
Toujours utilisé sur mes serveurs, il fonctionne depuis maintenant plus de 2 ans avec Docker. Jusqu'il y a peu, j'utilisais l'image Wonderfall/docker-isso mais celle-ci n'ayant pas été mise à jour depuis un petit moment (2 ans en fait), j'ai décidé de la reprendre et de la mettre à jour, que ce soit ISSO ou Alpine OS. Vous la trouverez sur le Hub Docker ainsi que sur le Gitlab de ma communauté, Nefald.
Ce que je vous propose aujourd'hui, c'est de déployer ledit container avec un joli reverse proxy réalisé avec SWAG.
Sommaire
- Prérequis
- Docker-Compose : ISSO
- Configuration : ISSO
- Docker-Compose: SWAG
- Configuration : NGINX
- Utilisation et intégration
- Ressources
Prérequis
- Être coutumier de Docker
- Avoir pré-installé Docker est Docker-compose
- Avoir édité sa zone DNS avec une entrée de type
A
ouAAAA
pointant un sous-domaine vers l'IP de votre serveur. Ex.:comments.domain.tld. 86400 IN A 127.0.0.1
Répertoire de travail
Dans le présent tutoriel nous aurons comme répertoire de travail /docker
:
- Nous le créons avec :
sudo mkdir /docker
- On s'assurera que notre utilisateur ai les droits avec :
sudo chown -R <user>:<user> /docker
- L'arborescence ressemblera à ceci :
/docker/isso
├── config/
│ └── isso.conf
├── db/
│ └── comments.db
└── docker-compose.yml
ISSO
Docker-Compose : ISSO
On commence en créant un fichier nommé docker-compose.yml
dans le répertoire de votre choix (ici /docker/isso
), avec votre éditeur de texte favori (nano ?).
Il vous faudra adapter selon vos besoins et votre infrastructure, notamment :
-
Volumes persistents : ici le chemin est absolu
/docker/config
et/docker/db
-
User ID et Group ID : ici
GID=1000
etUID=1000
. Pour connaitre ceux de l'utilisateur souhaité, utilisez la commandeid
elle vous retournera l'UID et le GID de votre utilisateur courant (1000
par défaut pour le premier utilisateur du système). -
on créé le répertoire -
mkdir /docker/isso
-
on créé le fichier -
nano /docker/isso/docker-compose.yml
-
et on y colle ce qui suit :
version: '3.7'
services:
isso:
image: nefald/isso:latest
container_name: isso
restart: always
environment:
- UID=1000
- GID=1000
volumes:
- /docker/config:/config
- /docker/db:/db
Configuration : ISSO
On créé maintenant un fichier nommé isso.conf
dans le répertoire de votre choix, ici /docker/isso/config/
.
Il vous faudra adapter selon vos besoins et votre infrastructure, notamment. Référez-vous toujours à la documentation officielle d'ISSO , je ne mentionne ici que les paramètres essentiels :
- [general] : Spécifiez le chemin vers la base de données si différente, par défaut
/db/comments.db
. Spécifiez également l'url du site qui utilisera ISSO, par exemple dans mon cas c'esthttps://hiob.fr
. - [server] : Spécifiez listen; par défaut le port est 8059.
- [smtp] : Si vous avez activé la notification, détaillez vos paramètres SMTP, afin de notifier vos usagers et vous-même des commentaires et des réponses à ceux-ci.
Pour aller plus loin dans la configuration du serveur ISSO, référez-vous également à cette documentation
- on créé le répertoire -
mkdir /docker/isso/config
- on créé le fichier -
nano /docker/isso/config/isso.conf
- et on y colle ce qui suit en adaptant :
[general]
dbpath = /db/comments.db
host = https://domain.tld/
notify = smtp
[server]
listen = http://0.0.0.0:8059/
reload = off
profile = off
[smtp]
username = mail@domain.tld
Password = password
host = mail.domain.tld
port = 465
security = tls
from = mail@domain.tld
to = mail@domain.tld
timeout = 10
ISSO : Démarrage
Votre serveur ISSO est configuré, vous pouvez le démarrer en mode attaché :
docker-compose up
- Si le container démarre correctement et que vous n'avez pas d'erreur, fermez-le avec la combinaison de touches
ctrl + C
puis redémarrez-le en mode détaché avec :
docker-compose down; docker-compose up -d
Passons à la suite en créant le reverse proxy avec SWAG/NGINX.
Docker-compose : SWAG
On passe à la configuration de NGINX, au travers l'image linuxserver/SWAG. Nous nous attarderons surtout sur la configuration de NGINX. Aussi je me dois de vous la présenter et vous expliquer pourquoi j'ai opté pour cette solution.
SWAG - Secure Web Application Gateway - est une image docker développée par LinuxServer, embarquant NGINX, Certbot (Let's Encrypt), PHP et Fail2Ban. SWAG permet également d'utiliser la connexion avec HTTP Auth, LDAP via leur image ldap-auth, et Authelia (2 facteurs). Bref, je vous recommande.
Il vous faudra adapter selon vos besoins et votre infrastructure, notamment :
- le volume persistent : ici le chemin est relatif et monte le volume dans le répertoire courant
./config
- Déterminez le réseau docker
<network>
. Les containers SWAG et ISSO doivent être dans le même réseau. Pour créer le réseau docker :docker network create <network>
- Spécifiez les variables d'environnement selon vos besoins : EMAIL, URL (obligatoire), MAXMINDDB_LICENSE_KEY (à lire : doc)
Dans notre cas, il faut spécifier un nom de domaine principal avec la variable URL
et un sous-domaine avec SUBDOMAINS
, cela permettra au container de créer un certificat avec certbot.
Exemple: Dans mon cas, j'ai besoin d'un certificat pour hiob.fr (mon blog) et pour le sous-domaine comments.hiob.fr (ISSO), je configurerai ainsi :
- URL=hiob.fr
- SUBDOMAINS=comments
J'obtiendrai alors un certificat Let's Encrypt incluant ces deux domaines : hiob.fr et comments.hiob.fr.
- on créait le répertoire -
mkdir /docker/swag
- on créait le fichier -
nano /docker/swag/docker-compose.yml
- et on y colle ce qui suit, en adaptant selon nos besoins :
version: '3'
services:
swag:
image: ghcr.io/linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
- URL=<domain.tld> #needed
- SUBDOMAINS=<subdomain>
- VALIDATION=http
- EMAIL= <email> #optional
- ONLY_SUBDOMAINS=false #optional
- EXTRA_DOMAINS=<extra.domain.tld> #optional
- MAXMINDDB_LICENSE_KEY=<maxminddb key>
- STAGING=false #optional
volumes:
- ./config:/config
ports:
- 443:443
- 80:80 #optional
restart: unless-stopped
networks:
- <network>
networks:
<network>:
external:
name: <network>
- On se place dans le répertoire -
cd /docker/swag
- On enregistre et on démarre le container en mode attaché -
docker-compose up
- Une fois que les certificats Let's Encrypt ont été créés et que tout fonctionne, on peut arrêter le container avec
ctrl + c
. On s'assurera d'arrêter complétement le container et de supprimer les volumes non persistents en tapantdocker-compose down
Configuration : NGINX
Vous devrez vous être assuré d'avoir à votre disposition un domaine de second niveau ou un sous-domaine, que vous aurez déclaré dans la zone DNS de votre provider.
-
Par défaut le DNS resolver de Docker est 127.0.0.11 (loopback), il suffit alors de faire une requête avec le nom du container, qui est défini ici par
set $upstream_app isso
. Pour que la requête aboutisse, il est nécessaire que le container isso se trouve dans le même réseau docker que SWAG. -
On créait le fichier en adaptant -
nano /docker/swag/config/nginx/site-confs/isso
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name comments.domain.tld;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
resolver 127.0.0.11 valid=30s;
set $upstream_app isso;
set $upstream_port 8059;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_redirect off;
}
}
Votre serveur NGINX est configuré, vous pouvez le démarrer en mode attaché :
docker-compose up
- Si le container démarre correctement et que vous n'avez pas d'erreur, fermez-le avec la combinaison de touches
ctrl + C
puis redémarrez-le en mode détaché avec :
docker-compose down; docker-compose up -d
Allez, dernière étape ! On implémente le tout dans la page voulue !
Utilisation et intégration
Voilà, ISSO et SWAG sont installés et fonctionnels.
Inutile d'essayer d'y accéder depuis votre navigateur, le serveur ISSO n'est disponible qu'au travers du site configuré (host) dans ISSO. Vous n'obtiendrez qu'un BAD REQUEST.
Ceci pour d'évidentes raisons de sécurité, ISSO utilisant les entêtes CORS afin de pouvoir intégrer les commentaires sur le site en question tout en restreignant leur usage à celui-ci uniquement.
Tout est déjà fait, il ne vous reste plus qu'à intégrer à votre blog le script fournit par votre installation de ISSO.
Typiquement avec un thème pour Ghost, on éditera le fichier post.hbs
. Collez le "code" fournit avant la balise </article>
.
- Ouvrez le fichier
/content/themes/<theme>/posts.hbs
et collez ce qui suit :
<script data-isso="//comments.domain.tld" src="//comments.domain.tld/js/embed.min.js"></script>
<section id="isso-thread"></section>
Relancez votre blog Ghost (avec docker?) et le tour est joué. 😋
Plusieurs options permettent au travers de différents scripts JS de moduler les fonctionnalités d'ISSO, comme par exemple avoir un compteur de commentaires.
Pour plus de détails sur ces balises et les scripts, n'hésitez pas à consulter la documentation suivante : Client configuration.
Félicitations ! Vous avez maintenant sur votre blog, Ghost ou non, un serveur de commentaires OpenSource, respectieux de la vie privée de vous et de vos utilisateurs.
Ressources
- Gitlab Nefald/ISSO - https://git.nefald.fr/docker/isso/
- Image Nefald/ISSO Docker Hub - https://hub.docker.com/r/nefald/isso/
- GitHub Posativ/ISSO - https://github.com/posativ/isso/
- Documentation d'ISSO - https://posativ.org/isso/docs/