برو به محتوای اصلی

Kylin OS

در این راهنما، MyEMS را روی سرور Kylin V11 پیاده‌سازی خواهید کرد.

پیش‌نیازها

این راهنما نحوه نصب MyEMS روی Kylin V11 را شرح می‌دهد. نیازمندی‌های سخت‌افزاری به پایگاه داده انتخابی و تعداد دستگاه‌های متصل به سیستم بستگی دارد. برای اجرای MyEMS و MySQL روی یک ماشین، حداقل به ۸ گیگابایت رم نیاز دارید.

سیستم را به‌روزرسانی کرده و ابزارها را نصب کنید:

sudo yum update
sudo yum install git
systemctl stop firewalld

کد منبع را کلون کنید:

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

مرحله ۱ پایگاه داده

پایگاه داده را مشاهده کنید.

مرحله ۲ 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

مرحله ۳ 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 روی سرور دیگری اجرا می‌شود، آدرس پیش‌فرض 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 روی سرور متفاوتی میزبانی می‌شود، آدرس پیش‌فرض myems-api را با آدرس واقعی جایگزین کنید
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' برای فایل‌های بارگذاری شده توسط کاربر است. هنگام ارتقاء myems-admin، پوشه 'upload' را حذف/جابجا/بازنویسی نکنید.

 /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 setforce 0' آن را برطرف کنید.

مرحله ۴ 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

مرحله ۵ 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

مرحله ۶ 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

مرحله ۷ 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

مرحله ۸ myems-web

در این مرحله، سرویس myems-web را نصب خواهید کرد.

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 روی سرور متفاوتی میزبانی می‌شود، آدرس پیش‌فرض 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 روی سرور متفاوتی میزبانی می‌شود، آدرس پیش‌فرض myems-api را با آدرس واقعی جایگزین کنید
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

ساخت (Build):

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 Internal Server Error' nginx مواجه شدید، می‌توانید با تغییر حالت SELinux با دستور 'sudo setforce 0' آن را برطرف کنید.

پس از نصب

تبریک! اکنون می‌توانید به رابط کاربری مدیریت MyEMS و رابط کاربری وب وارد شوید.

پورت‌های پیش‌فرض

رابط کاربری وب MyEMS: 80 API 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

۱. آماده‌سازی

بررسی محیط سیستم

# بررسی نسخه سیستم
cat /etc/redhat-release

# بررسی نصب بودن MySQL
rpm -qa | grep mysql
rpm -qa | grep mariadb

# حذف mariadb در صورت وجود
rpm -e --nodeps mariadb-libs-*

۲. دانلود باندل rpm رسمی MySQL

https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.45-1.el8.x86_64.rpm-bundle.tar

۳. نصب MySQL 8.0

tar -xvf *.tar
yum localinstall *.rpm

# اگر با مشکل کلید GPG مواجه شدید، به طور موقت از این دستور استفاده کنید
yum install -y mysql-community-server --nogpgcheck

۴. شروع سرویس MySQL

# شروع MySQL
systemctl start mysqld

# فعال‌سازی شروع خودکار هنگام بوت
systemctl enable mysqld

# بررسی وضعیت سرویس
systemctl status mysqld

۵. دریافت رمز عبور اولیه

# بررسی رمز عبور موقت تولید شده توسط MySQL
grep 'temporary password' /var/log/mysqld.log

۶. پیکربندی امنیتی

# اجرای اسکریپت نصب امن
mysql_secure_installation

پرسش‌ها را دنبال کنید:

۱. رمز عبور موقت را وارد کنید ۲. یک رمز عبور جدید تنظیم کنید (باید شامل حروف بزرگ، حروف کوچک، اعداد و کاراکترهای خاص باشد) ۳. تغییر رمز عبور root؟ Y ۴. حذف کاربران ناشناس؟ Y ۵. عدم اجازه ورود root از راه دور؟ بنا به نیاز انتخاب کنید ۶. حذف پایگاه داده تست؟ Y ۷. بارگذاری مجدد جداول امتیازات؟ Y

۷. ورود و تأیید MySQL

# ورود به MySQL
mysql -u root -p

# بررسی نسخه
SELECT VERSION();

# لیست پایگاه داده‌ها
SHOW DATABASES;

۸. پیکربندی مجموعه کاراکترها (اختیاری)

فایل پیکربندی را ویرایش کنید:

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

۹. تنظیمات فایروال

# باز کردن پورت ۳۳۰۶
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

# یا متوقف کردن فایروال (توصیه نمی‌شود)
# systemctl stop firewalld

۱۰. پیکربندی دسترسی از راه دور (اختیاری)

-- ورود به 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;

مشکلات رایج

۱. خطای حافظه ناکافی

اگر سرور حافظه کمی دارد، مصرف حافظه MySQL را محدود کنید:

vi /etc/my.cnf
# این تنظیمات را اضافه کنید
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 16M
max_connections = 100

۲. عیب‌یابی عدم راه‌اندازی

# مشاهده لاگ خطا
tail -f /var/log/mysqld.log

# بررسی استفاده از پورت
netstat -tlnp | grep 3306

۳. تغییر سیاست رمز عبور

-- مشاهده سیاست فعلی رمز عبور
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