# Watchtower

Outil qui surveille automatiquement vos conteneurs Docker et, si nécessaire, peut les mettre à jour pour garantir qu'ils disposent toujours de la dernière version. Il facilite la gestion de vos applications en s'assurant qu'elles restent à jour sans intervention manuelle.

### Précautions avant la mise à jour automatique

Je vous recommande vivement de ne pas activer la mise à jour automatique. Il est important de **relire les notes de version** avant de procéder à une mise à jour, afin de suivre les changements et d’éviter tout problème ou incompatibilité qui pourrait casser votre environnement.

### Fonctionnement de Watchtower

- Surveille automatiquement vos conteneurs Docker.
- Si une mise à jour est disponible, il peut, selon la configuration, la télécharger et l’appliquer.
- Peut envoyer des notifications pour vous tenir informé des actions effectuées ou en cours.

**Note :** Il est conseillé de configurer Watchtower en mode **surveillance ONLY** (`WATCHTOWER_MONITOR_ONLY: "true"`) si vous souhaitez d’abord recevoir des notifications sans qu’il procède automatiquement à la mise à jour.

### Configuration de Webhook pour notifications

Pour recevoir des notifications dans votre serveur Discord lorsque Watchtower effectue une action (mise à jour, erreur, etc.), vous pouvez utiliser la fonction de webhook de Discord.

### Comment créer un webho, sans attendre la mise à jour automatique.ok Discord ?

1. Ouvrez Discord et allez dans le serveur où vous souhaitez recevoir les notifications.  
2. Sélectionnez le canal où vous souhaitez envoyer les messages (ex : #watchtower).  
3. Cliquez sur la petite roue dentée à côté du nom du canal pour ouvrir ses paramètres.  
4. Dans le menu de gauche, cliquez sur **Intégrations** puis sur **Webhooks**.  
5. Cliquez sur **Créer un webhook**.  
6. Personnalisez le nom du webhook, choisissez une image si vous le souhaitez, puis cliquez sur **Copier le webhook URL**.  
7. Conservez cette URL, vous en aurez besoin pour la configuration.

### Intégrer le webhook dans votre configuration Watchtower

- Pour recevoir des notifications dans votre serveur Discord, vous devez utiliser la variable d’environnement `WATCHTOWER_NOTIFICATION_URL` dans votre fichier de configuration Docker compose ou dans vos variables d’environnement.
- Remplacez la valeur `"discord://token@id"` par les valeurs de l'URL votre webhook Discord :  
  ```
  https://discord.com/api/webhooks/ID/TOKEN
  ```  
- Exemple de configuration : 
```yaml
environment:
  WATCHTOWER_NOTIFICATION_URL: "discord://M8q5hBYCHqwFTD3R838KIbb-CIWhGNTPLtHM1wd9S3vlqEIuZGmlNT78Pnur04p46aVq@1416880135902335086"
```  
Exemple modifié :

```yaml
services:
  watchtower:                                         # Permet de mettre à jour automatiquement 
    image: containrrr/watchtower:latest
    container_name: watchtower                        # Nom du conteneur
    restart: unless-stopped                           # Redémarre automatiquement sauf si arrêté manuellement
    environment:
      TZ: Europe/Paris                                # Fuseau horaire
      WATCHTOWER_NOTIFICATIONS_HOSTNAME: "nom"        # Nom d'hôte
#      WATCHTOWER_INCLUDE: "nginx-proxy portainer"     # Liste des conteneurs à surveiller (séparés par des espaces)
      WATCHTOWER_SCHEDULE: "0 8 * * 0"                # Vérification/Notification dimanches à 8 heures 
      WATCHTOWER_MONITOR_ONLY: "true"                 # Mode surveillance uniquement : détecte les mises à jour mais ne les applique pas
      WATCHTOWER_CLEANUP: "true"                      # Supprime automatiquement les anciennes images après mise à jour
      WATCHTOWER_INCLUDE_RESTARTING: "false"          # Inclut les conteneurs en cours de redémarrage dans la surveillance
                                                      # URL de notification Discord (webhook)
      WATCHTOWER_NOTIFICATION_URL: "discord://token@id"
      WATCHTOWER_NOTIFICATION_TEMPLATE: |
        {{range .}}{{.Time.Format "01-02-2006 15:04:05"}} ({{.Level}}): {{.Message}}{{println}}{{end}}
      WATCHTOWER_NOTIFICATIONS: shoutrrr
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
```

**Remarques importantes :**  
- Si vous utilisez un autre service de notifications, adaptez l’URL en conséquence en suivant [la documentation officielle](https://containrrr.dev/watchtower/notifications/)

### Mettre à jour un conteneur avec Watchtower manuellement  
Vous pouvez lancer Watchtower une seule fois et à tout moment, avec les commandes ci-dessous.

Mettre à jours un seul conteneur Docker et supprime l'ancienne image :
```
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once --cleanup nom_du_conteneur
```

Tout les conteneurs et supprime l'ancienne image :
```
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once --cleanup
```