Jeedom V4 sous Docker (bonus : Raspberry Pi & SSL)

Ce post est la mise à jour d’un ancien post du forum.

Bonjour à tous,

Ce post va vous permettre d’installer Jeedom V4 dans un conteneur Docker, et le faire tourner sur un Raspberry Pi 3 B+ derrière un proxy SSL. Il y a peu de documentation sur internet, et la procédure officielle a quelque peu vieilli. Ce tutoriel reste largement valable si vous souhaitez faire tourner Jeedom sur une autre configuration.

Un accent est mis sur la sécurité. Aucun port n’est accessible de l’extérieur, sauf le port 443 de nginx pour le SSL.

N’hésitez pas à me signaler les coquilles, ou même si vous avez des idées d’amélioration !

1. Sauvegardez votre configuration Jeedom et téléchargez-la

2. Obtenir une image Raspberry Pi

Passez cette section si vous n’êtes pas sur Raspberry Pi.

L’image Docker officielle n’est pas compatible aarch64. Ca va nous demander quelques étapes supplémentaires car il faut créer soi-même une image. Partons sur une Debian stretch.

  • Cloner le dépôt jeedom grâce à git clone https://github.com/jeedom/core.git -b V4-release; cd core
  • Il faut modifier le Dockerfile pour prendre une image Debian stretch pour ARM64.
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM debian:latest
+FROM arm64v8/debian:stretch

3. Instancier Jeedom avec Docker compose

  • Créer un fichier docker-compose.yml comme suit (en changeant PASSJEEDOM, /dev/tty/ACM0 est ma clé ZWave) :
version: "3.7"
services:
  mariadb:
    image: "mariadb:latest"
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_DATABASE: jeedom
      MYSQL_USER: jeedom
      MYSQL_PASSWORD: PASSJEEDOM

  jeedom:
    build: "."
    image: "jeedom:V4-release"
    depends_on:
      - mariadb
    devices:
      - "/dev/ttyACM0:/dev/ttyACM0"

  nginx:
    image: "nginx:latest"
    ports:
      - "443:443"
    volumes:
      - "./nginx:/etc/nginx/"
    depends_on:
      - jeedom
  • Si vous n’êtes pas sur Raspberry Pi, remplacez les parties build et image du conteneur jeedom par image: jeedom/jeedom.
  • Le dossier nginx contient chez moi les fichiers suivants : jeedom.crt, jeedom.key, dhparam4096.pem — je vous laisse chercher pour leur génération — et nginx.conf dont voici le contenu :
events {
}

http {
  server {
    server_name         jeedom;
    listen              443 ssl http2;
    listen              [::]:443 ssl http2;

    keepalive_timeout   75;
    ssl_certificate     /etc/nginx/jeedom.crt;
    ssl_certificate_key /etc/nginx/jeedom.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_dhparam         /etc/nginx/dhparam4096.pem;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_ciphers         EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_prefer_server_ciphers on;

    location / {
      proxy_pass        http://jeedom_jeedom_1:80;
      proxy_set_header  Host $host;
      proxy_set_header  X-Real-IP $remote_addr;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto $scheme;

      client_max_body_size  100M;
    }
  }
}
  • jeedom_jeedom_1 peut varier selon votre installation, regardez le nom du conteneur dans Docker.
  • Lancer le tout avec docker-compose up -d. La partie build du conteneur jeedom peut prendre du temps.
  • Ouvrir jeedom dans un navigateur. Pour la configuration de la base de donnée, l’adresse est le nom du conteneur mariadb (jeedom_mariadb_1 pour moi), le port 3306, l’utilisateur jeedom, le mot de passe PASSJEEDOM et le nom de la base de donnée jeedom.

4. Restaurez votre configuration Jeedom

C’est fini !

La compilation du plugin OpenZWave a échoué pour des raison de RAM sur mon Raspberry Pi… J’ai dû couper le conteneur mariadb (docker-compose stop mariadb) avant que la compilation de python-openzwave ne se lance puis le redémarrer (docker-compose start mariadb).

J’espère que ça vous aura été utile. N’hésitez pas à commenter/rectifier.

1 « J'aime »