Étiquette : auto-hébergement

  • Configuration optimisée et sécurisée de Nginx

    Configuration optimisée et sécurisée de Nginx

    Dans le dernier article, nous avions vu comment mettre en place le chiffrement TLS.

    C’était le premier pas d’une longue série de paramètre pour sécuriser notre application web. Dans cet article, nous allons voir comment mettre en place une configuration optimisée et sécurisée de Nginx.

    Un outil pour les configurer tous

    Nginx est un outil très puissant. Et qui dit très puissant, dit également beaucoup de paramètre à prendre en compte.

    Heureusement nous pouvons trouver des générateurs de configuration pour Nginx.

    Par exemple vous en trouverez un sur le site de DigitalOcean : https://www.digitalocean.com/community/tools/nginx?global.app.lang=fr

    Vous pouvez le configurer comme ci-après, qui devrait s’adapter à presque toutes les configurations.

    Configuration de Nginx

    Dans la partie Pré-configurations, cliquez sur WordPress. Remplissez l’onglet Serveur.

    La partie Chemin est très importante car c’est le chemin que Nginx empruntera pour accéder au site. Si vous hébergez un seul site, la configuration par défaut devrait suffire. Par contre si vous en hébergez plusieurs, chaque application devra avoir un chemin unique.

    démonstration pour un chemin unique pour nginx

    On laisse l’onglet HTTPS par défaut.

    Dans la partie PHP, on vérifie que activer PHP et activer les règles spécifiques à Wordress sont bien cochés. Dans serveur PHP, on définira les noms d’hôtes comme dans l’article précédent.

    pré-configuration php, on personnalise le serveur php et on active les règles WordPress

    On laisse les autres onglets par défaut. On active ou non le logging.

    Dans la partie Configuration globale, il faudra cocher limit_req et bien vérifier que server_tokens est décoché. Le premier agira comme une protection contre les attaques de type flood et le deuxième, cachera l’identité de notre serveur Nginx.

    On en profitera également pour modifier le Referrer-Policy en same-origin, pour protéger la vie privée de nos utilisateurs.

    modification du referrer-policy et activation du limit_req

    Vérifiez dans l’onglet Logs qu’ils sont bien activés en warn ou error.

    Dans l’onglet Docker on cliquera sur Configurer pour Docker et on décochera les deux cases. Le but étant de passer le user en nginx et le pid en /var/run/nginx.pid dans l’onglet NGINX.

    De plus, nous avons déjà nos propres fichiers dockerfile.

    En descendant la page nous trouvons nos fichiers de configuration.

    Harmonisation des fichiers Nginx

    Nous remarquons que les fichiers ont été configurés avec un chemin d’accès.

    Nous allons donc modifier notre fichier docker-compose.yml, pour y introduire ces nouvelles données.

    Dans la partie Nginx dans la sous-partie volumes, nous allons modifier comme ci-dessous :

        volumes:
          - ${WORDPRESS_LOCAL_HOME}:/var/www/html/nginx.laclefdigitale.fr
    #      - ${NGINX_CONF_DEFAULT}:/etc/nginx/conf.d/default.conf 
    
    # generale conf
    
          - ${NGINX_CONF}:/etc/nginx/nginx.conf
          - ${NGINX_MIME}:/etc/nginx/mime.types
          - ${NGINX_SITES_ENABLED}:/etc/nginx/sites-enabled/:ro
          - ${NGINX_CONFIG_IO}:/etc/nginx/nginxconfig.io/:ro

    Vous remarquerez que nous utilisons sites-enabled et non site-available. Nginx permet de faire un lien entre les deux. Nous grâce à Docker, nous lions directement le chemin vers sites-enabled.

    Il faudra également modifier la partie SSL du fichier /etc/nginx/sites-enabled/exemple.conf, avec les répertoires que nous avons déterminé précédemment.

    # SSL
    /etc/nginx/ssl/live/example.conf/fullchain.pem; 
    /etc/nginx/ssl/live/example.conf/privkey.pem; 
    /etc/nginx/ssl/live/example.conf/chain.pem;

    Voici le contenu du fichier mime.types

    
    types {
        text/html                                        html htm shtml;
        text/css                                         css;
        text/xml                                         xml;
        image/gif                                        gif;
        image/jpeg                                       jpeg jpg;
        application/javascript                           js;
        application/atom+xml                             atom;
        application/rss+xml                              rss;
    
        text/mathml                                      mml;
        text/plain                                       txt;
        text/vnd.sun.j2me.app-descriptor                 jad;
        text/vnd.wap.wml                                 wml;
        text/x-component                                 htc;
    
        image/avif                                       avif;
        image/png                                        png;
        image/svg+xml                                    svg svgz;
        image/tiff                                       tif tiff;
        image/vnd.wap.wbmp                               wbmp;
        image/webp                                       webp;
        image/x-icon                                     ico;
        image/x-jng                                      jng;
        image/x-ms-bmp                                   bmp;
    
        font/woff                                        woff;
        font/woff2                                       woff2;
    
        application/java-archive                         jar war ear;
        application/json                                 json;
        application/mac-binhex40                         hqx;
        application/msword                               doc;
        application/pdf                                  pdf;
        application/postscript                           ps eps ai;
        application/rtf                                  rtf;
        application/vnd.apple.mpegurl                    m3u8;
        application/vnd.google-earth.kml+xml             kml;
        application/vnd.google-earth.kmz                 kmz;
        application/vnd.ms-excel                         xls;
        application/vnd.ms-fontobject                    eot;
        application/vnd.ms-powerpoint                    ppt;
        application/vnd.oasis.opendocument.graphics      odg;
        application/vnd.oasis.opendocument.presentation  odp;
        application/vnd.oasis.opendocument.spreadsheet   ods;
        application/vnd.oasis.opendocument.text          odt;
        application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                         pptx;
        application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                         xlsx;
        application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                         docx;
        application/vnd.wap.wmlc                         wmlc;
        application/wasm                                 wasm;
        application/x-7z-compressed                      7z;
        application/x-cocoa                              cco;
        application/x-java-archive-diff                  jardiff;
        application/x-java-jnlp-file                     jnlp;
        application/x-makeself                           run;
        application/x-perl                               pl pm;
        application/x-pilot                              prc pdb;
        application/x-rar-compressed                     rar;
        application/x-redhat-package-manager             rpm;
        application/x-sea                                sea;
        application/x-shockwave-flash                    swf;
        application/x-stuffit                            sit;
        application/x-tcl                                tcl tk;
        application/x-x509-ca-cert                       der pem crt;
        application/x-xpinstall                          xpi;
        application/xhtml+xml                            xhtml;
        application/xspf+xml                             xspf;
        application/zip                                  zip;
    
        application/octet-stream                         bin exe dll;
        application/octet-stream                         deb;
        application/octet-stream                         dmg;
        application/octet-stream                         iso img;
        application/octet-stream                         msi msp msm;
    
        audio/midi                                       mid midi kar;
        audio/mpeg                                       mp3;
        audio/ogg                                        ogg;
        audio/x-m4a                                      m4a;
        audio/x-realaudio                                ra;
    
        video/3gpp                                       3gpp 3gp;
        video/mp2t                                       ts;
        video/mp4                                        mp4;
        video/mpeg                                       mpeg mpg;
        video/quicktime                                  mov;
        video/webm                                       webm;
        video/x-flv                                      flv;
        video/x-m4v                                      m4v;
        video/x-mng                                      mng;
        video/x-ms-asf                                   asx asf;
        video/x-ms-wmv                                   wmv;
        video/x-msvideo                                  avi;
    }
    

    Une fois nos répertoires et nos fichiers créés, il ne reste qu’à redémarrer notre projet docker.

    Maintenant en scannant votre site sur Moz observatory, nous obtenons un rang B+. Plutôt pas mal, pour une config générée par défaut 🙂

    rang B+ sur moz obs.

    Pour conclure

    Nous avons harmonisé notre arborescence de répertoire de travail sur Nginx. L’outil Nginx config, nous a facilité la mise en place d’une configuration optimisée et sécurisée de Nginx. Notre site web affiche désormais un B+ sur l’outil de protection de moz Observatory.

    D’ailleurs nous nous apercevons que seule la partie CSP fait baisser le rang de notre application. Nous verrons lors d’un prochain article comment rajouter le CSP pour atteindre le rang A+ en sécurité.

  • Installation de Hacs Ewelink et Zwave-js-ui

    Installation de Hacs Ewelink et Zwave-js-ui

    Dans cet article nous verrons comment effectuer l’installation de Hacs, Ewelink et Zwave-js-ui pour Home-Assistant.

    Hacs rajoutera la boutique communautaire permettant d’installer des intégrations développées par la communauté.

    Ewelink est une application parfois demandée pour contrôler certains modules Zigbee.

    Et Zwave-js-ui vous permettra de coupler votre dongle Zwave à Home-Assistant.

    HACS

    De l’acronyme, Home Assistant Community Store, est la boutique d’intégration de la communauté de HA.

    Celle-ci permet de télécharger des nouveaux éléments personnalisés et de les gérer de manière simplifier. C’est un peu comme le Playstore ou l’Apple Store.

    Vous y trouverez de nombreuses intégrations très utiles qui vous simplifierons l’automatisation de vos périphériques. Nous pouvons noter Versatile Thermostat, qui vous permettra de configurer vos radiateurs avec précision et aisance.

    Si vous avez suivi mes articles précédant, vous avez installé Home Assistant sous docker grâce à docker compose.

    Cette fois-ci nous ferons quelques commandes pour configurer Hacs.

    Entrer dans le container Home Assistant.

    sudo docker exec -it homeassistant bash

    Puis nous téléchargerons et exécuterons le plugin Hacs.

    wget -O https://get.hacs.xyz | bash

    Une fois ces commandes passées, vous pouvez redémarrer Home Assistant, puis vous y connecter, et allez dans le manu d’ajout des intégrations.

    Paramètre > Appareil et service > Ajouter une intégration.

    Vous devriez retrouver Hacs depuis la recherche.

    Cocher toutes les cases. Il faudra ensuite créer un compte sur GitHub.

    Puis cliquer sur le lien d’activation et coller le code indiqué.

    Il suffira pour finaliser d’autoriser Hacs.

    Vous pouvez désormais installer Versatile Thermostat et commencer à configurer vos radiateurs avec vos modules NodOn.

    Ewelink

    Ewelink smart home est une application qui permet de contrôler certains périphériques. Cela est très intéressant mais nos périphériques dépendent d’un cloud, et donc d’une connexion internet.

    Nativement, Home Assistant ne permet pas de rajouter son intégration. Nous allons donc créer un container Ewelink qui nous permettra de contrôler nos périphériques en local.

    Comme à notre habitude, nous allons créer un répertoire pour l’application.

    Et compte tenu, que nous voulons garder un serveur propre, nous allons créer un répertoire qui référencera toutes nos plugins Home Assistant.

    On se positionne donc dans notre répertoire HA, puis nous créerons un répertoire Add-on, puis dedans un répertoire ewelink.

    cd home-assistant
    mkdir add-on && cd add-on
    mkdir ewelink && cd ewelink

    Nous allons maintenant créer notre docker-compose.yml

    sudo nano docker-compose.yml

    On y indiquer le nom du service, l’image à utiliser, le nom du container, et le mode réseau host.

    services:
      ewelink_smart_home:
        image: ewelink_smart_home
        container_name: ewelink
        restart: unless-stopped
        network_mode: host

    Nous allons par la suite indiquer un fichier de variable d’environnement.

    Ce qui nous permettra d’y stocker les variables demandées par l’environnement de l’application, l’url de HA, le token pour la communication entre eux deux, et le répertoire de données.

        env_file:
          - .env
        environment:
          - HA_URL=${HA_URL}
          - SUPERVISOR_TOKEN=${TOKEN}
        volumes:
          - ${DATA}:/data

    Une fois ceci fait, nous fermons le docker-compose et nous créons le fichier .env.

    sudo nano .env

    Puis nous y déclarons nos variables.

    TOKEN=votre_token_généré_depuis HA
    HA_URL=http://IP_de_votre_instance_HA:port
    DATA=./data

    Pour générer le token, il faudra ouvrir Home Assistant, cliquer sur votre nom en bas dans le menu de gauche.

    Puis en haut à droite sur sécurité. En bas de cette nouvelle page, vous pourrez y générer un token de longue durée. Il faudra copier ce token dans la variable TOKEN de notre fichier .env.

    Pour la variable HA_URL, il ne faudra pas oublier de préciser le port de connexion. Par exemple HA_URL=http://127.0.0.1:8123

    Une fois tout ceci configuré vous pouvez lancer votre container avec la commande :

    sudo docker compose up -d

    Vous pourrez vous connecter sur l’URL de Ewelink sur le port 3000 : http://IP_du_serveur:3000

    Zwave

    Si vous êtes l’heureux possesseur d’une clef Zwave comme la Combee II, vous serez forcement intéresser pour installer Zwave-js-ui sur docker.

    Nous l’installerons par docker compose. Vous trouverez le GitHub à cet adresse : https://github.com/zwave-js/zwave-js-ui/blob/master/docker/docker-compose.yml

    Mais rassurerez-vous, nous allons expliquer comment le mettre en place.

    Pour commencer, nous allons nous déplacer dans le répertoire add-on de Home assistant que nous avons créé précédemment. Puis nous allons créer un répertoire Zwave.

    cd home-assistant/add-on
    mkdir zwave && cd zwave

    Puis on crée notre fichier docker compose

    sudo nano docker-compose.yml

    Dans ce fichier, on y indiquera le service, l’image, l’environnement et le réseau.

    services:
        zwave-js-ui:
            container_name: zwave-js-ui
            image: zwavejs/zwave-js-ui:latest
            restart: always
            tty: true
            stop_signal: SIGINT
            environment:
                - SESSION_SECRET=mysupersecretkey
                - ZWAVEJS_EXTERNAL_CONFIG=/usr/src/app/store/.config-db
                # Uncomment if you want log times and dates to match your timezone instead of UTC
                # Available at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
                - TZ=Europe/Paris
            networks:
                - zwave

    Pour la SESSION_SECRET, vous pouvez générer un code aléatoire de vous même ou en utilisant pwgen.

    Par la suite il faudra définir votre clef Zwave.

    Pour cela, dans votre terminal, il faudra entrer cette commande :

    ls /dev/serial/by-id/

    Ce qui donne dans mon cas :

    On construira ensuite les volumes et nous ouvrirons les ports du container.

            devices:
                # Do not use /dev/ttyUSBX serial devices, as those mappings can change over time.
                # Instead, use the /dev/serial/by-id/X serial device for your Z-Wave stick.
                - '/dev/serial/by-id/usb-0658_0200-if00:/dev/zwave'
            volumes:
                - zwave-config:/usr/src/app/store
            # Or by using local folder
            # - ./store:/usr/src/app/store
            ports:
                - '8091:8091' # port for web interface
                - '3001:3001' # port for Z-Wave JS websocket server
    networks:
        zwave:
    volumes:
        zwave-config:
            name: zwave-config

    N’hésitez pas à changer les ports, s’ils entrent en conflit avec d’autres appli.

    Il ne reste plus qu’à lancer notre container, puis d’ajouter l’intégration Z-wave dans Home Assistant.

    Il faudra indiquer pour le serveur websocket : ws://localhost:3001

    Conclusion

    Nous avons vu comment effectuer l’installation de Hacs, Ewelink et Zwave-js-ui pour Home Assistant sur Docker.

    Nous avons maintenant tous les outils nécessaires pour commencer la configuration de notre maison intelligente.

    Dans un prochain article, je vous montrerai comment mettre en place un thermostat avec le module NodON chauffage.

    Il commence à faire froid, et çà sera très utile pour améliorer notre confort sans pour autant nous ruiner.

  • Installation de Home Assistant sous Docker

    Installation de Home Assistant sous Docker

    Cet article traitera de l’installation de Home assistant sous docker.

    J’expliquerai pourquoi j’utilise Home Assistant comme box domotique puis nous aborderons son installation.

    Home Assistant, awaken your home

    Mais au juste, c’est quoi une box domotique ?

    Du latin domus (« maison »), et du suffixe -tique (ou -ique devant t), « qui est propre à », dans le domaine des sciences (Wikipedia)

    La domotique est l’intégration des techniques modernes d’aménagement dans la maison, de l’automatisation et des technologies électro-domestiques.

    Le but de la domotique est d’automatiser les tâches routinières pour un meilleur confort au quotidien. En premier lieu, elle permet d’assurer votre sécurité et votre confort mais également de véritables économies d’énergie, tout en baissant votre emprunte carbone, grâce à des algorithmes de plus en plus poussés.

    Un fonctionnement en local

    Home assistant est un logiciel open source qui donne la priorité au réseau local et à la vie privée.

    Cela veut dire que Home assistant fonctionne en local et ne dépend pas d’un cloud.

    Les effets se sont ressentir car les commandes sont instantanées. Elles ne souffrent du temps de latence de connexion à l’internet.

    Un fonctionnement Online

    Et oui, car de nos jours, si on ne peut pas agir à distance, quel est l’intérêt ?

    Vous pouvez donc accéder à votre box domotique de plusieurs façons.

    Certaines demanderont d’ouvrir des ports de votre routeur, d’intégrer un certificat SSL, de vous connecter en local via un VPN. Vous avez aussi la possibilité de souscrire à un abonnement chez Nabu-casa pour moins de 6€ par mois, pour bénéficier du cloud de Home Assistant.

    Une communauté massive et présente

    Si vous tapez sur Google Home assistant, vous verrez de nombreux sites parler d’home assistant. Il y a de nombreux tutoriels sur le sujet, des forums spécialisés. On voit que nous sommes dans l’open source et l’entraide est au centre de cette politique.

    De plus, grâce à HACS vous pourrez bénéficier des plugins développés par la communauté, simplifiant l’automatisation de nos appareils.

    3 méthodes d’installation différentes

    Vous pouvez installer Home Assistant de trois façon différente.

    En tant que système d’exploitation. Vous dédiez alors une machine pour cette tâche. Le grand avantage est que Home assistant se gérera tout seul. Il fera sa propre maintenance, et gérera la sécurité sur serveur.

    Cette méthode est à privilégier si vous êtes peu habitués à utiliser un système par ligne de commande.

    Installation de Home Assistant sous docker

    Si vous avez suivi l’article Installation de Raspberry PI OS et Docker, vous avez alors docker et docker compose d’installé.

    Nous commencerons par créer un répertoire Home-assistant et nous y déplacerons dedans :

    mkdir home-assistant && cd home-assistant

    Puis nous créerons notre fichier docker-compose

    sudo nano docker-compose.yml

    Nous allons commencer notre fichier en déclarant le nom du service, le nom du container, puis l’image à utiliser

    services:
        homeassistant:
             container_name: homeassistant
             image: "ghcr.io/home-assistant/home-assistant:stable"

    Si vous avez une clé zigbee il faudra l’indiquer dans le docker compose.

    Vous pouvez faire cette commande pour identifier le port usb utilisé :

    ls -l /dev/serial/by-id

    Puis nous indiquerons les volumes qu’utilisera Home Assistant

        devices:
          - /dev/ttyUSB0:/dev/ttyUSB0
        volumes:
          - ./config:/config
          - /etc/localtime:/etc/localtime:ro
          - /run/dbus:/run/dbus:ro

    Pour finir nous déclarerons le mode privilégié, puis l’utilisation du réseau hôte.

        restart: unless-stopped
        privileged: true
        network_mode: host 

    Nous pouvons fermer notre docker-compose et lancer la création du container.

    sudo docker compose up -d

    Vous pouvez vous connecter à l’interface de Home-Assistant avec :

    http://IP-hôte:8123

    Une fois l’installation terminée, vous serez invité à créer votre compte.

    Conclusion

    Nous avons appris à faire l’installation de home assistant sous docker.

    Nous avons vu les points positifs d’utiliser ce logiciel comme box domotique.

    Nous avons écrit le docker compose de celui-ci et nous nous sommes connectés à l’interface de Home Assistant.

    Lors d’un prochain billet, je vous montrerai comment installer HACS, ewelink smart home, et z-wave-js-ui.