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

Raspberry Pi

در این راهنما، MyEMS را بر روی رزبری پای مستقر خواهید کرد.

پیش‌نیازها

  • رزبری پای ۵ یا رزبری پای ۴ مدل B
  • سیستم عامل رزبری پای (۶۴ بیت) نسخه‌ای از دبیان بوک‌ورم با دسکتاپ رزبری پای منتشر شده در ۲۰۲۴-۰۷-۰۴

کلون کردن کد منبع

sudo apt install git
sudo apt install pip
sudo apt install ufw
cd ~ && git clone https://github.com/myems/myems

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

  • راه‌اندازی سرور MySQL
sudo apt update
sudo apt upgrade
sudo apt install mariadb-server

به طور پیش‌فرض، MySQL بدون هیچ رمز عبوری نصب می‌شود، به این معنی که می‌توانید بدون هیچ گونه احراز هویتی به سرور MySQL دسترسی پیدا کنید. برای شروع فرآیند ایمن‌سازی MySQL، دستور زیر را اجرا کنید.

sudo mysql_secure_installation
Enter current password for root (enter for none): [کلید Enter یا Return را بزنید]
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] Y
New password: !MyEMS1
Re-enter new password: !MyEMS1
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
  • نصب اسکیما و اسکریپت‌های پایگاه داده برای MyEMS.

به پایگاه داده مراجعه کنید

مرحله ۲ myems-api

  • نصب سرویس myems-api:
sudo cp -r ~/myems/myems-api /myems-api
cd /myems-api

برای جلوگیری از خطای 'error: externally-managed-environment'، یک پوشه پیکربندی محیط مجازی ایجاد کنید:

sudo python -m venv venv

شروع به استفاده از محیط مجازی کنید

source venv/bin/activate

نیازمندی‌ها را نصب کنید

sudo venv/bin/pip install -r requirements.txt

از محیط مجازی خارج شوید

deactivate

فایل .env را بر اساس example.env ایجاد کرده و در صورت نیاز فایل .env را ویرایش کنید:

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

مسیر gunicorn را در myems-api.service تغییر دهید:

sudo nano /myems-api/myems-api.service
[Unit]
Description=myems-api daemon
Requires=myems-api.socket
After=network.target

[Service]
PIDFile=/run/myems-api/pid
User=root
Group=root
WorkingDirectory=/myems-api
ExecStart=/myems-api/venv/bin/gunicorn -b 0.0.0.0:8000 --pid /run/myems-api/pid --timeout 600 --workers=4 app:api
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

افزودن پورت به فایروال:

sudo ufw allow 8000

تنظیم فایل‌های پیکربندی 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#Debian مراجعه کنید

sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx
sudo apt update
sudo apt install nginx
  • پیکربندی 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;

...
}

در بخش 'http'، یک بخش 'server' جدید با دستورات زیر اضافه کنید:

  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' اضافه کنید و آدرس نسخه نمایشی 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 :
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

شروع Nginx:

sudo systemctl start nginx

افزودن پورت به فایروال:

sudo ufw allow 8001

مرحله ۴ myems-modbus-tcp

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

sudo cp -r ~/myems/myems-modbus-tcp /myems-modbus-tcp
cd /myems-modbus-tcp

برای جلوگیری از خطای 'error: externally-managed-environment'، یک پوشه پیکربندی محیط مجازی ایجاد کنید:

sudo python -m venv venv

شروع به استفاده از محیط مجازی کنید

source venv/bin/activate

نیازمندی‌ها را نصب کنید

sudo venv/bin/pip install -r requirements.txt

از محیط مجازی خارج شوید

deactivate

فایل exmaple.env را به .env کپی کرده و فایل .env را ویرایش کنید:

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

مسیر پایتون را در myems-modbus-tcp.service تغییر دهید

sudo nano myems-modbus-tcp.service
[Unit]
Description=myems-modbus-tcp daemon
After=network.target

[Service]
User=root
Group=root
ExecStart=/myems-modbus-tcp/venv/bin/python3 /myems-modbus-tcp/main.py
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

تنظیم سرویس 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

برای جلوگیری از خطای 'error: externally-managed-environment'، یک پوشه پیکربندی محیط مجازی ایجاد کنید:

sudo python -m venv venv

شروع به استفاده از محیط مجازی کنید

source venv/bin/activate

نیازمندی‌ها را نصب کنید

sudo venv/bin/pip install -r requirements.txt

از محیط مجازی خارج شوید

deactivate

فایل exmaple.env را به .env کپی کرده و فایل .env را ویرایش کنید:

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

مسیر پایتون را در myems-cleaning.service تغییر دهید

sudo nano myems-cleaning.service
[Unit]
Description=myems-cleaning daemon
After=network.target

[Service]
User=root
Group=root
ExecStart=/myems-cleaning/venv/bin/python3 /myems-cleaning/main.py
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

تنظیم سرویس 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

برای جلوگیری از خطای 'error: externally-managed-environment'، یک پوشه پیکربندی محیط مجازی ایجاد کنید:

sudo python -m venv venv

شروع به استفاده از محیط مجازی کنید

source venv/bin/activate

نیازمندی‌ها را نصب کنید

sudo venv/bin/pip install -r requirements.txt

از محیط مجازی خارج شوید

deactivate

فایل exmaple.env را به .env کپی کرده و فایل .env را ویرایش کنید:

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

مسیر پایتون را در myems-normalization.service تغییر دهید

sudo nano myems-normalization.service
[Unit]
Description=myems-normalization daemon
After=network.target

[Service]
User=root
Group=root
ExecStart=/myems-normalization/venv/bin/python3 /myems-normalization/main.py
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

تنظیم سرویس 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

برای جلوگیری از خطای 'error: externally-managed-environment'، یک پوشه پیکربندی محیط مجازی ایجاد کنید:

sudo python -m venv venv

شروع به استفاده از محیط مجازی کنید

source venv/bin/activate

نیازمندی‌ها را نصب کنید

sudo venv/bin/pip install -r requirements.txt

از محیط مجازی خارج شوید

deactivate

فایل exmaple.env را به .env کپی کرده و فایل .env را ویرایش کنید:

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

مسیر پایتون را در myems-aggregation.service تغییر دهید

sudo nano myems-aggregation.service
[Unit]
Description=myems-aggregation daemon
After=network.target

[Service]
User=root
Group=root
ExecStart=/myems-aggregation/venv/bin/python3 /myems-aggregation/main.py
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target

تنظیم سرویس 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 را نصب خواهید کرد.

  • نصب سرور NGINX (اگر قبلاً در myems-admin نصب شده است، می‌توانید آن را نادیده بگیرید) به http://nginx.org/en/docs/install.html مراجعه کنید

  • پیکربندی 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;
# اضافه کردن دستور try_files برای جلوگیری از خطای 404 هنگام بازخوانی صفحات
try_files $uri /index.html;
}
## برای جلوگیری از مشکل CORS، از Nginx برای پروکسی myems-api به مسیر /api استفاده کنید
## مکان دیگری با نام /api در 'server' اضافه کنید
## نکته: آدرس پیش‌فرض http://127.0.0.1:8000/ را با IP یا URL واقعی جایگزین کنید.
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • نصب رابط کاربری MyEMS Web:

نصب NodeJS:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt-get install -y nodejs

فایل config.js را ویرایش کنید:

نکته

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

نصب

sudo mv build  /var/www/myems-web

NGINX را مجدداً راه‌اندازی کنید:

sudo systemctl restart nginx

افزودن پورت به فایروال:

sudo ufw allow 80

پس از نصب

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

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

رابط کاربری وب MyEMS: ۸۰

API MyEMS: ۸۰۰۰

رابط کاربری مدیریت MyEMS: ۸۰۰۱

با فرض اینکه آدرس سرور 192.168.1.8 است (با آدرس واقعی سرور جایگزین کنید) برای دسترسی به رابط کاربری وب MyEMS به آدرس http://192.168.1.8 (پورت ۸۰ قابل حذف است) بروید. برای دسترسی به رابط کاربری مدیریت MyEMS به آدرس http://192.168.1.8:8001 بروید.

رمزهای عبور پیش‌فرض

رابط کاربری مدیریت MyEMS

نام کاربری:

administrator

رمز عبور:

!MyEMS1

رابط کاربری وب MyEMS

نام کاربری:

administrator@myems.io

رمز عبور:

!MyEMS1

عیب‌یابی