Installation jeedom Docker Synology

Bonjour
J’ai essayé d’installer Jeedom sur Docker en suivant la procédure officielle
Tout s’est bien passé jusqu’au lancement de Jeedom ou j’obtiens la page suivante
image
Je suis totalement bloqué et je ne sais absolument pas quoi faire car j’ai scrupuleusement suivi la procédure d’install
Merci d’avance pour votre aide

Salut

Les réponses sont dans ton message. La configuration attendue n’est pas tout à fait correcte.
Corrige comme demandé tout simplement

Salut
Merci pour ton retour mais étant débutant je ne sais justement pas ou corriger cela!

Hello,

Si t’es débutant, tu n’as pas fait le choix le plus simple avec Docker.
Mais après, tu peux apprendre :wink:

Il faut se connecter sur ton conteneur docker et exécuter la commande en ligne de commande. C’est un Docker sous Synology ?

Hello
Oui un docker sous Synology

J’ai essayé de rentrer la 1ere commandes dans le terminal , j’imagine que c’est à cet endroit ?

  1. impossible d’activer le copier/coller, y a -t-il une manip spéciale à faire ds le terminal car dans le clik droit je n’ai pas l’option coller
  2. En tapant manuellement la commande il ne se passe rien!

Pour le copier/coller, cela fonctionne en utilisant la souris (clic droit).
T’es retourné sur la page après avoir exécuté la commande?

Re

  • Pour le copier coller, cela n’apparait pas dans le menu , je vais essayer une autre souris.
  • Pour la commande j’ai créé une commande bash j’ai tapé sudo su - mais rien ne se passe !

Normalement, le le copier/coller fonctionne à l’aide la souris (mais pas via les raccourcis clavier).
Pas besoin de faire le su -. T’es déjà en root sur ton conteneur.
Si ton login est suivi de #, t’es en root. S’il est suivi de $, t’es un simple user.

Ok merci je ne suis pas devant la machine pour essayer malheureusement
Je re-essaie ce soir et te tiens au courant

Il faut que tu fasse un Dockerfile dans ce style :

# Base image
FROM jeedom/jeedom:latest

# Mandatory to avoid encoding issues with jeedom
RUN export LANG=en_US.UTF-8 && \
    echo "export LANG=en_US.UTF-8" >> ~/.bashrc

# Mandatory for Jeedom
RUN echo "* * * * * www-data /usr/bin/php /var/www/html/core/php/jeeCron.php >> /dev/null" > /etc/cron.d/jeedom

ENV DEBIAN_FRONTEND noninteractive

# Update system
RUN apt update && \
    apt upgrade -y && \
	apt install -y apt-utils && \
    apt install -y  mosquitto-clients \
    				net-tools \
    				moreutils \
    				bash-completion \
    				default-mysql-client \
                    figlet \
                    certbot \
                    python-certbot-apache

**# Install SDK Google cloud - For bucket**
**# J'utilise GCP pour mes sauvegardes, le Core IOT et la sauvegarde de paramètres**
**#Je consulte aussi mes informations de Billing**
**#Pas forcément nécessaire donc**
RUN export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" &&\
           echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" >> /etc/apt/sources.list.d/google-cloud-sdk.list && \
           curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && \
           apt update -y && \
           sudo apt install -y google-cloud-sdk

# Not necessary but usefull for jeedom configuration
RUN echo "source /etc/profile.d/bash_completion.sh" >> /root/.bashrc
RUN echo "figlet $HOSTNAME -f slant" >> /root/.bashrc

# resources
#MANDATORY pour la configuration initiale
COPY resources//usr/bin/docker-entrypoint.sh /usr/bin
RUN chmod 755 /usr/bin/docker-entrypoint.sh
COPY resources//usr/bin/updateDependencies.sh /usr/bin
RUN chmod 755 /usr/bin/updateDependencies.sh

# Labels
ARG version=1.0
LABEL maintainer="TON NOM"
LABEL progam-name="Jeedom"
LABEL version="${version}"
LABEL patch="Initialisation"

# Environment variables
ENV DOCKERFILE_VERSION=${version}

# Ports
EXPOSE 80/tcp 443/tcp
#Use this ports for alexa-api (nodeJs : update du cookie)
EXPOSE 3457/tcp

# Exec
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["/root/init.sh"]

En dessous, les scripts

#!/bin/bash
figlet Jeedom Gaston -f slant
echo "=================================="
echo "   Dockerfile version : $DOCKERFILE_VERSION"
echo "================================="
echo ' ==> Start container init' | ts
hostIpAddress=$(curl -s ifconfig.me)
echo "   - Hostname        : $HOSTNAME"
echo "   - IP Address      : $(ip address | grep eth0 | grep inet | cut -d " " -f 6)"
echo "   - Host IP Address : $hostIpAddress"

# **JEEDOM_BDD_SVC_SERVICE_HOST peut être configurer au laucement avec Docker run -e JEEDOM_BDD_SVC_SERVICE_HOST='Addresse IP ou Hostname'.**
# **Ou avec une configuration si tu utlises un orchestrateur (swarm, Kubernetes, etc)**
if [ -f /var/www/html/core/config/common.config.php ]; then
	if [ ! -z $JEEDOM_BDD_SVC_SERVICE_HOST ] ; then
		echo "[INFO] Change IP address of the database in case of service ip adress change"
    	sed -i -e "s/^.*'host'.*$/        'host' => '$JEEDOM_BDD_SVC_SERVICE_HOST',/g" /var/www/html/core/config/common.config.php
	fi
fi

# Mandatory - Wrong default values
#Voilà ce qui va corregier le problème que tu rencontres
sed -i -e "s/^max_execution_time = 30$/max_execution_time = 600/g" /etc/php/7.3/apache2/php.ini
sed -i -e "s/^upload_max_filesize = 2M$/upload_max_filesize = 1G/g" /etc/php/7.3/apache2/php.ini
sed -i -e "s/^post_max_size = 8M$/post_max_size = 1G/g" /etc/php/7.3/apache2/php.ini

# Apache configuration
#echo
#echo >> /etc/apache2/apache2.conf 
#echo "# Set ServerName" >> /etc/apache2/apache2.conf
#echo "ServerName $HOSTNAME" >> /etc/apache2/apache2.conf
chown www-data:www-data /var/lib/php/sessions

# Update plugins dependencies
# Avec Docker, toutes les dépendances vont être perdues au lancement d'un nouveau conteneur.
# Et sauvegarder le tout c'est pas vraiment la bonne pratiques.
# Voici comment résintaller les dépendances à la vollée

if [ ! -f .dependencies_installed ] ; then
  bash /usr/bin/updateDependencies.sh
  
  #Ci-dessous, c'est pour réinstallé un certification certbot, mais il doit avoir été créér avant et sauvegarde dans un volume.
  sed -i "/supervisord/d" root/init.sh
  echo "certbot install -n --apache --cert-name ${DOMAIN_NAME}" >> /root/init.sh
  echo "" >> /root/init.sh
  echo "/usr/bin/supervisord" >> /root/init.sh
fi
echo ' ==> Container Init finished' | ts
echo
echo
"$@"

Le scripts des dépendances

#!/bin/bash
PLUGINS_DIRECTORY="/var/www/html/plugins"
CMD="/bin/bash"
mkdir -p /tmp/jeedom


if [ ! -f /tmp/.dependencies_installed ] ; then
	if [ -d ${PLUGINS_DIRECTORY} ] ; then
		echo "[INFO] Installation Ended" > /tmp/.dependencies_installed
	        # Pour AlexaApi si tu l'utilises. Il est pas au format "plugin", obligé de faire l'installation ainsi
		if [ -d $PLUGINS_DIRECTORY/alexaapi ] ; then
			echo 
			echo "================================================="
			echo "[INFO] Instalation des dpendances alexaapi"
			echo
			$CMD $PLUGINS_DIRECTORY/alexaapi/resources/nodejs.sh $PLUGINS_DIRECTORY/alexaapi/resources "" 0
			echo "================================================="
			echo "Dependencies for alexaapi" >> /tmp/.dependencies_installed
		fi
		
#Pour les plugins respectant le pattern. Détection de chaque fichiers install_apt.sh et installation
		cd ${PLUGINS_DIRECTORY}
		declare -a files="$(find -name install_apt.sh)"
		for file in $files
		do 
			pluginDir="${file%/$(basename $file)}"
			pluginName=$(basename ${pluginDir%/$(basename $pluginDir)});
			echo 
			echo "================================================="
			echo "[INFO] Dependencies for $pluginName"
			echo
			$CMD $file /tmp/jeedom/${pluginName}-dependance
			echo "Dependencies for $pluginName" >> /tmp/.dependencies_installed
		done
		cd -
	fi
fi


Ne pas oublier de :

  • Crééer les volumes pour /var/www/html (et éviter de tout réinstaller)
  • Créer le certification certbot pour le ssh si tu le souhaites. Et sauvegarder les fichier dans un volumes

En espérant que cela pourra aider

P.S :
J’ai un Dockerfile arm64v8 si nécessaire (Armbian, Raspbian) pour Raspberry ou Odroid
Si nécessaire, je peux mettre le fichier sur le Docker Hub (amd64 et arm64v8).

PS. 2 :
Si tu veux orchestrer avec un Healthcheck, prévois un 4-5 min de start par conteneur.

Bonsoir
Ba, Je vois qu’il y a des pro de Docker sur Synology :blush:

J’ai fait un tuto pour une installation en mode Host.


Mais par contre je n’ai jamais réussi à trouver une solution pour avoir un acces en ssh au conteneur

Bonsoir
Merci à Gsyltc et Didier3L pour vos retours
Ca commence mal pour moi car le copier/coller ne marche pas dans le terminal
lorsque je veux coller la commande j’obtiens image

Reclic a plusieurs endroits …

Eureka ca fonctionne!
Déja un premier point… reste plus qu’a corriger les 3 autres erreurs
@Didier3L, dans les grandes lignes en quoi ta procédure est-elle différente de celle proposée par @Gsyltc ( pour rappel je débute et j’aimerai faire quelque chose de simple et robuste!!)
@Gsyltc, ou creer le “dockerfile”?

pas mieux… même en cliquant un peu partout

Bon…
J’ai réussi à corriger le fichier etc/php/7.3/apache2/php.ini
Il subsiste l’erreur max_execution_time must be >= 600, edit /etc/php/7.3/apache2/php.ini and change this value (current 30) malgré le fait que je l’ai corrigé dans le fichier

J’ai redémarré le conteneur mais cela ne change rien…? Je désespère…

En effet @nhi,

Je pense que j’aurais du un peu plus adapter la solution en mode “Débutant”.

Je tiens malgré tout a revenir sur un point. Par rapport en mode Host ou Bridge.
Pour ma part, je n’utilise que le plugin BLEA. Je suis en mode Bridge, et cela fonctionne parfaitement (Antenne BLEA compris). Par ailleurs, avec un orchestrateur on peux exposer en ingress et faire, par exemple, un bypass du mesh routing dans swarm, on spécifiant un port ou une plage en mode host. Ce qui permet de garantir une certaine protection des services

Pour faciliter la tâche, tu peux utiliser l’image docker que j’ai créée dans le Docker hub

docker pull sgoubaud/jeedom:latest

avec la doc Docker Hub - sgoubaud/jeedom

et l’image mariaDb pour la Bdd

docker pull sgoubaud/jeedom_bdd:latest

et la doc Docker Hub - sgoubaud/jeedom_bdd

Cette image comprend toute la configuration que j’ai citée auparavant.
La solution de Didier3L est viable aussi.

Une idée au passage : Tu peux éventuellement prendre la solution toute prête et, dans un bac a sable reprendre nos deux solutions pour en apprendre plus.

Pour une stack simple je te met aussi un fichier docker-compose.yml
il s’utilise avec docker compose

docker-compose up -d (au niveau du fichier docker-compose.yml)

Avec cette commande tout est déjà configurer.
Change juste les variables de mot de passe de la bdd, les chemin pour les volumes, et les information certbot si besoin :slight_smile:

Pour ma part, je suis disponible si tu as besoins de conseil.

Au fait @Didier3L, j’ai jamais touché un nas synology de ma vie :slight_smile: Mais je fais du Docker, Swarm, K8s et autres tous les jours (Architect DevOps)

Fichier a renommer en docker-compose.yml
docker-compose.yml.txt (1,8 Ko)

P.S : Dans le docker-compose, le port 3306 est optionnel, utile si tu veux utiliser un logiciel de gestion de Bdd externe par exemple

Merci beaucoup pour ton aide @Gsyltc
J’ai bien essayé de charger le fichier yml dans docker mais je ne sais pas trop ou…( désolé je suis un vrai débutant!)
J’ai donc chargé les 2 images mais impossible de lancer le conteneur sgoubaud/jeedom_bdd , il plante au bout de quelques secondes

Est-ce que tu as regarder la doc ?

Il plante, de façon “normale”, si tu omets les variables d’environnement normalement.

docker run -dit --name jeedom-bdd \
                        -e MYSQL_ROOT_PASSWORD=MJeedom96 \
                        -e MYSQL_DATABASE=JeedomDb \
                        -e MYSQL_USER=JeedomBdUser \
                        -e MYSQL_PASSWORD=MJeedom96 sgoubaud/jeedom_bdd:latest

docker container logs jeedom-bdd (Ça te permettra de voir l'avancement du lancement dans le conteneur)

Quand tu as des soucis de conteneurs, tu peux faire un

docker inspect {ID_DU_CONTENEUR}.

Pour Docker compose.

1°) Est-il installé sur ton système

 docker-compose version

2°) Si non (Oublie les sudo en début de commande si besoin)

curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose version

3°) Lorsque installé sur le système,

tu copies le docker-compose.yml sur ton système
tu vas dans le répertoire ou tu as mis le fichier (cd /path/to/docker-compose.yml)
et là

docker-compose up -d (Lancement la pile de conteneur, Jeedom et Jeedom_Bdd)

Pour vérifier les lancements

docker container ps

Bon ca avance…
J’ai réussi à lancer docker compose et les 2 container ne plantent plus… .c’est déja ca!
En allant sur l’adresse du nas port 32780 j’obtiens l’erreur
image

Je reprendrai ca demain a etete reposée pour voir si je n’ai rien loupé