My Own Memory Hole
Blog♯météo

Auto-hébergement, DynHost OVH et certificat Let's Encrypt sous Raspbian

Ayant « associé » ma station météo Netatmo à mon Raspberry Pi grâce à WeeWX (lire ce post), je souhaite désormais rendre accessible sur Internet le site web ainsi généré. Je considère ainsi que vous avez déjà un serveur Apache fonctionnel et configuré (même si nous aborderons la création d'un VirtualHost par la suite).

DynHost et mise à jour de l'IP

Étant chez OVH, je profite de leur service DynHOST qui « permet de faire pointer un sous-domaine vers une adresse IP dynamique qui sera mise à jour dans votre zone DNS à chaque changement de celle-ci. ».

On crée notre DynHost puis on en gère les accès, en créant un nouvel identifiant. Puis, sur notre Raspberry Pi, on installe ddclient :

sudo apt install ddclient

Lors de l'installation, des écrans successifs vont nous permettre de le configurer :

  1. Fournisseur de service de DNS dynamique : Autre
  2. Protocole de mise à jour du DNS dynamique : dyndns2
  3. Serveur de DNS dynamique : www.ovh.com
  4. Mandataire HTTP : néant
  5. Identifiant : l'identifiant saisi précédemment (comprenant le nom de domaine en préfixe)
  6. Mot de passe : le mot de passe correspondant
  7. Méthode de découverte d'adresse IP : Service de découverte d'IP basée sur le web
  8. Hôtes à mettre à jour : le DynHost créé précédemment

La configuration peut se faire sinon à la main, en éditant le fichier /etc/ddclient.conf qui doit ressembler à cela :

protocol=dyndns2
server=www.ovh.com
login=DOMAINE-USER
password='PASSWORD'
DYNHOST

Redirection des ports

Ensuite, il faut se rendre dans l'interface de gestion de votre Box Internet et configurer, dans la section NAT, la redirection des port 80 et 443 vers ceux de votre Raspberry Pi (pour en connaître l'IP sur votre réseau local, utilisez la commande hostname -I).

Désormais, en saisissant l'URL de votre DynHost, vous devriez accéder à la même page que lorsque vous accédez à l'adresse localhost.

Mise en place du HTTPS

Pour ce faire, nous allons générer un certificat Let's Encrypt pour notre DynHost.

On commence par copier, dans /etc/apache2/sites-available/, le fichier 000-default.conf vers DYNHOST.conf ; par exemple :

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/meteo.momh.fr.conf

puis par le configurer pour pointer vers notre répertoire /var/www/html/weewx ou autre répertoire en fonction du ou des skin(s) que vous utilisez. Par exemple, minimalement :

<VirtualHost *:80>
        ServerName meteo.momh.fr

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/weewx

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Pour générer le certificat, nous allons utiliser certbot, qu'il convient d'installer :

sudo apt install certbot python3-certbot-apache

puis d'activer le module ssl d'Apache :

sudo a2enmode ssl
sudo systemctl restart apache2

On peut alors générer notre certificat avec la commande suivante :

sudo certbot --apache -d DynHOST

Il vous est proposé de rediriger l'éventuel traffic HTTP vers HTTPS :

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Un certificat est alors généré et un nouvel hôte virtuel est configuré dans Apache, à l'emplacement /etc/apache2/sites-available/DYNHOST-le-ssl.conf. Si vous avez choisi l'option 2, le VirtualHost présenté ci-dessus se voit modifié avec les lignes suivantes :

RewriteEngine on
RewriteCond %{SERVER_NAME} =DYNHOST
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Pour voir que tout fonctionne, on peut utiliser l'outil de test proposé par ssllabs.com.

Station météo Netatmo & WeeWX [bis]

Suite à mon premier post sur le sujet, je me suis attelé plus longuement à la compatibilité du plugin weewx-netatmo de Matthew Wall avec les versions 4 de WeeWX sous Python 3.

Installation

De ce fait, on n'a plus besoin d'installer une ancienne version de WeeWX et l'on peut se reporter sur la version disponible dans les dépôts :

sudo apt install weewx

Désormais, la configuration et autres skins ne se trouvent plus dans /home/weewx mais dans /etc/weewx. L'installation du plugin weewx-netatmo peut se faire depuis mon fork du plugin :

wget -O weewx-netatmo.zip https://github.com/bricebou/weewx-netatmo/archive/master.zip
sudo wee_extension --install weewx-netatmo.zip
sudo wee_config --reconfigure

On ouvre ensuite le fichier de configuration /etc/weewx/weewx.conf pour vérifier que nos identifiants Netatmo soient bien pris en compte. Ensuite, on redémarre WeeWX :

sudo service weewx restart

Modifications apportées

Pour ce faire, on utilise l'outil 2to3 :

sudo pip3 install 2to3

puis on lance la commande :

2to3 -w netatmo.py

Une erreur subsistait mais le problème avait déjà été résolu par kwalker05 ; il suffit, à la ligne 521, de remplacer :

params = urlencode(params)

par

params = urlencode(params).encode("utf-8")

Station météo Netatmo & WeeWX

Dans le cadre de la «digitalisation» de La Sculpture : les Pluies de Patrick Dubrac, nous cherchons à aller au-delà de ce que nous avons mis en place avec Le Calendrier des pluies, mis à jour mensuellement à partir des données météorologiques quotidiennes. D'où l'idée de développer un prototype associant une station météo Netatmo à un Raspberry Pi sur lequel serait installé WeeWX, un petit programme en Python qui permet d'interagir avec de multiples modèles de stations météo, de publier les données sur de multiples sites, de conserver les données dans des bases de données...

Cependant, le pilote pour les stations Netatmo (https://github.com/matthewwall/weewx-netatmo) n'est pas compatible avec la version 4 de WeeWX...

[EDIT : depuis, je suis parvenu à rendre compatible le plugin avec les versions 4 de WeeWX tel que présenté dans cet article ; certains éléments de cet article sont toujours valables, tels ceux consacrés à la base de données.]

On bascule donc sur la dernière des versions 3 de WeeWX disponibles, la 3.9.2 :

wget http://weewx.com/downloads/released_versions/weewx-3.9.2.tar.gz

On installe les dépendances nécessaires :

sudo apt install python-configobj python-pil python-serial python-usb python-pip python-cheetah python-ephem mariadb-client python-mysqldb

Puis on lance l'installation :

tar xvfz weewx-3.9.2.tar.gz
cd weewx-3.9.2
python2 setup.py build
sudo python setup.py install

L'ensemble des exécutables se trouve dans /home/weewx/bin/ ; le fichier de configuration est à l'emplacement /home/weewx/weewx.conf

On installe ensuite le pilote weewx-netatmo (https://github.com/matthewwall/weewx-netatmo) :

wget -O weewx-netatmo.zip https://github.com/matthewwall/weewx-netatmo/archive/master.zip
sudo /home/weewx/bin/wee_extension --install weewx-netatmo.zip

Puis on configure weewx :

sudo /home/weewx/bin/wee_config --reconfigure

On édite ensuite le fichier de configuration à la main  :

sudo nano /home/weewx/weewx.conf

On s'assure que nos identifiants Netatmo sont bien pris en compte et on bascule, dans la sous-section [[wx_binding]] de la section [DataBindings] sur une base de données MySQL :

database = archive_mysql

On crée une base de données avec les mêmes identifiants que ceux que nous avons indiqués dans la sous-section [[archive_mysql]] de la secion [Databases], par défaut :

    # MySQL
    [[archive_mysql]]
        database_name = weewx
        database_type = MySQL
sudo mysql -u root -p
MariaDB [(none)]> CREATE DATABASE weewx;
MariaDB [(none)]> CREATE USER 'weewx'@localhost IDENTIFIED BY 'weewx';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON weewx.* TO 'weewx'@localhost;
MariaDB [(none)]> FLUSH PRIVILEGES;

Enfin, on fait en sorte que WeeWX soit lancé au démarrage comme un service :

cd /home/weewx
sudo cp util/init.d/weewx.debian /etc/init.d/weewx
sudo chmod +x /etc/init.d/weewx
sudo update-rc.d weewx defaults 98
sudo /etc/init.d/weewx start