[tuto] Docker jeedom/mariadb reseau macvlan

Tags: #<Tag:0x00007f282e00b0d8> #<Tag:0x00007f282e00b010>

Bonjour,

Pour ceux qui tombent sur ce post pour essayer de configurer docker/jeedom (comme moi) et qui sont obligés d’utiliser le network_mode host de docker (pour acces au multicast de xiaomihome par exemple) , il y a une autre solution à explorer (qui marche pour moi): C’est d’utiliser le réseau macvlan de docker.

Pour ma part, j’utilise une gateway xiaomi et il faut que le plugin xiaomihome accède au multicast envoyé par cette gateway.
En créant le serveur jeedom dans un réseau macvlan (subnet identique au host docker), le serveur docker et plus particulièrement le plugin xiaomihome recoit enfin le multicast! (vérifié via tcpdump)

Il y a des effets de bord:

Mais tt fonctionne pour moi:
Ma config
Host docker: ubuntu 18.04 (docker 19.03)
Container: (jeedom:master, debian 9) + mariadb:latest

Sur demande docker-compose et Dockerfile
Il me reste encore à consolider le redémarrage des demons xiamihome/zwave apres relance des container.

Christophe.

1 J'aime

C’est parti pour la petite explication :nerd_face:

[tuto] Monter un docker jeedom composé d’un container jeedom et d’une base de donnée mariadb dans un reseau macvlan

Utilisation d’un network macvlan: Pour faire simple, cela simule des containers sur ton reseau local…même subnet.

Avantage: :heart_eyes:

  • Jeedom pourra récupérer le multicast envoyé par la gateway xiaomi! comme dans le mode host.
    Moi je ne voulais pas utiliser host car non portable sous windows…
  • je vois tous mes containers comme s’ils étaient sur mon réseau local, même ma box.

Inconvénient: :rage:

  • Je viens de lire qu’il n’est pas supporté non plus sur windows comme le mode host. :cry:
    Du coup, je ne pourrai pas non plus migrer mon hote linux sous windows si nécessaire…je suis condamné avec mon linux now :smiling_face_with_three_hearts:…ou repasser sous hyper-v… :thinking:
  • j’ai mis la db dans le même réseau local, pas top/secu. Un mode bridge pour vos infras backend est une meilleur/autre solution (avec une patte du container web dans celui-ci)

Network

Ca donne ca au final:
Internet --> box (192.168.1.1) --> hote docker (192.168.1.A)
avec 2 containers docker
(web) 192.168.1.B
(db) 192.168.1.C

Résumé:

j’ai utilisé docker-compose pour monter les 2 containers
J’ai 2 Dockerfile pour chaque container, quasi vide mais qui pourrait évoluer pour prendre en compte certaine chose si je dois tt réinstaller et pas refaire certaines étapes manuellement)

Je ne rentrerai pas ds le détail de l’arborescence ou des commandes docker, docker-compose, etc. Il y a plein de site pour découvrir/apprendre.:nerd_face:

Création du reseau macvlan

Avant de créer les containers, il faut créer le réseau macvlan (j’ai utilisé ip-range pour limiter docker a l’utilisation de ce range, pour ne pas interférer avec tout mes autres équipements derrière ma box sur le même subnet.

docker network create -d macvlan \ 
 --subnet=192.168.1.0/24 \
 --gateway=192.168.1.1 \
 --ip-range=192.168.1.X/27 \
 -o parent=br2 local_net`

Pour vérifier:
docker network ls
docker network --help

Création des containers

Je vous donne mes fichiers et je vous laisse les adapter à votre convenance.

particularité:

le devices c’est ma clé zwave
ROOT_PASSWORD c’est le mdp admin ds l’interface (je crois :thinking:)
Dans le Dockerfile, les packages en plus sont pour passer en https (qu’il faudra activer manuellement, mais j’ai vu qu’il existait un plugin jeedom pour les feignasses, a vous de voir :grin:) et avoir des commandes réseaux pour debug
Si vous vous posez des questions pour d’autres trucs, il faudra aller sur la très bonne doc de docker :face_with_monocle:

docker-compose.yml

version: '3.7'

services:

  web:
    build:
      context: ./web
    image: jeedom/web:1
    restart: always
    privileged: true
    devices:
      - "/dev/ttyACM0:/dev/ttyACM0"
    volumes:
       - /mon_chemin_sur_mon_hote/web/html:/var/www/html
    networks:
      local_net:
        ipv4_address: 192.168.1.B
    environment:
      ROOT_PASSWORD: my_precious
    depends_on:
      - db

  db:
    build:
      context: ./db
    image: jeedom/db:1
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: my_precious_too
    networks:
      local_net:
        ipv4_address: 192.168.1.C

networks:
  local_net:
    external: true

Dockerfile (web)

FROM	jeedom/jeedom:master

RUN apt-get update -qy && \
    apt-get install -y \
    net-tools tcpdump certbot python-certbot-apache && \
    apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
    rm /etc/localtime && \
    ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime

VOLUME /var/www/html

Dockefile (db)

FROM	mariadb:latest

Reste à faire

Dans l’ordre ou presque:

  • Se connecter a l’interface jeedom
    http://192.168.1.B
  • installer vos plugins
  • relancer les dependances
  • restaurer votre config jeedom de votre ancien serveur (a verifier si l’installation des plugins n’est pas superflu dans ce cas): votre de masse jeedom sera celui de votre ancien serveur ensuite :wink:
  • passer en https via cerbot ou le plugin jeedom
  • Sous mariadb: creer un compte jeedom et modifier le mot de passe root mysql
    il est ici /var/www/web/html/core/config/common.config.php
  • Tester vos scenarios, tous les plugins, etc, regarder les logs, etc.
  • Qd vous pensez que tt est ok. Et bien arrêtez et relancez les containers…vous aurez droit à des surprises…comme moi, après qq arrêt/relance et ajustement et qq heures, vous pourrez dire que la conf semble correct et que vous avez migré sous docker. Là, il faudra penser à sauvegarder vos containers via docker commit et/ou docker docker save. J’ai prévu de me faire un script shell ou python que je mettrai sous cron à base des commandes backup plus bas.

Qq commandes docker

Parce que je ne suis pas si méchant :innocent:

  • Lister les docker qui tournent (ou pas)
docker ps
docker ps -a
  • Arrêt/relance
docker-compose up
docker start|stop
  • On supprime tt et on recommence…again and again…
docker stop jeedom_web_1 jeedom_db_1
docker rm jeedom_web_1 jeedom_db_1
rm -rf  /mon_chemin_sur_mon_hote/web/html
docker-compose up --build
  • Démarrage d’un container docker adminer (equivalent de phpmyadmin)
    docker run -d --network local_net --name adminer adminer
    accessible par http://192.168.1.D:8080
    je vous laisse trouver son ip via: docker network inspect adminer

  • Se connecter au container web debian et faire les operations hors console jeedom
    docker exec -ti <container_name> bash

  • Backup

    • sauvegarde d’un container
      docker commit -p <id> <backup_container_name>
      on le retrouve via docker images (qq part sur votre hote docker dans /var/lib/docker)
    • Sauvegade sous format tar ou tgz:
      docker save -o <backup_container_name>.tar <backup_container_name>
      docker save <backup_container_name> | gzip - > <backup_container_name>.tgz

@lunarok
A voir s’il ne faut pas mettre à jour la doc du plugins xiaomihome pour dire que le mode macvlan est également compatible comme le mode host.

1 J'aime

Je profite pour passer par là pour pousser mes dernières évolutions Docker.
Si ça peut aider/inspirer certains…

En gros:

  • Création d’un macvlan uniquement pour le server jeedom
  • Sous réseau pour la base de données qui n’a pas besoin d’être exposée
  • Utilisation de l’image jeedom/jeedom (qui semble vivre à la différence de master)
  • Amélioration du code docker-compose et Dockerfile pour pouvoir maj plus facilement les container (après un docker pull des images mariadb et jeedom)
  • Création d’un script post-install qui rajoute qq trucs dont j’avais besoin et qui n’était pas fait au build du container (fail2ban, verif certificat, activation ssl, je crois que c’est tout)
  • Capacité d’avoir X environnements jeedom identique (il n’y a que le .env qui change)
  • J’ai ajouté les volumes pour les certificats, de letsencrypt et le repertoire du site-enabled d’apache2 pour ne pas a recréer cette conf lors des maj des container. (volumes sous le user docker et ma conf docker sous un user toto).

Arbo

Mon arborescence pour que ca fonctionne:

/projects/jeedom
./docker-compose.yml
./prod
./prod/.env
./prod/docker-compose.yml
./dev
./dev/.env
./dev/docker-compose.yml
./server
./server/Dockerfile
./server/files
./server/files/post-install.sh
./server/files/90-my-sudoers
./server/files/jail.local
./server/files/authorized_keys

docker-compose.yml

version: '3.7'

services:

  server:
    build:
      context: ../server
    image: "jeedom_server:$VERSION"
    container_name: jeedom_${ENV}_server
    restart: "$RESTART"
    privileged: true
    devices:
      - "/dev/ttyACM0:/dev/ttyACM0"
    volumes:
       - /home/docker/vol/jeedom_${ENV}_server/html:/var/www/html
       - /home/docker/vol/jeedom_${ENV}_server/letsencrypt:/etc/letsencrypt
       - /home/docker/vol/jeedom_${ENV}_server/sites-enabled:/etc/apache2/sites-enabled
    networks:
      local_amacvlan:
        ipv4_address: "$SERVER_IP"
      local_bridge:
    environment:
      ROOT_PASSWORD: "$ROOT_PWD"

  mariadb:
    image: mariadb:latest
    container_name: "jeedom_${ENV}_mariadb"
    restart: "$RESTART"
    volumes:
       - /home/docker/vol/jeedom_${ENV}_mariadb/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "$MYSQL_ROOT_PWD"
    networks:
      local_bridge:

networks:
  local_amacvlan:
    external: true
  local_bridge:
    external: true

.env

# jeedom DEV
ENV=dev
VERSION=1.3
RESTART=no
SERVER_IP=X.X.X.X
ROOT_PWD=mon_mdp_super_secret
MYSQL_ROOT_PWD=mon_autre_mdp_super_secret

Dockerfile

FROM	jeedom/jeedom:latest

ENV VERSION=1.3

# METADATA
LABEL	version=${VERSION}
LABEL	description="my own jeedom image"

RUN apt-get update -qy && \
    apt-get install -y net-tools tcpdump certbot python-certbot-apache mariadb-client-10.3 && \
    pip install future && \
    apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
    useradd -s /bin/bash -d /home/toto -m toto && \
    mkdir /home/toto/.ssh && chown toto:toto /home/toto/.ssh

COPY --chown=toto:toto files/authorized_keys /home/toto/.ssh/
COPY files/90-my-sudoers /etc/sudoers.d/
COPY files/jail.local /etc/fail2ban/jail.local
COPY files/post-install.sh /root/

RUN chmod 600 /home/toto/.ssh/authorized_keys && \
    chmod 755 /root/post-install.sh && \
    [ -f /etc/php/7.3/apache2/php.ini ] && sed -i.bak -e 's/^max_execution_time = [0-9a-zA-Z]*/max_execution_time = 600/' \
-e 's/^upload_max_filesize = [0-9a-zA-Z]*/upload_max_filesize = 1G/' \
-e 's/post_max_size = [0-9a-zA-Z]*/post_max_size = 1G/'  /etc/php/7.3/apache2/php.ini && \
    [ -f /etc/fail2ban/fail2ban.conf ] && sed -i.bak -e 's/logtarget\ =\ \/var\/log/logtarget\ =\ \/var\/www\/html\/log/' /etc/fail2ban/fail2ban.conf && \
    [ -f /root/init.sh ] && sed -i.bak -e '/^\/usr\/bin\/supervisord/i \/root\/post-install.sh' /root/init.sh

post-install.sh

#!/bin/bash
# Post install and check after restart container
ERROR=0

echo "### $0 execution:"

if [ ! -f /etc/cron.d/jeedom ]; then
	echo "### Create Jeedom crontab"
	echo  "* * * * * www-data /usr/bin/php /var/www/html/core/php/jeeCron.php >> /dev/null" > /etc/cron.d/jeedom
fi

# Change APACHE_LOG_DIR
for f in '000-default-le-ssl.conf' '000-default.conf'
do
        grep '${APACHE_LOG_DIR}' /etc/apache2/sites-enabled/$f > /dev/null
        if [ $? -eq 0 ]; then
                echo "### Change APACHE_LOG_DIR to /var/www/html/log for $f"
                sed -i.bak 's/\${APACHE_LOG_DIR}/\/var\/www\/html\/log/g' /etc/apache2/sites-enabled/$f
            else    
                echo "### Apache log already in /var/wwwl/html/log for $f"
        fi
done

# Check certificat or install it
CERTIF=$(certbot certificates | grep "Certificate Name: " | wc -l)
if [ $CERTIF -ne 1 ]; then
        echo "ERROR: Certificate not found. You need to generate a certificate or used it in /etc/letenscrypt/archive folder if exist"
	find /etc/letsencrypt/archive/ -type f -ls
        ERROR=1
    else
        echo "### Certificate exist. Activate https if not done yet"
        grep 443 /etc/apache2/ports.conf > /dev/null
        if [ $? -ne 0 ]; then
		echo "### Add 443 to ports.conf"
                echo "<IfModule mod_ssl.c>
Listen 443
</IfModule>" >> /etc/apache2/ports.conf
                apache2ctl -t -D DUMP_MODULES| grep ssl
                if [ $? -ne 0 ]; then
                        echo "### Activation ssl"
                        a2enmod ssl
                fi                        
		echo "### Restart apache2"
                service apache2 restart
        fi
fi

# Check and start fail2ban
if [ -f /etc/fail2ban/jail.local ]; then
        echo "### Activation fail2ban"
        sed -i.bak -e 's/^[sshd]/#[sshd]/' -e 's/^enable/#enable/' /etc/fail2ban/jail.d/defaults-debian.conf
        service fail2ban restart
   else
        echo "ERROR: /etc/fail2ban/jail.local not found!"
        ERROR=1
fi

if [ "$ERROR" -ne 0 ]; then
        echo "### ERROR on post_install!!"
fi

exit $ERROR

Pour la mise a jour des container, je fais:

# update Images
cd /projects/jeedom/dev
# changer les version dans .env
docker pull jeedom/jeedom
docker pull mariadb
docker rm jeedom_dev_server jeedom_dev_mariadb 
docker-compose up -d
# Relance des dépendances pour zwave

Si ca marche tjs, je passe a la prod. :sunglasses:
On supprimera les anciennes images (au bout d’un certains temps)

Ca ressemble a ca qd tourne (ou pas)

$ docker ps -a |grep jeedom
fedf69639523        mariadb:latest           "docker-entrypoint.s…"   2 days ago          Up 2 days                 3306/tcp                 jeedom_prod_mariadb
2d7922b6c6c0        jeedom_server:1.3        "/root/init.sh"          2 days ago          Up 2 days                                          jeedom_prod_server
b586bcfd3bb2        jeedom_server:1.3        "/root/init.sh"          2 days ago          Exited (137) 2 days ago                            jeedom_dev_server
4518faa1786a        mariadb:latest           "docker-entrypoint.s…"   2 days ago          Exited (0) 2 days ago                              jeedom_dev_mariadb
$ docker images |egrep "jeedom|mariadb"
jeedom_server       1.3                 8c77777b59fe        2 days ago          1.55GB
jeedom/jeedom       latest              d341606fae11        5 days ago          1.52GB
mariadb             latest              37f5f0a258bf        2 weeks ago         356MB

ps: j’ai fait aussi des container pour superviser (c’est un grand mot…, juste regarder une fois de temps en temps) la charge du serveur des container à base de prometheus, cadvisor et grafana.
Sur MP, je peux pousser la conf aussi

Have fun!

Avec macvlan c’est possible de faire fonctionner jeedom sur le pour 9080 en dns accès exterieur de jeedom? Bien sur avoir le macvlan en port 80?

Le nouveau dns jeedom est suposé tolérer les install docker

J’ai tenté de faire fonctionner le tout il y a trois jour sans docker compose …mais il me manquait un bout je crois …jeedom n’était pas accessible par l api http .

Je vais esseyer d’installer avec docker compose… mais je ne suis pas habitué. Et le tuto du premier post me mélangeait

Bonjour,
Je ne vois pas en quoi le port 9080 ne pourrait pas fonctionner en macvlan…
Je vais relancer mon env de dev, changer le port en 9080 et m’assurer qu’il fonctionne tjs (depuis local et ext)
Pour les appels api, je ne fais que depuis hote local (pour zwave). Rien d’autre.

J’utilise un serveur DNS externe (noip.com)

Sinon,

Pour ne pas exposer Jeedom en Macvlan ou host, il y aurait plusieurs solutions

1°) Faire transiter les traffics multicast via un reverse proxy gérant le multicast (Mais pas Trafik, car il y a un Bug il me semble, à moins que cela ait été corrigé depuis).

2°) Créer une gateway (qui serait en host / macvlan) permettant ensuite d’analyser et d’envoyer les données via mqtt par exemple.

Tu orchestres le tout dans un swarm (par exemple)

Au final, cela donnerait par exemple (et pour prendre en compte le Zwave, en plus)
1 Stack « Jeedom » avec 2 services.
1 réseaux « backend » (lien en Jeedom et Bdd)
1 réseaux « mqtt » (Jeedom et ton Serveur mqtt)

1 service « bdd » (sans exposition des ports, la communication passe dans le network backend, le nom d’hote de la base de données sera Alors Jeedom_bdd (Nom_de_la_stack _ nom_du_service)
la bdd aura en dépendances le réseaux backend uniqement.

1 service jeedom avec en réseaux : backend et mqtt. jeedom sera configurer avec Jeedom_mqtt, pour le nom d’^hote mqtt. Port ouvert :80 et 443 (ou si tu utilise un reverse proxy, port fermé et c’est le proxy qui gère avec un réseau en backend)

1 service pour ton master Mqtt, avec en réseau : mqtt. Le réseau mqtt doit être external :true et attachable

2 services externes à la stack :

1 pour Zwave2mqtt attaché au réseau mqtt. En mode réseau Overlay. Ca récupère les trames Wave, et les transmet au serveur mqtt, Jeedom, l’abonnée récupèrera les infos.
On ne peux pas faire un swarm avec du matériels associées. Swarm ne gère par --device de docker

1 Services pour Xiaomi, permettant de faire la gateway et envoyant les données au serveur mqtt. attaché au réseaux mqtt. en mode macvlan / host

Voilà, les idées. Attention, ce ne sont que des idées pour que tu t’amuse un peu lol, si le coeur t’en dis.

Si tu as besoin de conseils sur Swarm, Kubernetes, etc, n’hésites pas :slight_smile:
:wink:

Du coup, seul le service Xiaomi est full exposé au réseau. Les autres conteneurs sont exposés à des réseaux en backend et ne voient uniquement que les services dont ils ont besoins.

Exemple de mon cluster

7 stacks - 12 services

Master

CONTAINER ID        IMAGE                                               COMMAND                  CREATED             STATUS                  PORTS                    NAMES
d55f85655e3b        robertslando/zwave2mqtt:latest                      "docker-entrypoint.s…"   2 hours ago         Up 2 hours              0.0.0.0:8091->8091/tcp   zwave2mqtt
b97f916c20d1        registry.gitlab.com/XXXXXX/jeedom/mqtt-master:3.0   "docker-entrypoint.s…"   3 hours ago         Up 3 hours              1883/tcp, 8883/tcp       Controllers_mqtt-master.1.v2mys0phs5lmz1rgy
zg66gqpa
d1c66375d734        registry.gitlab.com/XXXXX/jeedom/iptv-web:2.7.4    "docker-entrypoint.s…"   10 hours ago        Up 10 hours (healthy)   80/tcp, 443/tcp          SigmaTv_iptv-web.1.hs3s4xahon2kl788x0qb7fp4
g
e4bda1ee3200        prom/node-exporter:latest                           "/bin/node_exporter …"   10 hours ago        Up 10 hours             0.0.0.0:9100->9100/tcp   Monitor_node-exporter.53px49j41iorujziqkubr
lmco.2i058rei0ho6mnhrosxa9qqie
49130bc393a2        raymondmm/cadvisor:latest                           "/usr/bin/cadvisor -…"   10 hours ago        Up 10 hours (healthy)   0.0.0.0:8090->8080/tcp   Monitor_cadvisor.53px49j41iorujziqkubrlmco.
09k4xvafli0wst3mp32x481r8
21af0aef47b9        prom/prometheus:latest                              "/bin/prometheus --c…"   10 hours ago        Up 10 hours             9090/tcp                 Monitor_prometheus.53px49j41iorujziqkubrlmc
o.rciv8xdryuravpix9c7but8b1
8bd9166cacc1        grafana/grafana:6.7.1                               "/run.sh"                10 hours ago        Up 10 hours             3000/tcp                 Monitor_grafana.1.x09cjr3napuha70et98vs9dm4
3eb11a8c878d        traefik:latest                                      "/entrypoint.sh --pr…"   11 hours ago        Up 11 hours             80/tcp                   Network_treafik.1.hyl2lhedzv7fdhswq9gbt1aet
c4b3407b7ceb        portainer/portainer:latest                          "/portainer"             11 hours ago        Up 11 hours             9000/tcp                 Administration_portainer.1.p277qxyciz6orjsz
ree7hirvb
e16bbc340229        portainer/agent:latest                              "./agent"                11 hours ago        Up 11 hours             0.0.0.0:9001->9001/tcp   Administration_agent.53px49j41iorujziqkubrl
mco.w2rd9waih1btc350m5qaz0l7i

Worker 1

CONTAINER ID        IMAGE                                                   COMMAND                  CREATED             STATUS                  PORTS                            NAMES
aa23094236f1        registry.gitlab.com/gsyltc/jeedom/jeedom:3.4.11         "docker-entrypoint.s…"   3 hours ago         Up 3 hours              80/tcp, 443/tcp, 3456-3457/tcp   Jeedom_jeedom-web.1.9p5xutshtkd
b6q3ke86dassy9
994c5ef6f6f0        registry.gitlab.com/XXXXX/jeedom/jeedom-database:3.3   "overrided-entrypoin…"   3 hours ago         Up 3 hours (healthy)    3306/tcp                         Jeedom_jeedom-bdd.1.tiwq8ktuxgz
h6xuo8h8fap4fd
85e7bfba0e45        registry.gitlab.com/XXXXX/jeedom/iptv-web:2.7.4        "docker-entrypoint.s…"   10 hours ago        Up 10 hours (healthy)   80/tcp, 443/tcp                  SigmaTv_iptv-web.2.r119tihjr8bm
bxjucaw67o72x
22e9fcc54843        registry.gitlab.com/XXXXX/jeedom/iptv-updater:4.3.6    "docker-entrypoint.s…"   10 hours ago        Up 10 hours                                              SigmaTv_iptv-updater.1.avt9uqmr
n41hwqbotfvksgivf
3f9cf6cc416a        prom/node-exporter:latest                               "/bin/node_exporter …"   10 hours ago        Up 10 hours             0.0.0.0:9100->9100/tcp           Monitor_node-exporter.m26e41opn
3y4r6ull9cbtqwma.r6kigei30lyy53bz6s93ybz22
2014bddb4dd2        raymondmm/cadvisor:latest                               "/usr/bin/cadvisor -…"   10 hours ago        Up 10 hours (healthy)   0.0.0.0:8090->8080/tcp           Monitor_cadvisor.m26e41opn3y4r6
ull9cbtqwma.w1jda000x5g9gg3izere993nw
03f28a205c15        prom/prometheus:latest                                  "/bin/prometheus --c…"   10 hours ago        Up 10 hours             9090/tcp                         Monitor_prometheus.m26e41opn3y4
r6ull9cbtqwma.jvwm71oi5p055lhbfzedhay2m
705008f13255        portainer/agent:latest                                  "./agent"                12 hours ago        Up 12 hours             0.0.0.0:9001->9001/tcp           Administration_agent.m26e41opn3
y4r6ull9cbtqwma.scwg8nic4j4hhpyyt8a8pccfs

Seul les conteneur de monitoring et zwave2mqtt sont exposés (8080, 9100, 9090, 9001, 8091) car les conteneurs car le déploiement est « global » (ne doit pas être Load Balancer pour que chaque noeuds envoie ses propres données). Mais il ne sont pas exposées en externe. Tous les services exposés (Jeedom, Sigma, Grafana, Portainer passe par un proxy https nommé Trafik).

C’est des bonnes pistes pour s’amuser comme tu dis! :smile:

J’aime les choses simples. Du macvlan, 2 container, 2 vnet, c’est déjà presque trop…mais un minimum pour avoir une archi propre vs un container (app+bd) + mode host.
Et puis mes kids n’ont pas la certif k8s pour s’occuper de jeedom, j’ai du me faire une raison et m’arrêter là! :laughing:

LOOOOL !!! C’est l’avenir le DevOps. C’est l’occasion d’apprendre pour eux :slight_smile:
Après je comprend que tu cherches la simplicité. Mais voilà, comme je le disait, ce sont juste des pistes pour tenter de nouvelles approches, développer ses connaissances etc…

Je n’ai pas fait cette réponse en te disant, il faut faire cela. Mais comme tu as l’air intéressé par l’évolution je me suis dis que te montrer certaines possibilités pourraient te faire plaisir afin d’en découvrir plus :slight_smile:

Quoiqu’il en soit, pour le monde du DevOps, en cas de besoin, je suis dispo

Bon, ca marche tjs.
J’ai modifié le port.conf et le /etc/apache2/sites-enabled/000-default.conf
service apache2 restart
Test de l’acces en local via 9080. J’ai l’interface. :slight_smile:
par contre qd je relis ton message je ne vois pas ce que tu veux dire par macvlan en port 80?

y a la variable APACHE_PORT aussi, mais j’ai regardé le depot git, on dirait qu’ils vont la supprimer…
On aura la surprise qd on on fera un pull request un de ces jours, en tt cas, ca bouge bien en ce moment sur docker jeedom, c’est que du positif!

Have fun!

Bonsoir

Bonjour @zaibakker
Je vois que tu fais une « liaison » entre le conteneur Jeedom et le conteneur BD

Pour quelle raison, car chacun des conteneurs a sa propre adresse IP ?

Voir le message suivant

Bonjour @zaibakker

Et ici tu as un réseau bridge pou la BD et un reseau macvlan pour Jeedom
Alors quelle est la meilleure solution entre les deux?

Pour te connecter à la BD, quel est le Hostname ?

Bonjour,
Depends_on permet de lier les 2 services, jeedom ne fonctionne que si la database est up. J’ai supprimé ce paramètre car il m’arrive de démarrer jeedom sans la database pour maintenance. Va voir si le site de docker-composé pour bien comprendre si tu en as besoin.

Moi, je préfère la 2eme solution, d’où l’évolution. Macvlan expose ton service, pas besoin pour la database. Elle reste ds un réseau interne. Pour y accéder, je lance un client mariadb dans ce sous réseau pour m’y connecter via son ip.

Oui mais qu’elle est cette IP ? est quel est le Database hostname ?

image

C’est exprès que tu as laissé un réseau bridge et un réseau macvlan ?

j’ai créé les réseaux local_amacvlan et local_bridge en dehors de ce docker-compose.yml.
Je l’explique dans ce passage (a adapter pour local_bridge):

L’@ip de mariadb est dynamique et est dans le local_bridge.
pour la retrouver:
docker network inspect local_bridge | egrep "Name|IPv4"

J’utilise le hostname suivant dans mon fichier de conf de jeedom (qui indique la connexion a la database), j’ai:

/var/www/html/core/config/common.config.php:
                'host' => 'jeedom_prod_mariadb',

J’utiliserai l’@ip ou le hostname via un client (container adminer pour moi) si besoin.

Bonjour,

Je voudrais installer jeedom sous docker, mon but étant de tester un plugin que je suis en train de développer :slight_smile: j’ai donc besoin de plusieurs version!

  • debian9 + jeedom v3 ( c’est je crois la config des box officielles ?)
  • debian9 + jeedom v4
  • debian10 + jeedom v3 (c’est ma config pour le moment, sur RPI3b+)
  • debian10 + jeedom v4

Si besoins j’ajouterais d’autres configs, et si c’est possible aussi via docker.

Pour l’instant j’aurai quelques questions:

  • possible d’utiliser la même DB pour plusieurs instances jeedom ? ou besoin d’1 instance mariadb pour chaque jeedom ?
  • possible d’utiliser un même volume partagé /var/www/html contenant le code core jeedom + mon plugin ? Mais dans ce cas, comment gérer les logs jeedom /var/www/html/logs qui eux doivent être spécifique à chaque instance…
    J’ai vu dans ton 1er post dans le dockerfile un VOLUME /var/www/html mais il n’y est plus dans le 2e post.

Sur mon rpi j’ai eu une erreur avec l’image mariaDB:latest alors j’ai utilisé jsurfrpi-mariadb qui semble marcher. Je n’ai pas encore réussi à faire marcher jeedom par contre.

(edit) par rapport à ton script initial, je vais supprimer jail.local et sudoers (pas utile pour jeedom?) et aussi, une autre question, pourquoi faire adduser toto dans le script post-install ?

(edit) bon, pour l’instant ça ne marche pas le build de cette image sur RPI:

Step 1/9 : FROM jeedom/jeedom:latest
ERROR: Service 'server' failed to build: manifest for jeedom/jeedom:latest not found: manifest unknown: manifest unknown

Ben moi je salue le travail de synthèse de la solution DOcker, chapeau bas @zaibakker :slight_smile:
Je suis en train de m’auto former sur le sujet et avec ce genre de tuto, c’est le jump en avant assuré !

Bye

Nico

1 J'aime

Un tuto presque terminé

Il est valable également pour une installation hors NAS Synology