IRC est un protocole de communication qui a récemment soufflé ses bougies pour son 30ème anniversaire. Apparu en août 1988 avec la RFC 1459, il est de moins en moins utilisé au profit d’outils plus polyvalents tels que Slack ou Discord. Mais les plus fervent utilisateurs d’IRC s’adaptent pour continuer d’utiliser le protocole historique …
L’objectif que nous allons essayer d’atteindre est de faire tourner avec Docker l’application Glowing Bear, une interface Web pour le client IRC WeeChat. Pour cela, nous utiliserons le dépôt officiel de Nginx et nous créerons une image pour WeeChat.
La première chose à faire est bien sûr d’installer Docker. Je vais également utiliser dans cet article Docker Compose. Cela facilite la gestion des applications Docker lorsqu’on utilise de multiples conteneurs.
Le conteneur WeeChat
Ce conteneur sera dédié au client IRC. Basé sur Alpine, il embarquera WeeChat avec un utilisateur dédié.
Une image Docker pour WeeChat
Il n’existe pas de dépôt officiel pour WeeChat. Afin de ne pas dépendre d’une tierce personne sur Internet, nous allons créer une image Docker dans laquelle nous allons installer et configurer le client IRC. Pour créer une image Docker, il faut utiliser un fichier Dockerfile
dans lequel nous précisons les opérations à réaliser pour construire l’image. Pour plus de détails, je vous laisse aller jeter un œil à la documentation Dockerfile.
- Nous partons de l’image officielle d’Alpine ;
- Installation des paquets weechat, python et bash, puis suppression du cache ;
- Changement de la valeur de la variable globale LANG pour
C.UTF8
(Préférences globales) ; - Changement de la valeur de la variable globale HOME pour
/weechat
; - Création de l’utilisateur
weechat
avec l’uid 1000 et du groupeweechat
avec le gid 1000 ; - Création d’un point de montage pour le répertoire
/weechat/.weechat
; - Le répertoire de travail sera
/weechat
; - Le compte utilisé pour exécuter le conteneur sera
weechat
; - Le conteneur écoutera sur le port 9001 ;
- Au lancement du conteneur, la commande
weechat
sera exécutée.
weechat
à 1000. La valeur de ces uid/gid importent peu pour notre images, à condition d’être supérieurs ou égaux à 1000. Par la suite, nous allons créer un utilisateur sur l’hôte avec les mêmes uid/gid, donc assurez vous que ces valeurs sont disponibles sur l’hôte et changez-les si besoin.
Ensuite, il nous suffit de construire notre image avec la commande docker build
(attention de ne pas oublier le point à la fin de la commande) :
debian:~$ docker build -t vonkrafft/weechat:latest .
Successfully built 226da8c3ad94
Successfully tagged vonkrafft/weechat:latest
debian:~$ docker image ls
REPOSITORY TAG IMAGE ID SIZE
vonkrafft/weechat latest 226da8c3ad94 54.3MB
Préparer l’hôte pour accueillir le conteneur
À ce stade, nous disposons d’une image Docker pour notre client IRC. Il nous faut à présent créer le conteneur WeeChat qui utilisera cette image. Pour cela, nous utiliserons Docker Compose. Tout d’abord, il nous faut un utilisateur non privilégié sur l’hôte pour faire tourner le conteneur.
debian:~$ groupadd -g 1000 weechat
debian:~$ useradd -u 1000 -M -p '*' -s /bin/false -g 1000 weechat
Nous allons également avoir besoin d’un répertoire de travail. Pour ma part, j’aime bien avoir toutes les données relatives à Docker dans une répertoire /docker
, mais libre à vous de stocker vos données où cela vous arrange. Dans notre répertoire de travail, nous allons stocker les fichiers de configuration et de journalisation de WeeChat.
debian:~$ mkdir -p /docker/web-irc/weechat
debian:~$ chown 1000:1000 /docker/web-irc/weechat
Configurer et exécuter WeeChat
debian:~$ ls -lh /docker/web-irc/
drwxr-xr-x 2 weechat weechat 4.0K Sep 29 11:29 weechat
debian:~$ docker run --rm -it -v "/docker/web-irc/weechat:/weechat/.weechat" vonkrafft/weechat:latest weechat
Si tout fonctionne (notamment vis-à-vis des permissions sur les répertoires partagés), vous devriez avoir accès à l’IHM de WeeChat en ligne de commande. C’est la seule fois où vous aurez besoin d’accéder à WeeChat via le terminal.
Cet accès temporaire à WeeChat en ligne de commande va nous permettre de configurer le relais de WeeChat via le port 9001. Si vous souhaitez plus de détail, je vous invite à regarder la documentation sur le protocole WeeChat Relay.
/relay add weechat 9001
/set relay.network.password mon_super_mot_de_passe
/exit
Lorsque nous quittons WeeChat, le terminal va se fermer automatiquement et le conteneur WeeChat va être détruit car nous avions lancé ce conteneur avec l’option --rm
(Clean-up). Pas d’inquiétude, la configuration sera persistante dans le dossier /docker/web-irc/weechat
(un ls
peut vous aider à vous en convaincre).
Le docker Nginx
Nous allons utiliser l’image officielle de Nginx, dans sa version stable sur Alpine. Le choix de la version est personnel, vous pouvez utiliser la version mainline ou bien vous baser sur Debian selon vos préférences.
Les répertoires partagés
Dans notre répertoire de travail, nous allons stocker le contenu du site Web, les fichiers de journalisation du serveur Nginx, ainsi que notre fichier de configuration Nginx default.conf
.
debian:~$ cd /docker
debian:~$ mkdir -p web-irc/log
debian:~$ touch web-irc/log/access.log web-irc/log/error.log
debian:~$ chmod a+rw web-irc/log/*
Les fichiers de journalisation doivent être accessibles en lecture et en écriture par le conteneur Nginx. Alors certes, un a+rw
n’est pas très propre, mais c’est la meilleure solution que j’ai actuellement (n’hésitez pas à m’en suggérer d’autres).
Le fichier de configuration
Ensuite, il nous faut un fichier de configuration. Nous indiquons le port en écoute, le nom de domaine, le chemin des fichiers de journalisation et du code source. Il nous faut aussi préciser la redirection vers le relais WeeChat.
proxy_pass
, j’ai renseigné l’URL du relais WeeChat. Dans mon cas, mon conteneur s’appelle weechat et Docker s’occupera de la résolution DNS pour cette URL. Si vous avez nommé votre conteneur différemment, il vous faudra reporter ce nom dans le fichier de configuration Nginx.
Le code source
Il nous faut à présent télécharger le code source de Glowing Bear. Vous pouvez télécharger l’archive ZIP et la décompresser dans /docker/web-irc/www
, ou alors utiliser Git pour cloner le dépôt (dans ce cas là, pensez à supprimer ou à restreindre l’accès au répertoire .git
).
debian:~$ git clone https://github.com/glowing-bear/glowing-bear.git /docker/web-irc/www
debian:~$ rm -r /docker/web-irc/www/.git
Finaliser les conteneurs
Maintenant que notre image WeeChat est prête, que nos répertoires partagés sont créés et configurés et que notre fichier de configuration Nginx est terminé, nous pouvons lancer les deux conteneurs qui nous permettront d’avoir une IHM Web pour notre client IRC. Nous pouvons donc rédiger le fichier docker-compose.yml
qui nous permettra de gérer nos conteneurs. À noter que nous utiliserons l’option tty pour le conteneur WeeChat car le client IRC a besoin d’un terminal pour s’exécuter.
Pour terminer, la commande docker-compose up -d
va créer et lancer les conteneurs. Si tous se passe bien, vous devriez donc avoir deux conteneur en cours d’exécution et le conteneur Nginx devrait exposer le port TCP/80 vous permettant d’accéder à l’URL http://irc.docker.local/.
Et voilà, votre interface Web pour IRC est en place. Pour vous authentifier, utilisez l’adresse irc.docker.local
(le hostname du serveur sur lequel le conteneur Nginx est lancé) avec le port 80
(ou 443 si vous avez mis en place le HTTPS) et le mot de passe défini plus haut (dans mon cas mon_super_mot_de_passe
).
Sources
- Official build of Nginx (EN)
- Docker Documentation (EN)
- WeeChat Documentation (EN, FR et autres)
- Monter une passerelle de communication IRC/WeeChat/Glowing Bear/Bitlbee (FR)
Share this post
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email