Przejdź do głównej zawartości

FreeBSD

W tym przewodniku wdrożysz MyEMS na serwerze FreeBSD.

Wymagania wstępne

Ten przewodnik opisuje sposób instalacji MyEMS na FreeBSD 13.2. Wymagania sprzętowe zależą od wybranej bazy danych oraz liczby urządzeń podłączonych do systemu. Aby uruchomić MyEMS i MySQL na jednej maszynie, potrzebujesz co najmniej 4GB RAM.

Aktualizuj system i zainstaluj narzędzia:

pkg install git
pkg install python3
pkg install py39-pip-22.3.1
pkg install nginx
pkg install monit

Sklonuj kod źródłowy:

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

Krok 1 Baza Danych

Zobacz Baza Danych

Krok 2 myems-api

  • Zainstaluj usługę myems-api:
cp -r ~/myems/myems-api /myems-api
cd /myems-api
pip install -r requirements.txt
Porada

Jeśli napotkasz błąd 'Failed building wheel for pillow', musisz zainstalować Pillow

Utwórz plik .env na podstawie example.env i edytuj plik .env jeśli to konieczne:

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

Użyj usługi monitorującej monit i edytuj plik konfiguracyjny monit:

nano /etc/monit.d/myems-api
check process mymes-api with pidfile /var/run/myems-api/pid
start program = "/usr/local/bin/gunicorn -b 0.0.0.0:8000 --pid /var/run/myems-api/pid --timeout 600 --workers=4 app:api &"
stop program = "/bin/kill -s TERM $MAINPID"
if 3 restarts within 5 cycles then unmonitor

Uruchom usługi:

monit restart

Krok 3 myems-admin

  • Zainstaluj serwer NGINX

zobacz http://nginx.org/en/docs/install.html

Włącz usługę nginx:

service nginx enable
  • Skonfiguruj NGINX
nano /etc/nginx/nginx.conf

W sekcji 'http' dodaj następujące dyrektywy:

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

}

Dodaj nowy plik w katalogu /etc/nginx/conf.d/:

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

Wpisz następujące dyrektywy, a jeśli usługa myems-api działa na innym serwerze, zamień domyślny adres URL myems-api http://127.0.0.1:8000/ na rzeczywisty adres:

server {
listen 8001;
server_name myems-admin;
location / {
root /var/www/myems-admin;
index index.html index.htm;
}
## Aby uniknąć problemów z CORS, użyj Nginxa do proxyowania myems-api pod ścieżkę /api
## Dodaj kolejną lokalizację /api w sekcji 'server'
## Jeśli usługa myems-api działa na innym serwerze, zamień domyślny adres URL myems-api http://127.0.0.1:8000/ na rzeczywisty adres
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • Zainstaluj myems-admin: Jeśli serwer nie ma dostępu do internetu, skompresuj folder myems/myems-admin, przekaż go na serwer i rozpakuj do ~/myems/myems-admin
mkdir /var/www
cp -r ~/myems/myems-admin  /var/www/myems-admin
chmod 0755 /var/www/myems-admin

Sprawdź plik konfiguracyjny i zmień go jeśli to konieczne:

nano /var/www/myems-admin/app/api.js
Ostrzeżenie

Folder 'upload' przeznaczony jest dla plików przesłanych przez użytkowników. NIE usuwaj/przenoś/nadpisywaj folderu 'upload' podczas aktualizacji myems-admin.

 /var/www/myems-admin/upload

Restartuj usługę nginx:

service nginx restart

Krok 4 myems-modbus-tcp

W tym kroku zainstalujesz usługę myems-modbus-tcp.

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

Utwórz plik .env na podstawie example.env i edytuj plik .env jeśli to konieczne:

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

Użyj usługi monitorującej monit i edytuj plik konfiguracyjny monit:

nano /etc/monit.d/myems-modbus-tcp
check file myems-modbus-tcp path /myems-modbus-tcp/main.py
start program = "/usr/local/bin/python3 /myems-modbus-tcp/main.py"
stop program = "/bin/kill -s TERM $MAINPID"
if 3 restarts within 5 cycles then unmonitor

Uruchom usługę:

monit restart

Krok 5 myems-cleaning

W tym kroku zainstalujesz usługę myems-cleaning.

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

Utwórz plik .env na podstawie example.env i edytuj plik .env jeśli to konieczne:

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

Użyj usługi monitorującej monit i edytuj plik konfiguracyjny monit:

nano /etc/monit.d/myems-cleaning
check file myems-cleaning path /myems-cleaning/main.py
start program = "/usr/local/bin/python3 /myems-cleaning/main.py"
stop program = "/bin/kill -s TERM $MAINPID"
if 3 restarts within 5 cycles then unmonitor

Uruchom usługę:

monit restart

Krok 6 myems-normalization

W tym kroku zainstalujesz usługę myems-normalization.

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

Utwórz plik .env na podstawie example.env i edytuj plik .env jeśli to konieczne:

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

Użyj usługi monitorującej monit i edytuj plik konfiguracyjny monit:

nano /etc/monit.d/myems-normalization
check file myems-normalization path /myems-normalization/main.py
start program = "/usr/local/bin/python3 /myems-normalization/main.py"
stop program = "/bin/kill -s TERM $MAINPID"
if 3 restarts within 5 cycles then unmonitor

Uruchom usługę:

monit restart

Krok 7 myems-aggregation

W tym kroku zainstalujesz usługę myems-aggregation.

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

Utwórz plik .env na podstawie example.env i edytuj plik .env jeśli to konieczne:

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

Użyj usługi monitorującej monit i edytuj plik konfiguracyjny monit:

nano /etc/monit.d/myems-aggregation
check file myems-aggregation path /myems-aggregation/main.py
start program = "/usr/local/bin/python3 /myems-aggregation/main.py"
stop program = "/bin/kill -s TERM $MAINPID"
if 3 restarts within 5 cycles then unmonitor

Uruchom usługę:

monit restart

Krok 8 myems-web

W tym kroku zainstalujesz usługę interfejsu użytkownika myems-web.

  • Zainstaluj serwer NGINX

zobacz http://nginx.org/en/docs/install.html

  • Skonfiguruj NGINX

Usuń domyślne pliki:

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

Dodaj nowy plik w katalogu /etc/nginx/conf.d/:

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

Dodaj nową sekcję 'server' z następującymi dyrektywami:

server {
listen 80;
server_name myems-web;
location / {
root /var/www/myems-web;
index index.html index.htm;
# dodaj dyrektywę try_files, aby uniknąć błędu 404 podczas odświeżania stron
try_files $uri /index.html;
}
## Aby uniknąć problemów z CORS, użyj Nginxa do proxyowania myems-api pod ścieżkę /api
## Dodaj kolejną lokalizację /api w sekcji 'server'
## Jeśli usługa myems-api działa na innym serwerze, zamień domyślny adres URL myems-api http://127.0.0.1:8000/ na rzeczywisty adres
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • Zainstaluj interfejs użytkownika MyEMS Web UI:

Skonfiguruj NodeJS:

pkg install node-18.16.0

Modyfikuj plik config.js:

Uwaga

Pobierz mapboxToken na stronie https://mapbox.com, a następnie ustaw showOnlineMap na true. Jeśli chcesz wyłączyć funkcję mapy online, ustaw showOnlineMap na false.

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

Zbuduj projekt:

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

Zainstaluj: Uwaga: poniższa ścieżka powinna być taka sama jak ta skonfigurowana w pliku nginx.conf.

rm -r /var/www/myems-web
mv build  /var/www/myems-web

Restartuj usługę nginx:

service nginx restart

Po instalacji

Gratulacje! Teraz możesz zalogować się do interfejsu administracyjnego MyEMS Admin UI oraz Web UI.

Domyślne porty

MyEMS Web UI: 80

MyEMS API: 8000

MyEMS Admin UI: 8001

Zakładając, że adres serwera to 192.168.1.8 (zamień na rzeczywisty adres serwera): Dostęp do MyEMS Web UI pod adresem http://192.168.1.8 (port 80 można pominąć) Dostęp do MyEMS Admin UI pod adresem http://192.168.1.8:8001

Domyślne hasła

MyEMS Admin UI

Nazwa użytkownika:

administrator

Hasło:

!MyEMS1

MyEMS Web UI

Nazwa użytkownika:

administrator@myems.io

Hasło:

!MyEMS1

Rozwiązywanie problemów