dimanche 24 novembre 2019

Jeedom avec Docker - configuration réseau et plugin mobile

Comment configurer jeedom avec docker et le plugin mobile, en local et à distance.

 Le problème, c'est que le plugin mobile va récupérer les urls dans la configuration réseau de jeedom:

Accès interne: utilisation du port docker 9070 avec http
Accès externe: utilisation du port 443 en https avec traefik

Si le port 9070 est précisé en interne, alors les plugins seront en echec.
En effet, un curl est exécuté sur le serveur web avec l'adresse 127.0.0.1 et le port 9070 non disponible, vu que c'est le port 80 qui est utilisé.

Modification à apporter au container jeedom-server : 

Aller dans le container jeedom pour modifier le fichier hosts

Dans /etc/hosts:

127.0.0.1       localhost jeedom.domain.net

Dans /etc/apache2/ports.conf

Listen 80
Listen 9070

service apache2 reload

9070 est le port mappé sur le host avec docker

Dans les paramètres réseaux de jeedom:





J'utilise un resolver interne avec une entree pour jeedom.domain.net

docker-compose pour jeedom avec docker et traefik 2

Voici mon docker-compose:


version: '2.3'

services:

  jeedom-server:
    container_name: jeedom-server
    image: jeedom/jeedom:master
    networks:
     - traefik
     - internal
    labels:
     - "traefik.enable=true"
     - "traefik.http.middlewares.https-only-jeedom.redirectscheme.scheme=https"
     - "traefik.http.routers.jeedom.middlewares=https-only-jeedom"
     - "traefik.http.routers.jeedom.rule=Host(`jeedom.domain.net`)"
     - "traefik.http.routers.jeedom.entrypoints=web"
     - "traefik.http.routers.jeedom-secured.rule=Host(`jeedom.domain.net`)"                                                                                                                                                                
     - "traefik.http.services.jeedom.loadbalancer.server.port=80"
     - "traefik.docker.network=traefik"
     - "traefik.http.routers.jeedom-secured.entrypoints=websecure"
     - "traefik.http.routers.jeedom-secured.tls.certresolver=myhttpchallenge"
    ports:
     - "9070:80"
    volumes:
     - /home/docker/jeedom/data/jeedom:/var/www/html
    depends_on:
     - db
    devices:
      - "/dev/ttyUSB0:/dev/ttyUSB0"
      - "/dev/ttyUSB1:/dev/ttyUSB1"
    mac_address: 03:45:aa:bb:cc:dd
    restart: always

  db:
    container_name: jeedom-mysql
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    networks:
     - internal
    volumes:
     - /home/docker/jeedom/data/mysql:/var/lib/mysql
    environment:
     - MYSQL_DATABASE=jeedom
     - MYSQL_USER=jeedom
     - MYSQL_PASSWORD=jeedom_mdp
     - MYSQL_ROOT_PASSWORD=mdp_root
    labels:
     - "traefik.enable=false"
    restart: always

networks:
   traefik:
     external: true
   internal:
     external: false


samedi 16 novembre 2019

Bug client windows Nextcloud - Docker - Traefik

Le client ne veut pas se connecter car l'application doit être autorisé par le serveur NextCloud.
Sauf que le navigateur reste bloqué à :
https://nextcloud.myserver.net/index.php/login/v2/grant.

Le bouton  "Grant access" reste inactif.

Dans /home/docker/nextcloud/data/config,  modif à faire dans le fichier config.php:

ajout de :
'overwriteprotocol' => 'https',


<?php $CONFIG = array (
...
 'overwrite.cli.url' => 'http://nextcloud.myserver.net',
 'overwriteprotocol' => 'https', 
 'dbtype' => 'mysql',
...

source : https://github.com/nextcloud/desktop/issues/1470

samedi 9 novembre 2019

Installation du driver NVIDIA sur Centos et Redhat 7

Installer le driver NVIDIA sur un Linux Centos 7

$ sudo yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo
$ sudo yum clean all
$ sudo yum -y install nvidia-driver-latest-dkms cuda
source : https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=RHEL&target_version=7&target_type=rpmnetwork

Traefik 2.0 et https (Let's Encrypt et redirection https)

Utilisation de Traefik 2.0

docker-compose.yaml de traefik:

version: "3.7"

networks:
  traefik:
    name: traefik


services:
  traefik:
    image: "traefik:latest"
    container_name: "traefik"
    networks:
      - traefik
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.useBindPortIP=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge=true"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.myhttpchallenge.acme.email=mail@domaine.com"
      - "--certificatesresolvers.myhttpchallenge.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
Exemple avec un container whoami
Challenge Let's Encrypt http

version: "3.7"

services:

  whoami:
    image: "containous/whoami"
    container_name: "simple-service"
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.middlewares.https-only-whoami.redirectscheme.scheme=https"
      - "traefik.http.routers.whoami.middlewares=https-only-whoami"
      - "traefik.http.routers.whoami.rule=Host(`xxx.domaine.com`)"
      - "traefik.http.routers.whoami.entrypoints=web"
      - "traefik.http.routers.whoami-secured.rule=Host(`xxx.domaine.com`)"
      - "traefik.http.routers.whoami-secured.entrypoints=websecure"
      - "traefik.http.routers.whoami-secured.tls=true"
      - "traefik.http.routers.whoami-secured.tls.certresolver=myhttpchallenge"

networks:
  traefik:
   external: true
Attention, pour la redirection, le nom du middlewares doit être unique.
Pour ma part, je l'ai appelé https-only-whoami
Pour un autre container  https-only-container2

Par exemple, dans la capture suivante du dashboard de traefik, ils sont nommés:
https-only
https-only2