On voit bien qu'on est au printemps ! Enfin, à quelques mois près. Mais n'empêche qu'on voit fleurir pas mal de solutions pour gérer ses containers Docker et les maintenir à jour, ça déferle en ce moment.
Aujourd'hui nous allons parler de Tugtainer ! Cette application vous permettra de contrôler les mises à jour et de les appliquer. Vous avez également la possibilité d'installer un agent sur chaque machine à contrôler. Pratique pour centraliser vos mises à jour.
Vous avez le choix de surveiller ou non un container et de la mettre à jour automatiquement en cochant ou non les options :

Afin d'ajouter une petite couche de sécurité, que ce soit Tugtainer ou son agent, tout passe par socket proxy. Et c'est une bonne chose. Pas besoin d'exposer directement le socket Docker.
Dernière chose et pas des moindres, le message de l'équipe de Tugtainer :
Autrement dit : Veuillez noter que l'application est distribuée telle quelle et qu'il n'est pas recommandé de l'utiliser dans un environnement de production.
Il y a une part où je comprends le message, et une autre, pas vraiment. Mais au moins je vous ai avertit de cette mention, transparence oblige.
⚡ Caractéristiques
- Interface web avec authentification.
- Prise en charge de plusieurs hôtes.
- Prise en charge des proxys sockets.
- Planification par crontab.
- Notifications pour de nombreux services.
- Configuration par conteneur (vérification seule ou mise à jour automatique).
- Vérification et mise à jour manuelles.
- Nettoyage automatique/manuel des images.
- Prise en charge des conteneurs liés (compose et personnalisés).
- Prise en charge des registres privés.
💾 Installation
Prérequis
Avant de commencer, assurez-vous d’avoir :
Étapes d'installation
- Créez votre compose.yml dans le dossier ou vous comptez installer Tugtainer :
nano compose.yml- Et collez ça dedans :
networks:
tugtainer:
driver: bridge
volumes:
tugtainer_data:
services:
# Socket proxy is used by default,
# but you can mount docker socket directly
# and remove this service and DOCKER_HOST variable
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
container_name: socket-proxy
environment:
CONTAINERS: 1
EVENTS: 1
IMAGES: 1
INFO: 1
LOG_LEVEL: warning
PING: 1
NETWORKS: 1
POST: 1
TZ: Europe/Moscow
VERSION: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
read_only: true
tmpfs:
- /run
networks:
- tugtainer
labels:
dev.quenary.tugtainer.protected: True
app:
depends_on:
- socket-proxy
container_name: tugtainer
image: quenary/tugtainer:latest
volumes:
- tugtainer_data:/tugtainer
# You can uncomment this to mount socket directly,
# and remove socket-proxy service and DOCKER_HOST variable
# - /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
environment:
DOCKER_HOST: tcp://socket-proxy:2375
networks:
- tugtainer
ports:
- '9412:80'
labels:
dev.quenary.tugtainer.protected: True- On va déployer l'application :
docker compose up -d- Rendez-vous sur l'ip:port, suivant l'IP de votre serveur local et du port choisi, 8181 par défaut :
http://ip:9412/ou votre domaine :
https://tugtainer.mondomaine.com👤 Créer votre compte administrateur
En réalité, c'est plutôt créer le mot de passe du compte administrateur. Il n'y a pas de nom d'utilisateur.
Lorsque vous lancez Tugtainer pour la première fois, vous arriverez ici :

- 1 => Entrez votre mot de passe fort.
- 2 => Confirmez le mot de passe.
- 3 => Cliquez sur Save pour continuer.
Il est maintenant temps de vous connecter avec le mot de passe choisi :

- 1 => Entrez le mot de passe de votre compte admin.
- 2 => Cliquez sur Sign in pour terminer.
Et voilà :

On ne peut pas dire que vous étiez attendu, rien n'est prêt. 😏
🖥️ Ajouter un hôte
L'hôte sur lequel est installé Tugtainer
Sauf si cela ne vous est pas utile, mais on va commencer par la base, ajouter l'hôte qui accueil Tugtainer. Tant qu'à faire.
Cliquez dans le menu de gauche sur Hosts :

Cliquez sur + Add new :

Remplissez au minimum ces informations :

- 1 => Nommez votre serveur.
- 2 => Entrez cette URL : http://127.0.0.1:8001
- 3 => Cliquez sur Add.
Notez que vous pouvez régler deux modes de Prune.
Rendez-vous dans la partie Hosts pour vérifier :

Ajoutez un hôte avec l'agent
Pour le multi host, il faudra déployer un petit agent afin qu'il puisse communiquer avec Tugtainer.
Le voici :
- Créez votre compose.yml dans le dossier ou vous comptez installer l'agent Tugtainer :
networks:
tugtainer_agent:
driver: bridge
services:
# Socket proxy is used by default,
# but you can mount docker socket directly
# and remove this service and DOCKER_HOST variable
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
container_name: socket-proxy
environment:
CONTAINERS: 1
EVENTS: 1
IMAGES: 1
INFO: 1
LOG_LEVEL: warning
PING: 1
NETWORKS: 1
POST: 1
TZ: Europe/Brussels
VERSION: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
read_only: true
tmpfs:
- /run
networks:
- tugtainer_agent
labels:
dev.quenary.tugtainer.protected: True
agent:
depends_on:
- socket-proxy
container_name: tugtainer-agent
image: quenary/tugtainer-agent:latest
# volumes:
# You can uncomment this to mount socket directly,
# and remove socket-proxy service and DOCKER_HOST variable
# - /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
environment:
# The list of available variables is in env.example
AGENT_SECRET: changez-moi
DOCKER_HOST: tcp://socket-proxy:2375
read_only: true
tmpfs:
- /run
networks:
- tugtainer_agent
ports:
- '9413:8001'
labels:
dev.quenary.tugtainer.protected: True- TZ: Europe/Brussels => Changez si nécessaire.
- AGENT_SECRET: changez-moi => Changez changez-moi par une petite clé, une phrase de passe. Peu importe. Notez quelque part cette information. Vous en aurez bien vite besoin.
- On va déployer l'application :
docker compose up -d- C'est terminé pour l'installation de l'agent.
Retournez sur votre instance Tugtainer dans la partie Hosts et cliquez sur :

Complétez ce qui suit :

- 1 => Nommez le serveur à ajouter.
- 2 => Ajoutez ceci http://192.168.1.176:9413, en prenant soin de remplacez l'IP par celle de votre serveur, suivi de :9413.
- 3 => Entrez le secret que vous avez configuré avec la variable AGENT_SECRET.
- 4 => Cliquez sur Add pour temriner.
On vérifie :

Installez l'agent sur tous les serveurs à contrôler et répétez l'opération pour les ajouter.
⤴️ Les mises à jour
Pour commencer on va vérifier la présence des containers sur DNS server, par exemple.
Cliquez sur Containers dans le menu de gauche :

Je vois bien mes containers :

Vous avez deux boutons importants :
- Check
- Update
Si vous cochez le premier, il ne fera que vérifier la présence des mises à jours éventuelles.
Si vous cochez également le second, il mettra automatiquement le ou les containers à jour.
Si vous ne cochez que le premier et qu'il détecte une mise à jour, il faudra cliquer manuellement sur Update.
En cliquant sur Check all hosts, il va vérifier toutes les mises à jour sur tous vos serveurs.
Vous pouvez également n'afficher que les containers à mettre à jour et masquer les autres containers en cliquant sur Only available :

🔔 Notifications
Tugtainer vous propose des notifications avec Apprise. Les possibilités sont énormes, mais je vais vous expliquer comment configurer les notifications pour Gotify, que j'utilise.
Rendez-vous dans la partie Settings :

Maintenant, allez sur votre instance Gotify, cliquez une Create an application et notez la clé.
Apprise attend ce format :
Sans HTTPS, port 80
gotify://hostname/tokenAvec HTTPS, port 443
gotifys://hostname/token?priority=highMon instance Gotify étant reliée à un domaine, je vais choisir la seconde option :
gotifys://gotify.mondomaine.com/token- gotify.momndomaine.com => Remplacez gotify.momndomaine.com par votre domaine/sous-domaine.
- token => Indiquez la clé que vous avez noté plus haut.
Complétez ceci :

- 1 => Indiquez l'URL du service choisi, que ce soit Gotify ou une autre méthode.
- 2 => Cliquez sur Send test notifications pour vérifier le bon fonctionnement.
On est bon :
