نظام كيلين
في هذا الدليل، ستقوم بنشر MyEMS على خادم Kylin V11.
المتطلبات الأساسية
يصف هذا الدليل كيفية تثبيت MyEMS على Kylin V11. تعتمد المتطلبات المادية على قاعدة البيانات المختارة وعدد الأجهزة المتصلة بالنظام. لتشغيل MyEMS وMySQL على جهاز واحد، تحتاج إلى 8 جيجابايت من الذاكرة على الأقل.
قم بتحديث النظام وتثبيت الأدوات:
sudo yum update
sudo yum install git
systemctl stop firewalld
استنسخ الكود المصدري:
cd ~
git clone https://gitee.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
أضف المنفذ إلى جدار الحماية:
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:
yum install -y nginx
sudo systemctl start nginx.service
- قم بإعداد NGINX
sudo vi /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 vi /etc/nginx/conf.d/myems-admin.conf
اكتب الإرشادات التالية. إذا كانت خدمة myems-api تعمل عل ى خادم آخر، فاستبدل العنوان الافتراضي http://127.0.0.1:8000/ بالعنوان الفعلي.
server {
listen 8001;
server_name myems-admin;
location / {
root /var/www/myems-admin;
index index.html index.htm;
}
## لتجنب مشكلة CORS، استخدم Nginx لتحويل myems-api إلى المسار /api
## أضف موقعًا آخر /api داخل 'server'
## استبدل الرابط الافتراضي لـ myems-api http://127.0.0.1:8000/ بالرابط الفعلي إذا كانت الخدمة مستضافة على خادم مختلف
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 ممنوع' في nginx، يمكنك إصلاحه عن طريق تغيير وضع SELinux بالأمر 'sudo setforce 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
sudo 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#Debian
- قم بإعداد 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
اكتب الإرشادات التالية. إذا كانت خدمة myems-api مستضافة على خادم مختلف، فاستبدل العنوان الافتراضي http://127.0.0.1:8000/ بالعنوان الفعلي.
server {
listen 80;
server_name myems-web;
location / {
root /var/www/myems-web;
index index.html index.htm;
# أضف إرشاد try_files لتجنب خطأ 404 عند تحديث الصفحات
try_files $uri /index.html;
}
## لتجنب مشكلة CORS، استخدم Nginx لتحويل myems-api إلى المسار /api
## أضف موقعًا آخر /api داخل 'server'
## استبدل الرابط الافتراضي لـ myems-api http://127.0.0.1:8000/ بالرابط الفعلي إذا كانت الخدمة مستضافة على خادم مختلف
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
- قم بتثبيت واجهة الويب MyEMS:
عدل ملف الإعدادات:
ملاحظة
احصل على رمز mapboxToken من https://mapbox.com ثم اضبط showOnlineMap على true. إذا أردت إيقاف تشغيل خريطة الإنترنت، اضبط showOnlineMap على false.
cd ~/myems/myems-web
sudo nano src/config.js
بناء المشروع:
sudo npm i --unsafe-perm=true --allow-root --legacy-peer-deps
sudo npm run build
التثبيت: لاحظ أن المسار التالي يجب أن يتطابق مع المسار المعدل في nginx.conf.
sudo rm -r /var/www/myems-web
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
نصيحة
إذا واجهت خطأ '500 خطأ داخلي في الخادم' في nginx، يمكنك إصلاحه عن طريق تغيير وضع SELinux بالأمر 'sudo setforce 0'.
بعد التثبيت
تهانينا! يمكنك الآن تسجيل الدخول إلى واجهة الإدارة وواجهة الويب لـ MyEMS.
المنافذ الافتراضية
واجهة الويب MyEMS: 80 واجهة برمجة التطبيقات MyEMS: 8000 واجهة الإدارة MyEMS: 8001
لنفترض أن عنوان الخادم هو 192.168.1.8 (استبدله بالعنوان الفعلي لخادمك) عنوان واجهة الويب MyEMS: http://192.168.1.8 (يمكن حذف المنفذ 80) عنوان واجهة الإدارة MyEMS: http://192.168.1.8:8001
كلمات المرور الافتراضية
واجهة الإدارة MyEMS اسم المستخدم:
administrator
كلمة المرور:
!MyEMS1
واجهة الويب MyEMS اسم المستخدم:
administrator
كلمة المرور:
!MyEMS1
استكشاف الأخطاء وإصلاحها
تثبيت MySQL 8.0
1. الإعداد
تحقق من بيئة النظام
# تحقق من إصدار النظام
cat /etc/redhat-release
# تحقق مما إذا كان MySQL مثبتًا بالفعل
rpm -qa | grep mysql
rpm -qa | grep mariadb
# قم بإزالة mariadb إذا كانت موجودة
rpm -e --nodeps mariadb-libs-*
2. تنزيل حزمة RPM الرسمية لـ MySQL
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.45-1.el8.x86_64.rpm-bundle.tar
3. تثبيت MySQL 8.0
tar -xvf *.tar
yum localinstall *.rpm
# إذا واجهت مشكلات في مفتاح GPG، استخدم هذا مؤقتًا
yum install -y mysql-community-server --nogpgcheck
4. تشغيل خدمة MySQL
# تشغيل MySQL
systemctl start mysqld
# تفعيل التشغيل التلقائي عند بدء التشغيل
systemctl enable mysqld
# تحقق من حالة الخدمة
systemctl status mysqld
5. الحصول على كلمة المرور الأولية
# اعرض كلمة المرور المؤقتة التي تم إنشاؤها بواسطة MySQL
grep 'temporary password' /var/log/mysqld.log
6. الإعداد الآمن
# تشغيل سكريبت التثبيت الآمن
mysql_secure_installation
اتبع التعليمات:
- أدخل كلمة المرور المؤقتة
- اضبط كلمة مرور جديدة (يجب أن تحتوي على أحرف كبيرة وصغيرة وأرقام ورموز خاصة)
- تغيير كلمة مرور root؟ Y
- حذف المستخدمين المجهولين؟ Y
- منع تسجيل الدخول عن بعد لـ root؟ اختر حسب الحاجة
- حذف قاعدة البيانات التجريبية؟ Y
- إعادة تحميل جداول الصلاحيات؟ Y
7. تسجيل الدخول والتحقق من MySQL
# تسجيل الدخول إلى MySQL
mysql -u root -p
# تحقق من الإصدار
SELECT VERSION();
# عرض قواعد البيانات
SHOW DATABASES;
8. إعداد مجموعة الأحرف (اختياري)
عدل ملف الإعدادات:
vi /etc/my.cnf
أضف ما يلي:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
# قلل من سياسة كلمة المرور إذا لزم الأمر
validate_password.policy = LOW
validate_password.length = 6
validate_password.mixed_case_count = 0
validate_password.number_count = 0
validate_password.special_char_count = 0
أعد تشغيل الخدمة:
systemctl restart mysqld
9. إعدادات جدار الحماية
# فتح المنفذ 3306
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# أو إيقاف جدار الحماية (غير مستحسن)
# systemctl stop firewalld
10. إعداد الوصول عن بعد (اختياري)
-- تسجيل الدخول إلى MySQL
mysql -u root -p
# إنشاء مستخدم للوصول عن بعد
CREATE USER 'root'@'%' IDENTIFIED BY '!MyEMS1';
-- تحديث كلمة المرور
ALTER USER 'root'@'%' IDENTIFIED BY '!MyEMS1';
# منح كافة الصلاحيات
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- تطبيق التغييرات
FLUSH PRIVILEGES;
المشكلات الشائعة
1. خطأ نقص الذاكرة
إذا كان الخادم يحتوي على ذاكرة قليلة، قم بتقييد استخدام الذاكرة من قبل MySQL:
vi /etc/my.cnf
# أضف هذه الإعدادات
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 16M
max_connections = 100
2. استكشاف أخطاء فشل التشغيل
# اعرض سجل الأخطاء
tail -f /var/log/mysqld.log
# تحقق من استخدام المنافذ
netstat -tlnp | grep 3306
3. تعديل سياسة كلمات المرور
-- اعرض السياسة الحالية لكلمات المرور
SHOW VARIABLES LIKE 'validate_password%';
-- قلل من السياسة (إذا كنت بحاجة إلى كلمة مرور بسيطة)
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 6;
التحقق من التثبيت
# تحقق من عملية MySQL
ps aux | grep mysql
# تحقق من المنفذ
netstat -tlnp | grep 3306
# تحق ق من إصدار MySQL
mysql --version