Aller au contenu principal

Raspberry Pi

Dans ce guide, vous allez déployer MyEMS sur un Raspberry Pi.

Prérequis

  • Raspberry Pi 5 ou Raspberry Pi 4 Model B
  • Raspberry Pi OS (64 bits) : une version de Debian Bookworm avec le bureau Raspberry Pi, sortie le 04/07/2024

Cloner le code source

sudo apt install git
sudo apt install pip
sudo apt install ufw
cd ~ && git clone https://github.com/myems/myems

Étape 1 Base de données

  • Installer le serveur MySQL
sudo apt update
sudo apt upgrade
sudo apt install mariadb-server

Par défaut, MySQL est installé sans mot de passe, vous pouvez donc accéder au serveur MySQL sans authentification. Exécutez la commande suivante pour lancer le processus de sécurisation de MySQL.

sudo mysql_secure_installation
Enter current password for root (enter for none): [Appuyez sur Entrée]
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] Y
New password: !MyEMS1
Re-enter new password: !MyEMS1
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
  • Installer le schéma et les scripts de la base de données pour MyEMS Voir Base de données

Étape 2 myems-api

  • Installer le service myems-api
sudo cp -r ~/myems/myems-api /myems-api
cd /myems-api

Pour éviter l'erreur « error: externally-managed-environment », créez un dossier de configuration pour l'environnement virtuel :

sudo python -m venv venv

Activer l'environnement virtuel

source venv/bin/activate

Installer les dépendances

sudo venv/bin/pip install -r requirements.txt

Désactiver l'environnement virtuel

deactivate

Créer le fichier .env à partir du fichier example.env et le modifier si nécessaire :

sudo cp /myems-api/example.env /myems-api/.env
sudo nano /myems-api/.env

Modifier le chemin de gunicorn dans le fichier myems-api.service :

sudo nano /myems-api/myems-api.service
[Unit]
Description=myems-api daemon
Requires=myems-api.socket
After=network.target

[Service]
PIDFile=/run/myems-api/pid
User=root
Group=root
WorkingDirectory=/myems-api
ExecStart=/myems-api/venv/bin/gunicorn -b 0.0.0.0:8000 --pid /run/myems-api/pid --timeout 600 --workers=4 app:api
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Ouvrir le port dans le pare-feu :

sudo ufw allow 8000

Configurer les fichiers systemd :

sudo cp /myems-api/myems-api.service /lib/systemd/system/
sudo cp /myems-api/myems-api.socket /lib/systemd/system/
sudo cp /myems-api/myems-api.conf /usr/lib/tmpfiles.d/

Activer ensuite les services pour qu'ils démarrent automatiquement au démarrage du système :

sudo systemctl enable myems-api.socket
sudo systemctl enable myems-api.service

Démarrer les services :

sudo systemctl start myems-api.socket
sudo systemctl start myems-api.service

Étape 3 myems-admin

sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx
sudo apt update
sudo apt install nginx
  • Configurer NGINX
sudo nano /etc/nginx/nginx.conf

Dans la section « http », ajouter les directives suivantes :

http {
client_header_timeout 600;
client_max_body_size 512M;
gzip on;
gzip_min_length 512;
gzip_proxied any;
gzip_types *;
gzip_vary on;
proxy_buffering off;

...
}

Dans la section « http », ajouter une nouvelle section « server » avec les directives ci-dessous :

  server {
listen 8001;
server_name myems-admin;
location / {
root /var/www/myems-admin;
index index.html index.htm;
}
## Pour éviter le problème CORS, utiliser Nginx pour proxyfier myems-api vers le chemin /api
## Ajouter une autre location /api dans la section 'server' et remplacer l'adresse exemple http://127.0.0.1:8000/ par l'URL réelle
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • Installer myems-admin :
sudo mkdir /var/www
sudo cp -r ~/myems/myems-admin  /var/www/myems-admin
sudo chmod 0755 -R /var/www/myems-admin

Vérifier le fichier de configuration et le modifier si nécessaire :

sudo nano /var/www/myems-admin/app/api.js
Attention

Le dossier « upload » contient les fichiers téléchargés par les utilisateurs. NE PAS supprimer, déplacer ou écraser ce dossier lors de la mise à jour de myems-admin.

 /var/www/myems-admin/upload

Démarrer Nginx :

sudo systemctl start nginx

Ouvrir le port dans le pare-feu :

sudo ufw allow 8001

Étape 4 myems-modbus-tcp

Dans cette étape, vous allez installer le service myems-modbus-tcp.

sudo cp -r ~/myems/myems-modbus-tcp /myems-modbus-tcp
cd /myems-modbus-tcp

Pour éviter l'erreur « error: externally-managed-environment », créez un dossier de configuration pour l'environnement virtuel :

sudo python -m venv venv

Activer l'environnement virtuel

source venv/bin/activate

Installer les dépendances

sudo venv/bin/pip install -r requirements.txt

Désactiver l'environnement virtuel

deactivate

Copier le fichier example.env en .env et le modifier :

sudo cp /myems-modbus-tcp/example.env /myems-modbus-tcp/.env
sudo nano /myems-modbus-tcp/.env

Modifier le chemin de Python dans le fichier myems-modbus-tcp.service

sudo nano myems-modbus-tcp.service
[Unit]
Description=myems-modbus-tcp daemon
After=network.target

[Service]
User=root
Group=root
ExecStart=/myems-modbus-tcp/venv/bin/python3 /myems-modbus-tcp/main.py
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

Configurer le service systemd :

sudo cp myems-modbus-tcp.service /lib/systemd/system/

Activer le service :

sudo systemctl enable myems-modbus-tcp.service

Démarrer le service :

sudo systemctl start myems-modbus-tcp.service

Surveiller le service :

sudo systemctl status myems-modbus-tcp.service

Consulter les logs :

cat /myems-modbus-tcp.log

Étape 5 myems-cleaning

Dans cette étape, vous allez installer le service myems-cleaning.

sudo cp -r ~/myems/myems-cleaning /myems-cleaning
cd /myems-cleaning

Pour éviter l'erreur « error: externally-managed-environment », créez un dossier de configuration pour l'environnement virtuel :

sudo python -m venv venv

Activer l'environnement virtuel

source venv/bin/activate

Installer les dépendances

sudo venv/bin/pip install -r requirements.txt

Désactiver l'environnement virtuel

deactivate

Copier le fichier example.env en .env et le modifier :

sudo cp /myems-cleaning/example.env /myems-cleaning/.env
nano /myems-cleaning/.env

Modifier le chemin de Python dans le fichier myems-cleaning.service

sudo nano myems-cleaning.service
[Unit]
Description=myems-cleaning daemon
After=network.target

[Service]
User=root
Group=root
ExecStart=/myems-cleaning/venv/bin/python3 /myems-cleaning/main.py
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

Configurer le service systemd :

sudo cp /myems-cleaning/myems-cleaning.service /lib/systemd/system/

Activer le service :

sudo systemctl enable myems-cleaning.service

Démarrer le service :

sudo systemctl start myems-cleaning.service

Surveiller le service :

sudo systemctl status myems-cleaning.service

Consulter les logs :

cat /myems-cleaning.log

Étape 6 myems-normalization

Dans cette étape, vous allez installer le service myems-normalization.

sudo cp -r ~/myems/myems-normalization /myems-normalization
cd /myems-normalization

Pour éviter l'erreur « error: externally-managed-environment », créez un dossier de configuration pour l'environnement virtuel :

sudo python -m venv venv

Activer l'environnement virtuel

source venv/bin/activate

Installer les dépendances

sudo venv/bin/pip install -r requirements.txt

Désactiver l'environnement virtuel

deactivate

Copier le fichier example.env en .env et le modifier :

sudo cp /myems-normalization/example.env /myems-normalization/.env
sudo nano /myems-normalization/.env

Modifier le chemin de Python dans le fichier myems-normalization.service

sudo nano myems-normalization.service
[Unit]
Description=myems-normalization daemon
After=network.target

[Service]
User=root
Group=root
ExecStart=/myems-normalization/venv/bin/python3 /myems-normalization/main.py
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

Configurer le service systemd :

sudo cp /myems-normalization/myems-normalization.service /lib/systemd/system/

Activer le service :

sudo systemctl enable myems-normalization.service

Démarrer le service :

sudo systemctl start myems-normalization.service

Surveiller le service :

sudo systemctl status myems-normalization.service

Consulter les logs :

cat /myems-normalization.log

Étape 7 myems-aggregation

Dans cette étape, vous allez installer le service myems-aggregation.

sudo cp -r ~/myems/myems-aggregation /myems-aggregation
cd /myems-aggregation

Pour éviter l'erreur « error: externally-managed-environment », créez un dossier de configuration pour l'environnement virtuel :

sudo python -m venv venv

Activer l'environnement virtuel

source venv/bin/activate

Installer les dépendances

sudo venv/bin/pip install -r requirements.txt

Désactiver l'environnement virtuel

deactivate

Copier le fichier example.env en .env et le modifier :

sudo cp /myems-aggregation/example.env /myems-aggregation/.env
sudo nano /myems-aggregation/.env

Modifier le chemin de Python dans le fichier myems-aggregation.service

sudo nano myems-aggregation.service
[Unit]
Description=myems-aggregation daemon
After=network.target

[Service]
User=root
Group=root
ExecStart=/myems-aggregation/venv/bin/python3 /myems-aggregation/main.py
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

Configurer le service systemd :

sudo cp /myems-aggregation/myems-aggregation.service /lib/systemd/system/

Activer le service :

sudo systemctl enable myems-aggregation.service

Démarrer le service :

sudo systemctl start myems-aggregation.service

Surveiller le service :

sudo systemctl status myems-aggregation.service

Consulter les logs :

cat /myems-aggregation.log

Étape 8 myems-web

Dans cette étape, vous allez installer le service interface myems-web.

  • Installer le serveur NGINX (si déjà installé lors de l'étape myems-admin, vous pouvez ignorer cette partie) Se référer à http://nginx.org/en/docs/install.html

  • Configurer NGINX Supprimer les fichiers par défaut

sudo rm /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/conf.d/default.conf

Ajouter un nouveau fichier dans le répertoire /etc/nginx/conf.d/

sudo nano /etc/nginx/conf.d/myems-web.conf

Ajouter une nouvelle section « server » avec les directives ci-dessous :

server {
listen 80;
server_name myems-web;
location / {
root /var/www/myems-web;
index index.html index.htm;
# ajouter la directive try_files pour éviter l'erreur 404 lors du rafraîchissement des pages
try_files $uri /index.html;
}
## Pour éviter le problème CORS, utiliser Nginx pour proxyfier myems-api vers le chemin /api
## Ajouter une autre location /api dans la section 'server'
## NOTE : remplacer l'adresse par défaut http://127.0.0.1:8000/ par l'IP ou l'URL réelle
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • Installer l'interface MyEMS Web UI : Installer NodeJS :
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs

Modifier le fichier config.js :

Note

Obtenir le mapboxToken sur https://mapbox.com, puis définir showOnlineMap sur true. Pour désactiver la carte en ligne, mettre showOnlineMap sur false

cd ~/myems/myems-web
sudo nano src/config.js

Construire et compresser le projet :

sudo npm i --unsafe-perm=true --allow-root --legacy-peer-deps
sudo npm run build

Installer le projet :

sudo mv build  /var/www/myems-web

Redémarrer NGINX :

sudo systemctl restart nginx

Ouvrir le port dans le pare-feu :

sudo ufw allow 80

Post-installation

Félicitations ! Vous pouvez désormais vous connecter aux interfaces MyEMS Admin et MyEMS Web.

Ports par défaut

MyEMS Web UI : 80 MyEMS API : 8000 MyEMS Admin UI : 8001

En supposant que l'adresse du serveur est 192.168.1.8 (remplacez par votre adresse réelle) Accéder à MyEMS Web UI : http://192.168.1.8 (le port 80 peut être omis) Accéder à MyEMS Admin UI : http://192.168.1.8:8001

Mot de passe par défaut

MyEMS Admin UI Identifiant :

administrator

Mot de passe :

!MyEMS1

MyEMS Web UI Identifiant :

administrator@myems.io

Mot de passe :

!MyEMS1

Dépannage