Thursday, 3 January 2019

Installing Jeedom on Synology NAS with Docker

I'm giving a try to Jeedom to enable better interaction between my home automation (LeGrand/BTicino), Google Home & Philips Hue lamp.

The Documentation for Synology installation is a bit outdated :
https://jeedom.github.io/documentation/installation/fr_FR/index#tocAnchor-1-21


Here is what I found while installing Jeedom :

  • You can't use MySQL/MariaDB version 8.x. You must use MySQL (or MariaDB) version 5.7.24 (or later).
    With 8.x you'll first get the following error
    • ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory 

      This can be fixed by adding the following option to the docker start command (as last option)
      --default-authentication-plugin=mysql_native_password
    • But then, you'll get the following error :

      Error : [MySQL] Error code : 42000 (1064). You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'function='persist'' at line 4[END CONSISTENCY]

      I don't think it's fixable from a MySQL/MariaDB side.
      I think the issue is in consistency.php at that line :  $cron->setFunction('persist');
  • You really shouldn't use root user for Jeedom installation. That's really a basic security flaw.
  • It's faster to use command line to instanciate docker images.


Installation steps :

Enable SSH access to your synology :

Follow this blog post :
http://krypted.com/synology/enable-ssh-access-synology/

Install Docker :


  • Open the packet center
  • Search for Docker
  • Click install



Install MySQL (or MariaDB)


  • Connect as root using SSH (root password is the same as the 'admin' password)
    • Use ssh root@IP_OF_YOUR_NAS on mac, or use putty on windows
  • Run the following commands
This will create a directory on your NAS where the MySQL data is written. 

mkdir -p /volume1/docker/JeeDomMySQL

Before running this command, change the password.
You can use KeepassXC to generate and securely store password.

This command will fetch the MySQL 5.7.24 docker image and run it with the following options : 
  • Redirect your NAS port 13306 to the 3306 port inside the docker image
  • Initialise mysql root password with the password provided
  • Create a database named "jeedom_db"
  • Create a mysql user jeedom_u with the password provided
  • Mount your NAS folder /volume1/docker/JeeDomMySQL to /var/lib/mysql inside the docker image
  • Name the image JeeDomMySQL

docker run  --name JeeDomMySQL\
            -p 13306:3306\
            -e MYSQL_ROOT_PASSWORD=your_mysql_root_password \
            -e MYSQL_DATABASE=jeedom_db \
            -e MYSQL_USER=jeedom_u \
            -e MYSQL_PASSWORD=your_jeedom_password \
            -v /volume1/docker/JeeDomMySQL:/var/lib/mysql\
            -d mysql:5.7.24



Install Jeedom

In the same way : 

mkdir -p /volume1/docker/JeeDom


This command will fetch and run the latest version of Jeedom Docker image

  • Redirect your NAS port 9080 to the 80 port inside the docker image (http)
  • Redirect your NAS port 9022 to the 22 port inside the docker image (ssh)
  • Mount your NAS folder /volume1/docker/JeeDom to /var/www/html inside the docker image
  • Run the image with higher privileges (as instructed in the documentation)
  • Name the image JeeDom


docker run  --name JeeDom \
            --privileged=true \
            -p 9080:80 \
            -p 8022:22 \
            -v /volume1/docker/JeeDom:/var/www/html\
            -d jeedom/jeedom:latest




Configure Jeedom

Open your browser and type the following URL : 

http://IP_OF_YOUR_NAS:9080

IP_OF_YOUR_NAS can be get from the ssh command line by typing ifconfig
The IP is what is highlighted in yellow after the line starting with "eth0"

eth0      Link encap:Ethernet  HWaddr 00:11:16:1A:D3:2A
          inet addr:192.168.5.200  Bcast:192.168.5.255  Mask:255.255.255.0



Fill the form as follow. Set the "Database password" to the "jeedom_u" password you set in the MySQL installation:





Click "Proceed" and you should get this :




Some useful commands : 


You can use the Synology Docker interface to stop/start docker images or run the following : 

stop:

docker container stop  JeeDomMySQL
docker container stop  JeeDom

start:

docker container start  JeeDomMySQL
docker container start  JeeDom

In case you need to remove everything (before retrying):

WARNING: this will delete everything, so DATA LOSS.

docker container kill  JeeDom
docker container rm    JeeDom
rm -rf /volume1/docker/JeeDom/*

docker container kill  JeeDomMySQL
docker container rm    JeeDomMySQL
rm -rf /volume1/docker/JeeDomMySQL/*

Following the Docker image logs : 


docker container logs -f JeeDomMySQL
docker container logs -f JeeDom

Console access to docker image : 

docker container exec -it JeeDom bash
docker container exec -it JeeDomMySQL bash

MySQL access with command line : 

docker exec -it JeeDomMySQL bash -c 'exec mysql -u root -p$MYSQL_ROOT_PASSWORD'

For a graphical tool, use MySQL Workbench

https://dev.mysql.com/downloads/workbench/
Click the "Download" button, then click the link:


Docker cheat sheet : 

No comments: