• Docker
  • [ Script ] Vérification de containers + Notifications Telegram​

Sympa ! J'ai pas tout lu, mais fonctionne qu'avec traefik du coup ?

Il fonctionne avec :
- Traefik
- nginx+letsencrypt (testé avec le build de jwilder)
- et en mode personalisé si tu rajoutes le label cw.check.url suivi de l'url à tester sur les containers à tester.

ça me fait penser que je peux améliorer ma boucle de détection.
En gros, il cherche d'abord le label custom, et s'il ne le trouve pas, il va chercher l'url en fonction de traefik ou de nginx.

  • BXT a répondu à ça.
  • BXT aime ça.

    Hop, c'est fait 🙂
    MAJ en v1.1.1 :
    - Optimisation de la méthode de recherche de l'URL. Plus besoin de spécifier le type de proxy utilisé, le script va directement aller chercher le bon label. Il va d'abord chercher si un label personnalisé est défini, puis cherchera une URL aussi bien pour traefik que nginx.

    • Optimisation des logs (encore 😃). Je trouve ça plus clair.

    baltho - nginx+letsencrypt (testé avec le build de jwilder)

    Parfait !

    Je vais regarder tout ça un peu plus en profondeur alors 😃 (Si tu as un exemple tout fait, je prends) 😛

    EDIT: Je viens de lire un peu ton script, tu check le frontend (avec VIRTUAL_HOST par exemple pour jwilder) ce qui est dommage.

    Dans des cas comme ruTorrent ou autre, nous mettons une auth basique en place, ce qui retournerait un 403 et non un 200.

    De plus, lors d'une redirection automatique vers un SSL, nous avons un 301 et non un 200. Il semblerait que ton script ne prenne pas en ce cas 🙂 (Pour le prendre en compte, il suffit que tu ajoutes -L à ta ligne 99)

    Un bon script où il reste tout de même un peu de travail

    J'avoue, je n'ai rien qui tourne avec une auth basique (j'utilise le rtorrent de @Wondefall avec Flood). J eme pencherai sur ce cas, mais c'est vrai qu'à froid, je ne vois pas trop comment contourner le problème. Sauf à rajouter 403 dans les codes acceptables, mais ce serait biaisé.. Et faux !
    Après, c'est aussi l'intérêt du label que j'ai rajouté, c'est que tu peux lui faire tester une autre URL que le VIRTUAL_HOST.

    Quand au -L dont tu parles, il y est bien, regardes 😉 (et non, je n'ai pas édité entre temps )

    Il ya a toujours du travail, c'est aussi pour ça que je le partage : avoir des remarques/idées de progression. En 3 jours, j'ai déjà fais 3 révisions !

    Merci à tous ceux qui me font des retours 🙂

    Oh excuse moi, j'avais pas vu ! 😛

    Pour la 403, c'est simple à contourner, au lieu de curl le reverse, tu curl l'IP du container (bon du coup, il faudrait que tu prennes en compte le port du soft)

    EDIT : Perso, j'aimerais éviter d'ajouter un label à chaque container (ce qui m'oblige à refaire un up -d de mes containers en plus) alors qu'un autre moyen est possible

      MéCéBienSur... Pourquoi n'y ai-je pensé plus tôt !
      ça peut même simplifier le reste.

      Le port est facilement récupérable en label pour traefik ou en variable pour nginx, ce n'est donc pas un soucis.

      Je vais retravailler ça, Merci 🙂

      Ouep pour le port, c'est facilement récupérable (Tu fais comme pour ton VIRTUAL_HOST, mais tu fais pour VIRTUAL_PORT à la place pour jwilder :p)

      Pour l'IP, cadeau :

      docker inspect $i | grep "IPAdd" | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

      J'avais trouvé ça moi :
      docker inspect -f '{{ .NetworkSettings.Networks.$DOCKER_FRONTEND_NETWORK.IPAddress }}' $i
      😉

      1 seule commande !
      Plus simple que jq (que je ne connaissais pas au passage) : ça n'impose pas d'installer un outil supplémentaire. De plus, comment réagi jq si le container a plusieurs adresses (cas d'une app avec plusieurs containers font-end/back-end par exemple) ?
      Avec la mienne, pas de doute !

      Par contre, il y a une limitation qui ne fonctionne pas avec le nom que j'utilise pour mon réseau frontend : iil ne supporte pas le "-" dans le nom et je ne trouve pas comment l'échapper. Il va falloir que je le note et que je le change chez moi

      Je vais développer tout ça aujourd'hui et faire des tests.

      Pour github, j'y ai pensé oui. Il va falloir que je regarde ça.

      PS : Qu'est-ce qui te dérange dans le fait de re-créer tes containers pour rajouter un label ?
      Merci pour les pistes !

      Ouep pour --format, c'est le même principe que jq mais intègré a Docker 😉

      Pour le -, je pense pas que ce soit bien dur, je regarderais dans la journée vu que ton script pourrait bien m'aider aussi :p

      Pour le label, ca me gêne surtout car ça fait une ligne en plus dans le compose alors que ça pourrait être récupéré autrement sans ajoutée d'élément (Une ligne tu vas me dire c'est rien, mais fois X containers, t'arrives vite à 7-8 lignes dans un fichier déjà bien blindé)

      OK.

      Personnellement, j'utilise le label uniquement sur les containers où il faut check une URL différente de la racine. Pour le moment, seul elFinder le nécessite parmi les applications que j'utilise.

      Bon, mes premiers tests ne sont pas concluants... ça répond chez toi quand tu curl ip:port ?

      curl -s -o /dev/null -w "%{http_code}" -L ip:port

      Aucune réponse chez moi, mais avant de casser mon iptables, je veux savoir ce qu'il en est sur une config "standard".
      (J'ai complètement bidouiller mon iptables pour museler un peu docker. il y a des chances que ça vienne de là... mais comme je ne vois pas de blocage dans les logs, je préfère confirmer avant de trifouiller là dedans )

      Ouep bien sur que ça répond 😛

      curl -s -o /dev/null -w "%{http_code}" -L 172.18.0.6:8080
      200

      PS: Github serait vraiment cool, comme ça tu pourrais faire une branche stable et une dev, et je pourrais voir où tu en est en temps réel 😃

      EDIT: Je suis pas fan du redémarrage automatique du container en cas de pb, qu'en dis-tu de faire une variable pour ça ?

      Si elle est à 1, on redémarre le container, si 0, on prévient juste que le container a un problème via Telegram

        BXT Je vois pas en quoi faire un up -d est un problème, une image bien créé ne perds pas sa configuration et son état si elle est bien créé.

        Autrement c'est assez complexe de récupérer de manière automatique le port d'écoute d'un serveur web dans un conteneur, comme par exemple emby ou plex, qui de base expose plusieurs port, et certains n'expose rien, puisque ce n'est pas obligatoire.

        Pas mal le script, surtout la méthode pour envoyé une notif via telegram que je connaissais pas.

        @xataz c'est pas compliqué, il suffit de regarder les variables d'env pour nginx de jwilder (VIRTUAL_PORT), et les labels pour traefik (traefik.port devrait faire l'affaire ?)

        Pour le up -d, c'est surtout que ça m'obligerait de le faire sur beaucoup de containers et que ça restart le container je suppose ?

        Btw, on pourrait s'inspirer de ce script pour faire pareil mais avec Slack (CF ce tuto https://www.noobunbox.net/serveur/securite/configurer-des-notifications-ssh-slack)

        ça ne fait pas que le redémarrer, ça le recréé entièrement !

        Bon, j'ai créé un compte github, reste à voir comment ça fonctionne 😃
        https://github.com/Balth0/check_websites

        Pour ta requête de passer le redémarrage en paramètre, ça peut ce faire sans soucis. Si c'est utile à certains, autant le faire.

        Concernant slack, n'étant pas utilisateur (je lui préfère Mattermost 😉 ) je n'ai pas la possibilité de faire des tests (et n'aurais pas le temps de rajouter des fonctions "complexes" avant fin Aout. Je vais avancer le script au max d'ici la fin de semaine en l'état, je le reprendrai au retour des vacances pour rajouter des fonctionnalités.).

        Euhhh moi je vois que des docker restart ? Donc ça le restart juste ?

          BXT C'est une bonne et une mauvaise nouvelle. ça veut dire qu'il va encore falloir que je triffouille mon iptables ! Groumph...

          BXT Actuellement dans mon script, il ne fait qu'un restart en effet.
          Par contre, pour rajouter un label, il faut faire un up -d, et ça, ça détruit le container et le recréé avec les nouveaux paramètres.

          Ah oui, c'est pour ça que je voulais pas le label perso 😛 (Même si en soit, c'est pas dérangeant de supprimer & recréer)