Aller au contenu

Watchtower sous Docker

Watchtower est un conteneur qui sert à mettre à jour automatiquement vos conteneurs Docker. Il permet également d’être lié à un Webhook pour vous envoyer des notifications lors des scans automatiques.

Installation de Watchtower

1. Créer un dossier Watchtower et un fichier docker-compose.yml
mkdir Watchtower
cd Watchtower
nano docker-compose.yml
2. Coller la configuration et enregistrer
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= 0 0 6 * * *
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
      #- WATCHTOWER_NOTIFICATIONS=slack
      #- WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower
      #- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://discord.com/api/webhooks/xxxxxxxxxxx/xxxxxxxxxxx/slack
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
3. Lancer le conteneur avec docker-compose
docker-compose up -d

Le conteneur Watchtower est maintenant créé. 
Il est possible de modifier la fréquence de vérifications en modifiant la ligne WATCHTOWER_SCHEDULE avec le cron que notre choix.

Par la suite, nous verrons comment ajouter les conteneurs à la surveillance de Watchtower, et comment configurer les notifications via Discord. 

Ajouter un conteneur à Watchtower

Pour ajouter un conteneur à Watchtower, il faut éditer le fichier docker-compose du stack que l’on souhaite mettre à jour.
Par exemple, ici un stack pour Apache Guacamole :  
version: "2"
services:
  guacamole:
    image: oznu/guacamole
    container_name: guacamole
    volumes:
      - postgres:/config
    ports:
      - 8080:8080
volumes:
  postgres:
    driver: local
Pour ajouter la surveillance, il suffit d’ajouter le label « com.centurylinklabs.watchtower.enable=true« 
version: "2"
services:
  guacamole:
    image: oznu/guacamole
    container_name: guacamole
    labels:
      - com.centurylinklabs.watchtower.enable=true
    volumes:
      - postgres:/config
    ports:
      - 8080:8080
volumes:
  postgres:
    driver: local
Dès maintenant, mon conteneur est surveillé !

Activer les notifications Discord

Pour activer les notifications Discord, il faut aller modifier le docker-compose de watchtower pour décommenter les dernières lignes :
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= 0 0 6 * * *
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
      - WATCHTOWER_NOTIFICATIONS=slack
      - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower
      - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://discord.com/api/webhooks/xxxxxxxxxxx/xxxxxxxxxxx/slack
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
Sur Discord : Créer un serveur, ou modifiez un de vos serveur en allant dans Paramètres du serveur → Intégrations → Créer un Webhook
Capture decran 2023 05 20 130551
Cliquez sur Copier l’URL du webhook.
Capture decran 2023 05 20 130723
Collez l’URL dans le fichier docker-compose en ligne 16.
Il faudra ajouter /slack à la fin de l’URL.
- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://discord.com/api/webhooks/xxxxxxxxxxx/xxxxxxxxxxx/slack
Si votre configuration est bonne, vous devriez avoir un message sur votre serveur :
Capture decran 2023 05 20 130828
Et voici ce qu’il se passe lorsqu’il met à jour un conteneur :
Capture decran 2023 05 20 131847

Activer les notifications Email

Pour activer les notifications email, il faut éditeur les variables d’environnement du docker-compose.
Remplacez les dernières lignes du docker-compose par celles ci :
    environment:
      - TZ= Europe/Paris
      - WATCHTOWER_SCHEDULE= 0 0 6 * * *
      - WATCHTOWER_LABEL_ENABLE= true
      - WATCHTOWER_CLEANUP= true
      - WATCHTOWER_NOTIFICATIONS=email
      - [email protected]
      - [email protected]
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER=mailserver.xyz
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
      - [email protected]
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=password
      - WATCHTOWER_NOTIFICATION_EMAIL_DELAY=30
    volumes: 
      - /var/run/docker.sock:/var/run/docker.sock