Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MilesTEG1/ee9c38f770171f8d05204fcfbcb3024f to your computer and use it in GitHub Desktop.
Save MilesTEG1/ee9c38f770171f8d05204fcfbcb3024f to your computer and use it in GitHub Desktop.
Comment installer Portainer sur un NAS Asustor compatible Docker, en ligne de commande avec `docker compose` ?

Installer Portainer Business Edition (EE) sur un nas Asustor, avec docker compose (en ssh)

Ce tutoriel fonctionne aussi pour Portainer Community Edition (CE) : il faudra juste ajuster le fichier docker-compose.yml en changeant l'image.


1. Pré-requis

  • Savoir accéder au NAS en SSH via un terminal ;
  • Avoir installé le paquet Docker Engine via App Central ;
  • Avoir quelques rudiments sur l'utilisation de Docker et le vocabulaire qui va avec ;
  • Avoir créé un dossier partagé /volume1/docker/ ;
  • Savoir créer un utilisateur, et lui affecter des droits de lecture/écriture sur un dossier partagé ;
  • (Optionnel) Savoir créer un groupe, lui affecter des utilisateurs et des droits de lecture/écriture sur les dossiers partagés.

2. Préparation du nécessaire

2.1. Création d'un utilisateur dédiée à Portainer

Depuis l'interface d'ADM (dans "Access Control"), il faut créer un utilisateur dédiée à Portainer qui aura les droits d'accès aux dossiers créés précédemment.

image

Noter au passage le UID de cet utilisateur, nous en aurons besoin plus bas.

Il nous faut aussi le GID du groupe auquel appartient cet utilisateur. Si vous n'avez pas choisi de créer un groupe dédié à Docker, qui n'a les droits d'accès que sur le dossier /volume1/portainer/. Ce GID est présent aussi dans le Access Control, dans la section "Local Group".

image

2.2. Création des dossier ../portainer/ et

  • Quand je crée un conteneur, j'utilise toujours un volume défini par un point de montage sur le NAS, ainsi les données sont toujours présentes, même si je supprime le conteneur.
    Je ne passe donc pas par un volume non persistant.

  • On va considérer que les dossiers des conteneurs sont présents dans le dossier /volume1/docker/, si ce dossier n'existe pas, soit il vous faudra le créer soit vous devrez utiliser un autre dossier que vous avez déjà créé/utilisé.

  • Nous créons donc un nouveau dossier dans /volume1/docker/ avec la commande suivante :

    mkdir -p /volume1/docker/portainer/data
    Note : (cliquer pour lire)

    L'option -p va permettre de créer les sous-dossiers qui manquent et ne renverra pas d’erreurs s'ils existent.

2.3. Préparation du fichier docker-compose.yml

Pour installer Portainer, on va passer par l'utilisation de la commande docker compose up -d depuis le dossier /volume1/docker/portainer/.

Pour cela, il faudra placer le fichier docker-compose.yml suivant dans le dossier /volume1/docker/portainer/ :

version: "2.4"
services:
  portainer:
    ## Image pour Portainer CE (Community Edition, gratuite)
    # image: portainer/portainer-ce:latest

    ## Image pour Portainer EE (Businnes Edition, 5 Nodes gratuits : https://www.portainer.io/take-5 )
    image: portainer/portainer-ee:latest    # https://docs.portainer.io/start/upgrade/tobe/docker#upgrading-from-version-2.0.0-and-later
    
    container_name: portainer
    hostname: portainer
    network_mode: bridge

    environment:
      - PUID=1045
      - PGID=100
    
    ## ################################################
    ## Label pour Watchtower qui fera une mise à jour automatique. Peut être supprimé/commenté si Watchtower ne sera pas utilisé.
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    ## ################################################

    volumes:
      # Ce volume est celui qui va contenir les données de portainer.
      - /volume1/docker/portainer/data:/data

      # Ce volume est le docker.sock, vital pour controler Docker, mais aussi risqué. Il ne faut pas le mettre dans n'importe quel conteneur. Surtout qu'ici il sera en lecture+écriture...
      - /var/run/docker.sock:/var/run/docker.sock
    
    ports:
      - 9000:9000     # Web-UI
      # - 8000:8000   # Edge Agent :    https://docs.portainer.io/admin/environments/add/edge
      # - 9443:9443   # Portainer API : https://docs.portainer.io/api/access
    
    restart: always

    healthcheck:
      test: ["CMD", "/docker", "container", "top", "portainer"]
      start_period: 15s
      interval: 90s
      timeout: 10s
      retries: 3

Les ports 8000 et 9443 ne sont pas indispensables pour une utilisation simple. Tout dépendra de l'usage de Portainer. Pour le moment on les laisse commentés, donc non utilisés.

3. Création du conteneur en SSH avec docker compose

Il faut :

  • se placer en mode root, ou bien il faudra taper sudo devant la commande ;
  • aller dans le dossier contenant le fichier docker-compose.yml ;
  • lancer la commande : docker compose up -d
  sudo -i
  cd /volume1/docker/portainer/
  docker compose up -d
Note : (cliquer pour lire)

Cette commande va récupérer l'image présente dans le fichier docker-compose.yml et construire le conteneur selon ses spécifications. Le paramètre -d sert à lancer le conteneur en mode daemon c'est-à-dire qu'il s'exécutera en arrière plan, même quand la commande sera terminée.


Le processus de création est alors lancé :
image

Une fois terminé, vous aurez ceci :
image

Il sera alors temps de passer à l'interface WEB.

4. Connexion à l'interface WEB

Il suffit te taper l'adresse IP du NAS suivi du port de connexion 9000 dans un navigateur : http://192.168.0.100:9000.
image

Il faudra alors choisir un mot de passe robuste. Il est également possible de changer le nom de l'administrateur de Portainer. Pour le tuto, je laisse admin.

Il est également possible de restaurer une sauvegarde de Portainer faite auparavent :
image

Note pour ceux qui ne vont pas vite : (cliquer pour lire)

Si comme moi vous tardez à créer le compte administrateur de Portainer lors de la première connexion, vous aurez cet écran :
image Il faudra alors, recréer le conteneur, et ne pas tarder autant à aller créer l'administrteur 😃

Dans le cas de l'édition Business pour laquelle vous avez récupérer gratuitement une licence pour 5 noeuds, c'est ici qu'il faut entrer cette licence :
image

On arrive ensuite sur cet écran :
image

Il suffira de choisir : image

image

Il est possible de renommer l'environnement actuellement appelé "local" :
image

On pourra alors voir dans la liste des conteneurs le seul et unique actuellement lancé : Portainer.
image

Sa stack n'est pas modifiable compte tenu qu'il a été créé en-dehors de portainer.

5. Exemple de création de stack, avec Watchtower

Une stack dans Portainer, c'est ce qui va permettre de créer un ou plusieurs conteneurs en même temps, liés ou non.

Je vais prendre l'exemple de Watchtower, conteneur qui permet de mettre à jour à intervale fixe les conteneurs qui possèdent le label adapté :

    labels:
      - "com.centurylinklabs.watchtower.enable=true"

Dans l'éditeur WEB, il faut coller le contenue d'un fichier docker-compose.yml après avoir donné un nom à la stack :
image

image

Voilà le contenue du fichier docker-compose.yml que je vais utiliser. J'utilise les notifications email, il faudra modifier les paramètres SMTP en adéquation avec votre fournisseur).

#
# Doc de Watchtower : https://containrrr.dev/watchtower/
# Dépôt GitHub : https://github.com/containrrr/watchtower/
#
---
version: "2.4"
services:
  watchtower:
    image: containrrr/watchtower:amd64-latest
    container_name: watchtower
    network_mode: bridge
    environment:
      - WATCHTOWER_NOTIFICATIONS=email
      #- WATCHTOWER_NOTIFICATIONS_LEVEL=debug
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_DEBUG=true
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_TIMEOUT=30s
      # Utiliser soit SCHEDULE soit INTERVAL (ce dernier en sec)
      # Pour SCHEDULE : https://crontab.guru/#0_9_*_*_*
      # Ajouter un 0 en premier pour les secondes : secondes | minutes | heures | jour du mois | mois | jour de la semaine
      #- WATCHTOWER_SCHEDULE=0 0 6 * * *
      - WATCHTOWER_SCHEDULE=0 0 5 * * *
      #- WATCHTOWER_POLL_INTERVAL=3000
      - TZ=Europe/Paris
      
      #####################################################################
      # Pour les notifications en emails :
      - WATCHTOWER_NOTIFICATIONS_HOSTNAME=Asustor-AS6704T
      - WATCHTOWER_NOTIFICATION_EMAIL_FROM=admin@ndd.tld
      - WATCHTOWER_NOTIFICATION_EMAIL_TO=admin@ndd.tld
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER=mail.ndd.tld
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=admin@ndd.tld
      - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=0123456789@azertyuyuiop
      - WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2
      
      #####################################################################
    
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
      
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

Le déploiement est en cours :
image

Un message apparaitra en haut à droite indiquant le succès de l'opération ou au contraire son échec.
image

Une fois terminé, on a notre nouvelle stack et notre nouveau conteneur :
image image

Dans mon exemple, j'ai bien reçu l'email de lancement d'après création :
image

Voilà. À vous de jouer, et de créer plein de conteneurs ^^

Date de création du tuto : 09/11/2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment