Forum des NAS

Tous les fabricants de NAS réunis sur un forum unique : Asustor, Qnap, Synology...

Les tutoriaux rédigés par les membres
Avatar de l’utilisateur
par EVOTk
#94417
Bonjour,
Voici un tuto, pour ceux qui souhaiterai installer Watchtower en docker sur un NAS Synology.

Nous allons ici utiliser Portainer ou docker-compose, cette solution ne pourra donc ce faire, uniquement sur un NAS ou est possible d'installer Docker.

Le but de ce tuto sera de rendre cette installation facile et accessible a tous, bien que loin d’être un expert de docker/docker-compose, n’hésiter pas à répondre à ce sujet avec vos interrogations, ..
Pour ceux qui sont plus à l'aise avec ce genre d'installation, n'hésiter pas a proposer des améliorations, ou des conseils, ...

Pré-requis :
Avoir installé le paquet Docker
Avoir un accès SSH au Synology*

* Pour faire cette manip, il vous faudra vous connecter en SSH à votre NAS, si vous ne savez pas le faire, vous trouverez ici un tuto explicatif : [Tuto] Acceder à son NAS en lignes de commande.

Image

Watchtower c'est quoi ?
Watchtower est un conteneur qui va surveiller vos conteneurs à la recherche de mise a jour disponible ! Si une mise a jour est disponible, alors Watchtower, arrete le conteneur, récupere la nouvelle image, et re-créé le conteneur avec le nouvelle image.


Sommaire :
1/ Création du conteneur

_____a/ via Portainer
_____b/ via docker-compose

2/ Utilisation
3/ Les notifications

_____a/ via Discord
_____b/ via Gotify



1/ Création du conteneur
Watchtower peut être paramètré de deux façon, soit par defaut il surveille tous les conteneurs SAUF ceux qu'on souhaite exclure, ou alors il ne surveille QUE les conteneurs que l'on souhaite.

Ici, c'est cette deuxième option que j'ai choisi, je souhaite que Watchtower ne mette a jour que les conteneurs auquel je lui aurait autorisé a la faire.

_____b/ via Portainer
Dans Portainer, cliquer sur Stacks, puis Add Staks :
Image

Donner un nom a votre stack, par exemple "watchtower", en en dessous, coller le compose ci dessous :
Image

Code : Tout sélectionner
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= * 0 * * * *
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Ensuite, pour créer le conteneur on clique sur "Deploy the stack"
Image

_____b/ via docker-compose
Nous allons créer un fichier "docker-compose.yml" avec les paramètres du conteneurs.
Celui-ci est a placer dans /volume1/docker/jellyfin.

Voici mon fichier "docker-compose.yml" :

Code : Tout sélectionner
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_POLL_INTERVAL=21600
      - WATCHTOWER_SCHEDULE= * 0 * * * *
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Il n'y a normalement aucunes modifications a faire, enregistrer votre fichier sous le nom : docker-compose.yml
Puis charger le fichier sur votre NAS ( chez moi, il se trouve dans /volume1/docker/ )

Ensuite en SSH, je passe en mode administrateur avec la commande :

sudo su -

Le mot de passe admin vous est demandé.

Dans mon dossier /volume1/docker, j'ai chargé mon fichier docker-compose.yml. Je vais donc accéder à ce dossier, pour cela je fait :

cd /volume1/docker

Ensuite, afin "d’exécuter" mon fichier docker-compose.yml, je tape en ssh :

sudo docker-compose up -d

Le conteneur est créer, puis démarre.

2/ Utilisation
Maintenant que Watchtower est en route, nous allons lui dire quel conteneur il peu mettre à jour.

Pour cela, il faut rajouter le labels "com.centurylinklabs.watchtower.enable=true" aux conteneurs que watchtower doit surveiller.

Un exemple sur mon compose de jellyfin :
A l'origine, il est comme ceci :

Code : Tout sélectionner
version: "3" 

services: 
  jellyfin: 
    image: linuxserver/jellyfin:latest
    container_name: jellyfin
    restart: unless-stopped
    environment:
     - PUID=9999
     - PGID=111
     - TZ=Europe/Paris
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0
    networks:
      - jellyfin
    ports:
      - 8096:8096
    expose:
      - 8096
    volumes: 
      - /volume1/docker/jellyfin/config:/config 
      - /volume1/docker/jellyfin/cache:/cache

  nginx:
    image: nginxinc/nginx-unprivileged:alpine
    container_name: jellyfin_proxy
    restart: unless-stopped
    networks:
      - jellyfin
    volumes:
      - /volume1/docker/jellyfin/jellyfin_nginx.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - "8083:8080"

networks:
  jellyfin:
    external:
      name: jellyfin

Afin que watchtower surveille le conteneur jellyfin, nous allons rajouter le labels, ce qui donne ceci :

Code : Tout sélectionner
version: "3" 

services: 
  jellyfin: 
    image: linuxserver/jellyfin:latest
    container_name: jellyfin
    restart: unless-stopped
    labels:
      - com.centurylinklabs.watchtower.enable=true
    environment:
     - PUID=9999
     - PGID=111
     - TZ=Europe/Paris
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0
    networks:
      - jellyfin
    ports:
      - 8096:8096
    expose:
      - 8096
    volumes: 
      - /volume1/docker/jellyfin/config:/config 
      - /volume1/docker/jellyfin/cache:/cache

  nginx:
    image: nginxinc/nginx-unprivileged:alpine
    container_name: jellyfin_proxy
    restart: unless-stopped
    networks:
      - jellyfin
    volumes:
      - /volume1/docker/jellyfin/jellyfin_nginx.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - "8083:8080"

networks:
  jellyfin:
    external:
      name: jellyfin

Dans cette exemple, le conteneur jellyfin est surveillé :)


3/ Les notifications
_____a/ Discord
Pour utiliser les notifications Discord, nous allons modifier notre docker-compose afin d'y inclure quelques arguments supplémentaires.

Voici les arguments a inclure :

Code : Tout sélectionner
      - WATCHTOWER_NOTIFICATIONS=slack
      - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower
      - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://discordapp.com/api/webhooks/

Notre compose prend donc cette forme :

Code : Tout sélectionner
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= * 0 * * * *
      - 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://discordapp.com/api/webhooks/
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Ici, nous allons devoir modifier la variable WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL par l'url du webhooks que va vous fournir Discord.
A la fin de l'url, il faudra rajouter /slack

Exemple sur votre url est https://discordapp.com/api/webhooks/333 ... xxxxxxxxxx alors il faudra renseigner : https://discordapp.com/api/webhooks/333 ... xxxx/slack

_____b/ Gotify
Pour utiliser les notifications Gotify, nous allons modifier notre docker-compose afin d'y inclure quelques arguments supplémentaires.

Voici les arguments a inclure :

Code : Tout sélectionner
      - WATCHTOWER_NOTIFICATIONS=gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_URL=https://gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN=xxxxxxxxxxx

Notre compose prend donc cette forme :

Code : Tout sélectionner
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= * 0 * * * *
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
      - WATCHTOWER_NOTIFICATIONS=gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_URL=https://gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN=xxxxxxxxxxx
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Ici, nous allons devoir modifier la variable WATCHTOWER_NOTIFICATION_GOTIFY_URL par l'url de votre serveur Gotify et WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN par le "token" que vous aurait créer dans la section "App" de Gotify.


Source : https://github.com/containrrr/watchtower
Merci @MANDO ( bisous :-* )

18-10-2020 - Suppression de la variable "WATCHTOWER_POLL_INTERVAL=21600", elle ne peu pas co-habiter avec "WATCHTOWER_SCHEDULE" il faut donc choisir l'un ou l'autre. Merci @oracle7
05-09-2020 - Explications sur la mise en place des notifications discord et/ou gotify
04-09-2020 - Création du tuto
Avatar de l’utilisateur
par webmail
#95251
OMG EVOTk, je le dis à chaque fois mais tu me fais toujours découvrir des trucs que je ne connaissais pas !
va vraiment falloir que je le teste celui la
ADM 3.5.2.RAG2

C'était déjà le cas avec la m[…]

Effectivement, je rencontre aussi ce pb. depuis […]

QNAP TS-453D - RAM max

la limite du CPU est 8GB... même si vous upg[…]

updated php core to 7.4.12 openssl to 1.1.1h

Site hébergé sur un serveur IKOULA

Ikoula