Raspberry Pi
In questa guida, installerai MyEMS su Raspberry Pi.
Prerequisiti
- Raspberry Pi 5 o Raspberry Pi 4 Model B
- Raspberry Pi OS (64-bit) Una versione di Debian Bookworm con il desktop Raspberry Pi Rilasciata:2024-07-04
Clona il codice sorgente
sudo apt install git
sudo apt install pip
sudo apt install ufw
cd ~ && git clone https://github.com/myems/myems
Step 1 Database
- Setup MySQL Server
sudo apt update
sudo apt upgrade
sudo apt install mariadb-server
Di default, MySQL viene installato senza alcuna password, il che significa che puoi accedere al server MySQL senza autenticazione. Esegui il seguente comando per iniziare il processo di messa in sicurezza di MySQL.
sudo mysql_secure_installation
Enter current password for root (enter for none): [Enter key or return key]
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
- Installa lo schema del database e gli script per MyEMS.
Vedi Database
Passo 2 myems-api
- Installa il servizio myems-api:
sudo cp -r ~/myems/myems-api /myems-api
cd /myems-api
Per evitare l'errore 'externally-managed-environment', crea una cartella di configurazione dell'ambiente virtuale:
sudo python -m venv venv
Inizia a usare l'ambiente virtuale
source venv/bin/activate
Installa i requisiti
sudo venv/bin/pip install -r requirements.txt
Disattiva l'ambiente virtuale
deactivate
Crea il file .env basato su example.env e modifica il file .env se necessario:
sudo cp /myems-api/example.env /myems-api/.env
sudo nano /myems-api/.env
Cambia il percorso di gunicorn in 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
Aggiungi la porta al firewall:
sudo ufw allow 8000
Configura i file di 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/
Abilita i servizi affinché si avviino automaticamente all'avvio:
sudo systemctl enable myems-api.socket
sudo systemctl enable myems-api.service
Avvia i servizi:
sudo systemctl start myems-api.socket
sudo systemctl start myems-api.service
Passo 3 myems-admin
- Installa il server NGINX
Consulta http://nginx.org/en/linux_packages.html#Debian
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
- Configura NGINX
sudo nano /etc/nginx/nginx.conf
Nella sezione 'http', aggiungi alcune direttive:
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;
...
}
Nella sezione 'http', aggiungi una nuova sezione 'server' con le direttive come sotto:
server {
listen 8001;
server_name myems-admin;
location / {
root /var/www/myems-admin;
index index.html index.htm;
}
## To avoid CORS issue, use Nginx to proxy myems-api to path /api
## Add another location /api in 'server' and replace demo address http://127.0.0.1:8000/ with actual url
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
- Installa myems-admin:
sudo mkdir /var/www
sudo cp -r ~/myems/myems-admin /var/www/myems-admin
sudo chmod 0755 -R /var/www/myems-admin
Controlla il file di configurazione e modificalo se necessario:
sudo nano /var/www/myems-admin/app/api.js
La cartella 'upload' è destinata ai file caricati dagli utenti. NON eliminare/spostare/sovrascrivere la cartella 'upload' quando aggiorni myems-admin.
/var/www/myems-admin/upload
Avvia Nginx:
sudo systemctl start nginx
Aggiungi la porta al firewall:
sudo ufw allow 8001
Passo 4 myems-modbus-tcp
In questo passaggio, installerai il servizio myems-modbus-tcp.
sudo cp -r ~/myems/myems-modbus-tcp /myems-modbus-tcp
cd /myems-modbus-tcp
Per evitare l'errore 'externally-managed-environment', crea una cartella di configurazione dell'ambiente virtuale:
sudo python -m venv venv
Inizia a usare l'ambiente virtuale
source venv/bin/activate
Installa i requisiti
sudo venv/bin/pip install -r requirements.txt
Disattiva l'ambiente virtuale
deactivate
Copia il file example.env in .env e modifica il file .env:
sudo cp /myems-modbus-tcp/example.env /myems-modbus-tcp/.env
sudo nano /myems-modbus-tcp/.env
Cambia il percorso di python in 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
Configura il servizio systemd:
sudo cp myems-modbus-tcp.service /lib/systemd/system/
Abilita il servizio:
sudo systemctl enable myems-modbus-tcp.service
Avvia il servizio:
sudo systemctl start myems-modbus-tcp.service
Monitora il servizio:
sudo systemctl status myems-modbus-tcp.service
Visualizza il log:
cat /myems-modbus-tcp.log
Passo 5 myems-cleaning
In questo passaggio, installerai il servizio myems-cleaning.
sudo cp -r ~/myems/myems-cleaning /myems-cleaning
cd /myems-cleaning
Per evitare l'errore 'externally-managed-environment', crea una cartella di configurazione dell'ambiente virtuale:
sudo python -m venv venv
Inizia a usare l'ambiente virtuale
source venv/bin/activate
Installa i requisiti
sudo venv/bin/pip install -r requirements.txt
Disattiva l'ambiente virtuale
deactivate
Copia il file example.env in .env e modifica il file .env:
sudo cp /myems-cleaning/example.env /myems-cleaning/.env
nano /myems-cleaning/.env
Cambia il percorso di python in 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
Configura il servizio systemd:
sudo cp /myems-cleaning/myems-cleaning.service /lib/systemd/system/
Abilita il servizio:
sudo systemctl enable myems-cleaning.service
Avvia il servizio:
sudo systemctl start myems-cleaning.service
Monitora il servizio:
sudo systemctl status myems-cleaning.service
Visualizza il log:
cat /myems-cleaning.log
Passo 6 myems-normalization
In questo passaggio, installerai il servizio myems-normalization.
sudo cp -r ~/myems/myems-normalization /myems-normalization
cd /myems-normalization
Per evitare l'errore 'externally-managed-environment', crea una cartella di configurazione dell'ambiente virtuale:
sudo python -m venv venv
Inizia a usare l'ambiente virtuale
source venv/bin/activate
Installa i requisiti
sudo venv/bin/pip install -r requirements.txt
Disattiva l'ambiente virtuale
deactivate
Copia il file example.env in .env e modifica il file .env:
sudo cp /myems-normalization/example.env /myems-normalization/.env
sudo nano /myems-normalization/.env
Cambia il percorso di python in 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
Configura il servizio systemd:
sudo cp /myems-normalization/myems-normalization.service /lib/systemd/system/
Abilita il servizio:
sudo systemctl enable myems-normalization.service
Avvia il servizio:
sudo systemctl start myems-normalization.service
Monitora il servizio:
sudo systemctl status myems-normalization.service
Visualizza il log:
cat /myems-normalization.log
Passo 7 myems-aggregation
In questo passaggio, installerai il servizio myems-aggregation.
sudo cp -r ~/myems/myems-aggregation /myems-aggregation
cd /myems-aggregation
Per evitare l'errore 'externally-managed-environment', crea una cartella di configurazione dell'ambiente virtuale:
sudo python -m venv venv
Inizia a usare l'ambiente virtuale
source venv/bin/activate
Installa i requisiti
sudo venv/bin/pip install -r requirements.txt
Disattiva l'ambiente virtuale
deactivate
Copia il file example.env in .env e modifica il file .env:
sudo cp /myems-aggregation/example.env /myems-aggregation/.env
sudo nano /myems-aggregation/.env
Cambia il percorso di python in 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
Configura il servizio systemd:
sudo cp /myems-aggregation/myems-aggregation.service /lib/systemd/system/
Abilita il servizio:
sudo systemctl enable myems-aggregation.service
Avvia il servizio:
sudo systemctl start myems-aggregation.service
Monitora il servizio:
sudo systemctl status myems-aggregation.service
Visualizza il log:
cat /myems-aggregation.log
Passo 8 myems-web
In questo passaggio, installerai il servizio UI myems-web.
-
Installa il server NGINX (se già installato in myems-admin, può essere ignorato) Consulta http://nginx.org/en/docs/install.html
-
Configura NGINX
Rimuovi i file predefiniti
sudo rm /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/conf.d/default.conf
Aggiungi un nuovo file sotto /etc/nginx/conf.d/
sudo nano /etc/nginx/conf.d/myems-web.conf
Aggiungi una nuova sezione 'server' con le direttive come sotto:
server {
listen 80;
server_name myems-web;
location / {
root /var/www/myems-web;
index index.html index.htm;
# add try_files directive to avoid 404 error while refreshing pages
try_files $uri /index.html;
}
## To avoid CORS issue, use Nginx to proxy myems-api to path /api
## Add another location /api in 'server'
## NOTE: replace dafault address http://127.0.0.1:8000/ with actual IP or URL
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
- Installa MyEMS Web UI:
Installa NodeJS:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs
Modifica il file config.js:
Ottieni il mapboxToken su https://mapbox.com e poi imposta showOnlineMap su true. Se vuoi disattivare la funzione mappa online, imposta showOnlineMap su false
cd ~/myems/myems-web
sudo nano src/config.js
Compila e comprimi:
sudo npm i --unsafe-perm=true --allow-root --legacy-peer-deps
sudo npm run build
Installa
sudo mv build /var/www/myems-web
Riavvia NGINX:
sudo systemctl restart nginx
Aggiungi la porta al firewall:
sudo ufw allow 80
Post-installazione
Congratulazioni! Ora puoi accedere all'interfaccia MyEMS Admin UI e Web UI.
Porte predefinite
MyEMS Web UI: 80
MyEMS API: 8000
MyEMS Admin UI: 8001
Supponendo che l'indirizzo del server sia 192.168.1.8 (sostituisci con l'indirizzo reale) Accedi a MyEMS Web UI su http://192.168.1.8 (80 può essere omesso) Accedi a MyEMS Admin UI su http://192.168.1.8:8001
Password predefinite
MyEMS Admin UI
Nome utente:
administrator
Password:
!MyEMS1
MyEMS Web UI
Nome utente:
administrator@myems.io
Password:
!MyEMS1