انتقل إلى المحتوى الرئيسي

أنوليس أو إس

في هذا الدليل، ستقوم بنشر MyEMS على نظام Anolis OS.

المتطلبات المسبقة

يصف هذا الدليل كيفية تثبيت MyEMS على Anolis OS 8. تعتمد متطلبات الأجهزة على قاعدة البيانات المختارة وعدد الأجهزة المتصلة بالنظام. لتشغيل MyEMS وMySQL على جهاز واحد ستحتاج إلى 4 جيجابايت من الذاكرة العشوائية على الأقل.

تحديث النظام وتثبيت الأدوات

sudo dnf update
sudo yum install python39
sudo ln -sb /bin/python3.9 /bin/python3
sudo ln -sb /bin/pip3.9 /bin/pip3
sudo ln -sb /bin/python3.9 /bin/python
sudo ln -sb /bin/pip3.9 /bin/pip
sudo dnf install git

استنساخ الشيفرة المصدرية:

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

الخطوة 1: قاعدة البيانات

راجع قاعدة البيانات

الخطوة 2: myems-api

  • تثبيت خدمة myems-api:
sudo cp -r ~/myems/myems-api /myems-api
cd /myems-api
sudo pip install -r requirements.txt

أنشئ ملف .env بناءً على example.env وقم بتعديله إذا لزم الأمر:

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

تحقق أو غيّر منفذ الاستماع (الافتراضي 8000) في myems-api.service وmyems-api.socket:

sudo nano /myems-api/myems-api.service
ExecStart=/usr/local/bin/gunicorn -b 0.0.0.0:8000 --pid /run/myems-api/pid --timeout 600 --workers=4 app:api
sudo nano /myems-api/myems-api.socket
ListenStream=0.0.0.0:8000

أضف المنفذ إلى جدار الحماية:

sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent
sudo firewall-cmd --reload

إعداد ملفات تكوين 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/

بعد ذلك، فعّل الخدمات لتعمل تلقائياً عند الإقلاع:

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

ابدأ الخدمات:

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

الخطوة 3: myems-admin

  • تثبيت خادم NGINX

راجع http://nginx.org/en/linux_packages.html#RHEL

تفعيل خدمة nginx:

sudo systemctl start nginx.service
  • إعداد NGINX
sudo nano /etc/nginx/nginx.conf

في قسم 'http'، أضف بعض التوجيهات:

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

}

أضف ملفًا جديدًا تحت /etc/nginx/conf.d/

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

اكتب التوجيهات كما يلي، واستبدل عنوان myems-api الافتراضي http://127.0.0.1:8000/ بالعنوان الفعلي إذا كانت خدمة myems-api مستضافة على خادم مختلف

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;
}
}
  • تثبيت myems-admin: إذا كان الخادم لا يمكنه الاتصال بالإنترنت، يرجى ضغط مجلد myems/myems-admin ورفعه إلى الخادم ثم فك ضغطه إلى ~/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
تحقق من ملف الإعدادات وقم بتعديله إذا لزم الأمر:
sudo nano /var/www/myems-admin/app/api.js
احذر

مجلد 'upload' مخصص للملفات التي يرفعها المستخدم. لا تقم بحذف/نقل/استبدال مجلد 'upload' عند ترقية myems-admin.

 /var/www/myems-admin/upload

افتح المنفذ وأضفه إلى جدار الحماية:

sudo semanage port -a -t http_port_t  -p tcp 8001
sudo firewall-cmd --zone=public --add-port=8001/tcp --permanent
sudo firewall-cmd --reload

أعد تشغيل خدمة nginx:

sudo systemctl restart nginx.service
نصيحة

إذا واجهت خطأ '403 Forbidden' من nginx، يمكنك إصلاحه بتغيير وضع SELinux باستخدام الأمر 'sudo setenforce 0'

الخطوة 4: myems-modbus-tcp

في هذه الخطوة، ستقوم بتثبيت خدمة myems-modbus-tcp.

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

انسخ ملف example.env إلى .env وعدل ملف .env:

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

إعداد خدمة systemd:

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

تفعيل الخدمة:

sudo systemctl enable myems-modbus-tcp.service

بدء الخدمة:

sudo systemctl start myems-modbus-tcp.service

مراقبة الخدمة:

sudo systemctl status myems-modbus-tcp.service

عرض السجل:

cat /myems-modbus-tcp.log

الخطوة 5: myems-cleaning

في هذه الخطوة، ستقوم بتثبيت خدمة myems-cleaning.

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

انسخ ملف example.env إلى .env وعدل ملف .env:

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

إعداد خدمة systemd:

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

تفعيل الخدمة:

sudo systemctl enable myems-cleaning.service

بدء الخدمة:

sudo systemctl start myems-cleaning.service

مراقبة الخدمة:

sudo systemctl status myems-cleaning.service

عرض السجل:

cat /myems-cleaning.log

الخطوة 6: myems-normalization

في هذه الخطوة، ستقوم بتثبيت خدمة myems-normalization.

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

انسخ ملف example.env إلى .env وعدل ملف .env:

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

إعداد خدمة systemd:

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

تفعيل الخدمة:

sudo systemctl enable myems-normalization.service

بدء الخدمة:

sudo systemctl start myems-normalization.service

مراقبة الخدمة:

sudo systemctl status myems-normalization.service

عرض السجل:

cat /myems-normalization.log

الخطوة 7: myems-aggregation

في هذه الخطوة، ستقوم بتثبيت خدمة myems-aggregation.

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

انسخ ملف example.env إلى .env وعدل ملف .env:

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

إعداد خدمة systemd:

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

تفعيل الخدمة:

sudo systemctl enable myems-aggregation.service

بدء الخدمة:

sudo systemctl start myems-aggregation.service

مراقبة الخدمة:

sudo systemctl status myems-aggregation.service

عرض السجل:

cat /myems-aggregation.log

الخطوة 8: myems-web

في هذه الخطوة، ستقوم بتثبيت خدمة واجهة المستخدم myems-web.

  • تثبيت خادم NGINX

راجع http://nginx.org/en/linux_packages.html#RHEL

  • إعداد NGINX

إزالة الملفات الافتراضية

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

أضف ملفًا جديدًا تحت /etc/nginx/conf.d/

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

أضف قسم 'server' جديد مع التوجيهات التالية:

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;
}
}
  • تثبيت واجهة MyEMS Web UI:

إعداد NodeJS:

sudo dnf module list nodejs
sudo dnf module reset nodejs:16/common
sudo dnf module install nodejs:16/common
  • تعديل ملف config.js:
ملاحظة

احصل على mapboxToken من https://mapbox.com ثم عيّن showOnlineMap إلى true. إذا كنت تريد إيقاف ميزة الخريطة عبر الإنترنت، عيّن showOnlineMap إلى false

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

إذا أعاد الأمر 'node -v' القيمة 'v16.xx.xx' يجب إزالة معلمات '--openssl-legacy-provider' من أوامر start و build في package.json

sudo nano package.json
  ...
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
...

البناء والضغط

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

التثبيت قم برفع الملفات إلى خادم الويب الخاص بك. لاحظ أن المسار التالي يجب أن يكون مطابقًا لما تم تكوينه في nginx.conf.

sudo mv build  /var/www/myems-web

افتح المنفذ وأضفه إلى جدار الحماية:

sudo semanage port -a -t http_port_t  -p tcp 80
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload

أعد تشغيل خدمة nginx:

sudo systemctl restart nginx.service
نصيحة

إذا واجهت خطأ '500 Internal Server Error' من nginx، يمكنك إصلاحه بتغيير وضع SELinux باستخدام الأمر 'sudo setenforce 0'

ما بعد التثبيت

تهانينا! يمكنك الآن تسجيل الدخول إلى واجهة إدارة MyEMS وواجهة الويب.

المنافذ الافتراضية

واجهة MyEMS Web UI: 80

واجهة MyEMS API: 8000

واجهة MyEMS Admin UI: 8001

على افتراض أن عنوان الخادم هو 192.168.1.8 (استبدله بعنوان الخادم الفعلي) ادخل إلى MyEMS Web UI عبر http://192.168.1.8 (يمكن إهمال 80) ادخل إلى MyEMS Admin UI عبر http://192.168.1.8:8001

كلمات المرور الافتراضية

واجهة MyEMS Admin UI

اسم المستخدم:

administrator

كلمة المرور:

!MyEMS1

واجهة MyEMS Web UI

اسم المستخدم:

administrator@myems.io

كلمة المرور:

!MyEMS1

استكشاف الأخطاء وإصلاحها