Skip to main content

Fedora

In this guide, you will deploy MyEMS on Fedora server.

Prerequisites

This guide describes how to install MyEMS on Fedora 37 Server. Hardware requirements depend on chosen database and amount of devices connected to the system. To run MyEMS and MySQL on a single machine you will need at least 4GB of RAM.

Update the system and install tools

sudo dnf update
sudo dnf install git
sudo dnf install python3-pip

Clone source code:

cd ~
git clone https://github.com/myems/myems

Step 1 Database

See Database

Step 2 myems-api

  • Install myems-api service:
sudo cp -r ~/myems/myems-api /myems-api
cd /myems-api
sudo pip install -r requirements.txt

Create .env file based on example.env and edit the .env file if needed:

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

Add port to firewall:

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=8000/tcp --permanent
sudo firewall-cmd --reload

Setup systemd configure files:

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/

Next enable the services so that they autostart at boot:

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

Start the services :

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

Step 3 myems-admin

  • Install NGINX Server

refer to http://nginx.org/en/linux_packages.html#RHEL

Enable the nginx service:

sudo systemctl enable nginx.service
  • Configure NGINX
sudo nano /etc/nginx/nginx.conf

In the 'http' section, add some directives:

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;
...

}

Add a new file under /etc/nginx/conf.d/

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

Write with directives as below, and replace the default myems-api url http://127.0.0.1:8000/ with actual url if the myems-api servcie hosted on different server

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'
## Replace the default myems-api url http://127.0.0.1:8000/ with actual url if the myems-api servcie hosted on different server
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • Install myems-admin : If the server can not connect to the internet, please compress the myems/myems-admin folder and upload it to the server and extract it to ~/myems/myems-admin
sudo mkdir /var/www
sudo cp -r ~/myems/myems-admin /var/www/myems-admin
sudo chmod 0755 -R /var/www/myems-admin

Check the config file and change it if necessary:

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

The 'upload' folder is for user uploaded files. DO NOT delete/move/overwrite the 'upload' folder when you upgraded myems-admin.

 /var/www/myems-admin/upload

Unlock the port and add the port to firewall:

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=8001/tcp --permanent
sudo firewall-cmd --reload

Restart the nginx service:

sudo systemctl restart nginx.service
tip

If you encounter '403 Forbidden' nginx error, you may fix it by changing SELinx mode with command 'sudo setenforce 0'

Step 4 myems-modbus-tcp

In this step, you will install myems-modbus-tcp service.

sudo cp -r ~/myems/myems-modbus-tcp /myems-modbus-tcp
cd /myems-modbus-tcp
sudo pip install -r requirements.txt

Copy exmaple.env file to .env and modify the .env file:

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

Setup systemd service:

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

Enable the service:

sudo systemctl enable myems-modbus-tcp.service

Start the service:

sudo systemctl start myems-modbus-tcp.service

Monitor the service:

sudo systemctl status myems-modbus-tcp.service

View the log:

cat /myems-modbus-tcp.log

Step 5 myems-cleaning

In this step, you will install myems-cleaning service.

sudo cp -r ~/myems/myems-cleaning /myems-cleaning
cd /myems-cleaning
sudo pip install -r requirements.txt

Copy exmaple.env file to .env and modify the .env file:

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

Setup systemd service:

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

Enable the service:

sudo systemctl enable myems-cleaning.service

Start the service:

sudo systemctl start myems-cleaning.service

Monitor the service:

sudo systemctl status myems-cleaning.service

View the log:

cat /myems-cleaning.log

Step 6 myems-normalization

In this step, you will install myems-normalization service.

sudo cp -r ~/myems/myems-normalization /myems-normalization
cd /myems-normalization
sudo pip install -r requirements.txt

Copy exmaple.env file to .env and modify the .env file:

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

Setup systemd service:

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

Enable the service:

sudo systemctl enable myems-normalization.service

Start the service:

sudo systemctl start myems-normalization.service

Monitor the service:

sudo systemctl status myems-normalization.service

View the log:

cat /myems-normalization.log

Step 7 myems-aggregation

In this step, you will install myems-aggregation service.

sudo cp -r ~/myems/myems-aggregation /myems-aggregation
cd /myems-aggregation
sudo pip install -r requirements.txt

Copy exmaple.env file to .env and modify the .env file:

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

Setup systemd service:

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

Enable the service:

sudo systemctl enable myems-aggregation.service

Start the service:

sudo systemctl start myems-aggregation.service

Monitor the service:

sudo systemctl status myems-aggregation.service

View the log:

cat /myems-aggregation.log

Step 8 myems-web

In this step, you will install myems-web UI service.

  • Install NGINX Server

refer to http://nginx.org/en/linux_packages.html#RHEL

  • Configure NGINX

Remove default files

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

Add a new file under /etc/nginx/conf.d/

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

Add a new 'server' section with directives as below:

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'
## replace the default myems-api url http://127.0.0.1:8000/ with actual url if the myems-api servcie hosted on different server
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • Install MyEMS Web UI:

Setup NodeJS:

sudo dnf install nodejs

Modify the config.js file:

note

Get mapboxToken at https://mapbox.com and then set showOnlineMap to true. If you wnat to turn off online map feature, set showOnlineMap to false

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

Build and Compress

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

Install Upload the files to you web server. Note that the following path should be same as that was configured in nginx.conf.

sudo mv build  /var/www/myems-web

Unlock the port and add the port to firewall:

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --reload

Restart the nginx service:

sudo systemctl restart nginx.service
tip

If you encounter '500 Internal Server Error' nginx error, you may fix it by changing SELinx mode with command 'sudo setenforce 0'

Post-installation

Congratulations! You are able to login the MyEMS Admin UI and Web UI now.

Default Ports

MyEMS Web UI: 80

MyEMS API: 8000

MyEMS Admin UI: 8001

Default Passwords

Admin UI
administrator

!MyEMS1
Web UI
administrator@myems.io

!MyEMS1

Troubleshooting