V3.14.0 : Docker sur Raspian Buster

Hello

J’ai installé une Raspbian Buster avec desktop sur mon Rasperry Pi.
Docker en suivant le tuto officiel de Docker et enfin Gladys v3.14.0 en prenant la latest sur DOcker hub.
L’install c’est bien passé, j’ai suivi ça :

En adaptant sur les conseils de @VonOx pour avoir une image de mariadb compatible arm-v7

J’ai créé mon compte et même relié Gladys Gateway, ça semble marcher.
Je voulais installer des modules et je me retrouve coincé avec une erreur

Module install : Fail to install NPM dependencies. Stderr :
/bin/sh: git: not found
Module installation failed! Cleaning folder
(node:1) UnhandledPromiseRejectionWarning: Error: Command failed: git clone --depth=1 https://github.com/gladysproject/gladys-hue ./api/hooks/hue
/bin/sh: git: not found
   at ChildProcess.exithandler (child_process.js:294:12)
   at ChildProcess.emit (events.js:189:13)
    at ChildProcess.EventEmitter.emit (domain.js:441:20)
    at maybeClose (internal/child_process.js:970:16)
    at Socket.stream.socket.on (internal/child_process.js:389:11)
    at Socket.emit (events.js:189:13)
    at Socket.EventEmitter.emit (domain.js:441:20)
    at Pipe._handle.close (net.js:597:12)
(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:1) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

J’ai avancé.

Vu que les adresses de dépôts n’ont pas été mises à jour (en tout cas pour le module Hue), je suis passé en installation manuel et avant j’ai exécuté cette commande sur le pi

docker exec -it 2b84425182b5 apk add git

2b84425182b5 étant l’ID de mon image gladys qui tourne sous Docker.

L’installation de Hue c’est bien passé, la détection des lampes aussi, j’avance j’avance ^^

1 Like

Maintenant, je suis bloqué sur le module Xiaomi.

Aucune passerelle n’est détectée.
Il semblerait qu’il faille affiner la config réseau du container Docker…

D’après ce que j’ai lu il faut passer en host, ce que j’ai fait mais je me retrouve avec une erreur avec cette commande de lancement :

Il n’accepte pas les links en host

 docker run --name gladys-node \
> --restart=always \
> --network host \
> -p 80:8080 \
> -v /root/hooks:/src/api/hooks \
> -e NODE_ENV=production \
> -e MYSQL_HOST=mariadb \
> -e MYSQL_PASSWORD=mysecretpassword \
> -e MYSQL_PORT=3306 \
> -e TZ=Europe/Paris \
> --link gladys-mariadb:mariadb \
> -d gladysassistant/gladys
docker: links are only supported for user-defined networks.

@VonOx m’a orienté vers du macvlan mais je patauge dans la config sur comment faire avec mon installation. J’ai croisé cet article :
https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/

Un peu d’aide ? :smiley:

Tu peux pas link en Macvlan c’est écrit :grin: et c’est logique .

En Macvlan c’est comme ci ton conteneur était un pc connecté à ton router. Il a sa propre IP/interface. Donc il faut faire de même pour le conteneur mysql. En host c’est un peu différent aussi.

Ce qui fait que dans la commande pour créer le conteneur Gladys il faut spécifier les bonnes infos pour MYSQL_HOST ( ip du conteneur) et virer l’argument link.

J’utilise du Macvlan car ça me simplifie la vie dans certains cas. Mais c’est pas obligatoire pour la connexion au gateway xiaomi. Le host doit être suffisant mais impossible de confirmer car je n’ai pas de gateway fonctionnelle.
Dès mon retour de vacances je post toutes les commandes que j’ai utilisé pour Gladys 3 sous docker.

Merci.
Du coup, je visualise un peu mieux quoi faire.
Je dois fixer l’ip du container Mysql.
Mettre en host le container Gladys et spécifier l’ip de mysql, on verra bien alors ^^

EDIT : J’ai trouvé l’ip de mon container et c’est tout…
Je bug complet, j’ai vraiment du mal à saisir les nuances de réseaux dans Docker (et ailleurs, c’est pas ma tasse de thé…)

Je vais donc attendre gentiment ton retour de vacances ou attendre le premier coup de pouce qui se manifeste ! :stuck_out_tongue:

RTFM :grin: pour t’instruire

On va y arriver ( enfin tu va y arriver)

Ouais cette doc me sort par les trous de nez, mon cerveau ne veut pas comprendre :stuck_out_tongue:

L’interface macvlan

docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.254 \
  -o parent=eno1 \
  -o macvlan_mode=bridge macvlan

parent ==> c’est l’interface de l’hote qui est connecté au réseau
gateway ==> C’est l’ip de ta box/routeur

Le macvlan me permet de voir proprement Gladys sur le réseau, et de pouvoir router facilement au besoin

Le conteneur mariadb

docker run --name gladys-mysql \
  --net macvlan \
  --ip 192.168.1.100 \
  --restart=always \
  -v /opt/gladys/mysql:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=XXXXXXXXX \
  -e MYSQL_DATABASE=gladys \
  -e TZ=Europe/Paris \
  -d mariadb:latest

Le conteneur Gladys

docker run --name GladysProd \
  --restart=always \
  --net macvlan \
  --ip 192.168.1.101 \
  -v /opt/gladys/hooks:/src/api/hooks \
  -e TZ=Europe/Paris \
  -e NODE_ENV=production \
  -e MYSQL_HOST=192.168.1.100 \
  -e MYSQL_PASSWORD=XXXXXXXXX \
  -e MYSQL_PORT=3306 \
  -d gladysassistant/gladys:v3

Attention les volumes sont surement à modifier chez toi
C’est comme ça que ça tournait chez moi.

Bon…

J’ai fait du caca. :stuck_out_tongue:
J’ai créé le macvlan : pas de soucis.
Ensuite, j’ai connecté mon container de db dessus en lui assignant une ip, mais sans le couper.

Enfin, j’ai coupé gladys et lancé avec tes commandes.
Chose bizarre, j’ai pas de gladys listé dans le matos repéré par ma box…

Voici un peu plus de détails :
https://pastebin.com/hG5ruVvd

Est ce que l’ip assignée était libre ?

Pour voir tous les conteneur ( même ceux arrêté ) fais un docker ps -a
Et le classique docker logs gladys-node pour voir ce qui ce passe

Oui ip libre.
Le docker ps -a

[email protected]:~ $ docker ps -a
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                   PORTS               NAMES
bd5a029cd0e9        gladysassistant/gladys          "node app.js"            25 hours ago        Up 25 hours                                  gladys-node
2b75ed258097        gladysassistant/gladys          "node init.js"           13 days ago         Exited (0) 13 days ago                       gladys-node-init
3036b0b8d6ca        459below/mariadb-armv7:latest   "docker-entrypoint.s…"   2 weeks ago         Up 3 days                                    gladys-mariadb

C’est normal l’absence de ports ?

Les logs

[email protected]:~ $ docker logs gladys-node
Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.
Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.

=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
WARNING: You currently have your default CORS settings configured to allow
all requests from all origins, with credentials.  This may leave your app
open to attack by third-party sites!  Consider making your `origins` setting
more restrictive or setting `credentials` to false, or else make certain that
none of your routes perform sensitive actions or reveal secure information.
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

Gladys version : 3.14.0
Gladys Gateway: Init Procedure : Getting keys from database
(node:1) [DEP0095] DeprecationWarning: timers.enroll() is deprecated. Please use setTimeout instead.
Bootstrap is taking unusually long to execute its callback (2000 milliseconds).
Perhaps you forgot to call it?  The callback is the first argument of the function, `cb`.
No brain file detectedError: ENOENT: no such file or directory, open './cache/classifier.json'
Gladys brain loaded with success !
(node:1) [DEP0096] DeprecationWarning: timers.unenroll() is deprecated. Please use clearTimeout instead.
Gladys database schema/data is up to date. No migration required. ( DB = 3.14.0 )
Successfully checked DB version.
Scheduled sunrise to 9/1/2019, 7:22:37 AM.
Scheduled sunset to 9/1/2019, 8:44:01 PM.

               .-..-.

   Sails              <|    .-..-.
   v0.12.14            |\
                      /|.\
                     / || \
                   ,'  |'  \
                .-'.-==|/_--'
                `--'-------' 
   __---___--___---___--___---___--___
 ____---___--___---___--___---___--___-__

Server lifted in `/src`
To see your app, visit http://localhost:8080
To shut down Sails, press <CTRL> + C at any time.

-------------------------------------------------------
:: Sun Sep 01 2019 17:37:24 GMT+0200 (Central European Summer Time)

Environment : production
Port        : 8080
-------------------------------------------------------
Gladys Gateway: Init Procedure : Keys retrieved with success! Connecting in websockets...
Xiaomi module : debug mode '0' active!
Xiaomi module: debug device mode inactive!
Xiaomi module: No registered gateway password!
(node:1) UnhandledPromiseRejectionWarning: Error: getaddrinfo EAI_AGAIN developer.gladysassistant.com developer.gladysassistant.com:443
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Unhandled rejection Error: getaddrinfo EAI_AGAIN developer.gladysassistant.com developer.gladysassistant.com:443
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
Event : create : new Event with code : gladys-launched
Scenario : Trigger : New event : gladys-launched
Scenario : Trigger : Found 0 launchers with code gladys-launched.
Event : create : new Event with code : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Event : create : new Event with code : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Event : create : new Event with code : devicetype-new-value
Event : create : new Event with code : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Event : create : new Event with code : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Event : create : new Event with code : devicetype-new-value
Event : create : new Event with code : devicetype-new-value
Event : create : new Event with code : devicetype-new-value
Event : create : new Event with code : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Event : create : new Event with code : devicetype-new-value
Event : create : new Event with code : devicetype-new-value
Event : create : new Event with code : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : New event : devicetype-new-value
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Scenario : Trigger : Found 0 launchers with code devicetype-new-value.
Scenario : Trigger : Found 0 launchers with code devicetype-new-value

ETC ETC

Bah gladys fonctionne là ^^

J’ai jamais dit le contraire :stuck_out_tongue:
Je peux juste pas aller à l’adresse 192.168.1.101, à moins que j’ai compris de travers le truc…

Le port de Gladys c’est 8080 @Hamtaro , tu devrai essayer :slight_smile:

:D

C’est écrit partout dans le log au début

Already done… Nada
Edit :
Ma box attribue des ip entre .100 et .200, un paramètre à ajuster dans le network macvlan ?

docker exec -it gladys-node ip addr

Pour voir la conf ip