[tuto] Docker jeedom/mariadb reseau macvlan

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é
https://community.jeedom.com/t/tuto-installation-de-jeedom-sur-synology-docker-debian-buster-macvlan-mariadb-integre/28491

Il est valable également pour une installation hors NAS Synology

Bonjour,

La version jeedom/jeedom:latest a disparu. P’tre la lastest?
Donc ce que j’ai écrit ne fonctionne plus. J’attends un retour de jeedom pour connaitre la version à utiliser pour une installation et une maj de jeedom.

  • le sudoers, c’était pour corriger une erreur de droit root que j’avais:
    Pb Droits sudo NOK - #5 par David2053

  • le adduser toto me permet me loguer via ssh à mon container jeedom, vu qu’il y a un serveur ssh d’installé. Mais je crois qu’il est prévu qu’il le retire dans leur code (il ne sert pas me semble t’il)

A la vue des travaux de @Didier3L, en ce qui me concerne, je vais attendre une version plus stable de docker (il y en a plus a ce jour) pour mettre à jour mes container jeedom.

Le tuto est terminé
Tu peux l’installer
https://community.jeedom.com/t/tuto-installation-de-jeedom-sur-synology-docker-debian-buster-macvlan-mariadb-integre/28491

Bonjour,

Suite au retour du tag latest, j’ai mis à jour mes container.

Les évolution de jeedom que j’ai remarqué:
Il n’y a plus de sshd, de supervisord, qu’il y a une activation du service mysql, que le fichier port.conf inclus la conf du 443 (en ssl et gnutls) et que le client mariadb est maintenant installé.

Du coup, j’ai du modifier mon script my-post-install.sh et le Dockerfile pour m’adapter à ces changements.

La seule action manuelle que j’ai du réaliser et la relance des dépendances zwave et la relance du démon.

Je publie mes changements, pour ceux que cela intéresse.

server/Dockerfile

FROM	jeedom/jeedom:latest

ENV VERSION=1.5
# 0.9 2019/11/11 initialisation
# 1.0 2020/02/09 improvment for image update
# 1.1 2020/02/22 update jeedom
# 1.2 2020/02/23 add module future for xiaomi plugin
#                update post-install.sh
# 1.3 2020/04/04 resolve error build
# 1.4 2020/04/08 rename my-post-install.sh
# 1.5 2020/06/14 add autoremove
#                remove create user (sshd is gone)
#       		 remove mariadb-client-10.3, tcpdump

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

RUN apt-get update -qy && \
    apt-get install -y net-tools certbot python-certbot-apache && \
    pip install future && \
    apt-get -y autoremove && \
    apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

COPY files/90-my-sudoers /etc/sudoers.d/
COPY files/jail.local /etc/fail2ban/jail.local
COPY files/my-post-install.sh /root/

RUN  chmod 755 /root/my-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 '/^cron/i \/root\/my-post-install.sh' /root/init.sh

et le script my-post-install.sh

#!/bin/bash
# Post install and check after restart container
# 1.1 17/05/2020 Resolve restart fail2ban
# 1.2 14/06/2020 Stop service mysql
# 		 Improve apache mod ssl activation
ERROR=0

echo "### $0 execution:"

# Stop mysql  service on container jeedom
service mysql stop

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 and ssl mod
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/letsencrypt/archive folder if exist"
	find /etc/letsencrypt/archive/ -type f -ls
        ERROR=1
    else
        echo "### Certificate exist. Check & Activate https if not done yet"
        apache2ctl -t -D DUMP_MODULES| grep ssl
        if [ $? -ne 0 ]; then
                echo "### Activation ssl mod"
                a2enmod ssl
                service apache2 restart
        fi                        
fi

# Check Apache port 443
netstat -an |grep "0.0.0.0:443" |grep "LISTEN"
[ $? -ne 0 ] && { echo "ERROR: fail to activate ssl mod for apache"; ERROR=1; }

# Check and restart fail2ban
if [ -f /etc/fail2ban/jail.local ]; then
        sed -i.bak -e 's/^[sshd]/#[sshd]/' -e 's/^enable/#enable/' /etc/fail2ban/jail.d/defaults-debian.conf
        service fail2ban stop
	sleep 5
	[ -S /var/run/fail2ban/fail2ban.sock ] && rm /var/run/fail2ban/fail2ban.sock
	[ -f /var/run/fail2ban/fail2ban.pid ] && rm /var/run/fail2ban/fail2ban.pid
        service fail2ban start
	sleep 5
	service fail2ban status
	[ $? -ne 0 ] && { echo "ERROR: fail to start fail2ban"; ERROR=1; }
   else
        echo "ERROR: /etc/fail2ban/jail.local not found!"
        ERROR=1
fi

if [ "$ERROR" -ne 0 ]; then
        echo "### ERROR on my-post-install!!"
else
	echo "### $0 done!"
fi

exit $ERROR

Merci pour cette maj :slight_smile: mais, du coup, quelle est la différence par rapport à l’image jeedom:latest seule ?
Cette image se suffit à elle même et elle marche plutot bien, pour info j’ai même réussi à la démarrer online sur le docker-labs: https://labs.play-with-docker.com/
il faut s’identifier avec le même compte que le docker hub, puis ouvrir une instance et lancer jeedom :
docker run -p 80:80 -d jeedom/jeedom
et voila! ça ouvre un port 80, tu clic sur le lien qui apparaît avec le numéro du port (80) et tu arrive sur la page d’accueil de ton jeedom virtuel installé.

Avant, tu avais un container séparé pour la db, maintenant tu l’a perdu c’est dommage. D’un autre côté il faut reconnaitre que la simplicité est au rendez-vous c’est bluffant :slight_smile:

Salut,
J’ai tjs 2 container. J’utilise la latest à laquelle j’ajoute, la conf fail2ban, la conf sudoers (que je pourrai peut être me passer, c’était pour corriger un pb de droit que voulais jeedom), l’activation https,et l’exécution de mon post install.
J’essaye tjs de toucher le moins possible à l’image jeedom. J’arrête donc que leur base de données que je n’utilise pas.

Est-ce possible s’installer Jeedom sur un autre port http que 80 avec docker et macvlan et de bénéficier aussi de l’accès dns?

Ça me permetterais d’intaller jeedom en docker sur mon serveur principal (port 80 déjà utilisé) et de pouvoir utiliser mon odroid xu4 pour autre chose en lien avec le reseau

Oui c’est un avantage de docker ! tu lance le container jeedom avec un paramètre pour mapper le port du host - celui que tu veux - sur le port 80 du container jeedom. De mémoire c 'est l’option -d pour docker run, ou sinon un paramétrage dans le fichier docker-compose…

Bonjour

Est ce pour corriger le problème de droit avec SUDO (hors mode HOST) ?
Comment mets tu en œuvre cette conf ?

Salut,
Tu trouveras la réponse ici :

@+

Merci :wink:

Il va falloir que teste cela sur un Docker en mode Bridge et mappage de port.

Pour certain utilisateur, la mise œuvre de docker va être plus simple si cela règle le problème des droits SUDO