Đi đến nội dung chính

Raspberry Pi

Trong hướng dẫn này, bạn sẽ triển khai MyEMS trên Raspberry Pi.

Điều kiện tiên quyết

  • Raspberry Pi 5 hoặc Raspberry Pi 4 Model B
  • Raspberry Pi OS (64-bit) (một bản chuyển của Debian Bookworm với Raspberry Pi Desktop) Phát hành: 2024-07-04

Sao chép mã nguồn

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

Bước 1: Cơ sở dữ liệu

  • Cài đặt máy chủ MySQL
sudo apt update
sudo apt upgrade
sudo apt install mariadb-server

Theo mặc định, MySQL được cài đặt mà không có mật khẩu, nghĩa là bạn có thể truy cập máy chủ MySQL mà không cần xác thực. Chạy lệnh sau để bắt đầu quá trình bảo mật MySQL.

sudo mysql_secure_installation
Enter current password for root (enter for none): [Enter key or return key]
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
  • Cài đặt cấu trúc cơ sở dữ liệu và script cho MyEMS.

Xem Cơ sở dữ liệu

Bước 2: myems-api

  • Cài đặt dịch vụ myems-api:
sudo cp -r ~/myems/myems-api /myems-api
cd /myems-api

Để tránh lỗi 'error: externally-managed-environment', hãy tạo thư mục môi trường ảo:

sudo python -m venv venv

Kích hoạt môi trường ảo

source venv/bin/activate

Cài đặt các gói yêu cầu

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

Thoát môi trường ảo

deactivate

Tạo tệp .env dựa trên example.env và chỉnh sửa tệp .env nếu cần:

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

Thay đổi đường dẫn gunicorn trong 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

Thêm cổng vào tường lửa:

sudo ufw allow 8000

Cấu hình các tệp 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/

Tiếp theo, kích hoạt các dịch vụ để chúng tự động khởi động khi boot:

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

Khởi động các dịch vụ:

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

Bước 3: myems-admin

  • Cài đặt máy chủ NGINX

tham khảo 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
  • Cấu hình NGINX
sudo nano /etc/nginx/nginx.conf

Trong phần 'http', thêm một số chỉ thị:

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;

...
}

Trong phần 'http', thêm một phần 'server' mới với các chỉ thị như bên dưới:

  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' and replace demo address http://127.0.0.1:8000/ with actual url
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • Cài đặt myems-admin:
sudo mkdir /var/www
sudo cp -r ~/myems/myems-admin  /var/www/myems-admin
sudo chmod 0755 -R /var/www/myems-admin

Kiểm tra tệp cấu hình và thay đổi nếu cần thiết:

sudo nano /var/www/myems-admin/app/api.js
Cảnh báo

Thư mục 'upload' là nơi lưu trữ các tệp người dùng tải lên. KHÔNG xóa/di chuyển/ghi đè thư mục 'upload' khi nâng cấp myems-admin.

 /var/www/myems-admin/upload

Khởi động Nginx:

sudo systemctl start nginx

Thêm cổng vào tường lửa:

sudo ufw allow 8001

Bước 4: myems-modbus-tcp

Trong bước này, bạn sẽ cài đặt dịch vụ myems-modbus-tcp.

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

Để tránh lỗi 'error: externally-managed-environment', hãy tạo thư mục môi trường ảo:

sudo python -m venv venv

Kích hoạt môi trường ảo

source venv/bin/activate

Cài đặt các gói yêu cầu

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

Thoát môi trường ảo

deactivate

Sao chép tệp example.env thành .env và chỉnh sửa tệp .env:

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

Thay đổi đường dẫn python trong 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

Cấu hình dịch vụ systemd:

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

Kích hoạt dịch vụ:

sudo systemctl enable myems-modbus-tcp.service

Khởi động dịch vụ:

sudo systemctl start myems-modbus-tcp.service

Giám sát dịch vụ:

sudo systemctl status myems-modbus-tcp.service

Xem nhật ký:

cat /myems-modbus-tcp.log

Bước 5: myems-cleaning

Trong bước này, bạn sẽ cài đặt dịch vụ myems-cleaning.

sudo cp -r ~/myems/myems-cleaning /myems-cleaning
cd /myems-cleaning

Để tránh lỗi 'error: externally-managed-environment', hãy tạo thư mục môi trường ảo:

sudo python -m venv venv

Kích hoạt môi trường ảo

source venv/bin/activate

Cài đặt các gói yêu cầu

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

Thoát môi trường ảo

deactivate

Sao chép tệp example.env thành .env và chỉnh sửa tệp .env:

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

Thay đổi đường dẫn python trong 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

Cấu hình dịch vụ systemd:

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

Kích hoạt dịch vụ:

sudo systemctl enable myems-cleaning.service

Khởi động dịch vụ:

sudo systemctl start myems-cleaning.service

Giám sát dịch vụ:

sudo systemctl status myems-cleaning.service

Xem nhật ký:

cat /myems-cleaning.log

Bước 6: myems-normalization

Trong bước này, bạn sẽ cài đặt dịch vụ myems-normalization.

sudo cp -r ~/myems/myems-normalization /myems-normalization
cd /myems-normalization

Để tránh lỗi 'error: externally-managed-environment', hãy tạo thư mục môi trường ảo:

sudo python -m venv venv

Kích hoạt môi trường ảo

source venv/bin/activate

Cài đặt các gói yêu cầu

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

Thoát môi trường ảo

deactivate

Sao chép tệp example.env thành .env và chỉnh sửa tệp .env:

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

Thay đổi đường dẫn python trong 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

Cấu hình dịch vụ systemd:

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

Kích hoạt dịch vụ:

sudo systemctl enable myems-normalization.service

Khởi động dịch vụ:

sudo systemctl start myems-normalization.service

Giám sát dịch vụ:

sudo systemctl status myems-normalization.service

Xem nhật ký:

cat /myems-normalization.log

Bước 7: myems-aggregation

Trong bước này, bạn sẽ cài đặt dịch vụ myems-aggregation.

sudo cp -r ~/myems/myems-aggregation /myems-aggregation
cd /myems-aggregation

Để tránh lỗi 'error: externally-managed-environment', hãy tạo thư mục môi trường ảo:

sudo python -m venv venv

Kích hoạt môi trường ảo

source venv/bin/activate

Cài đặt các gói yêu cầu

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

Thoát môi trường ảo

deactivate

Sao chép tệp example.env thành .env và chỉnh sửa tệp .env:

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

Thay đổi đường dẫn python trong 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

Cấu hình dịch vụ systemd:

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

Kích hoạt dịch vụ:

sudo systemctl enable myems-aggregation.service

Khởi động dịch vụ:

sudo systemctl start myems-aggregation.service

Giám sát dịch vụ:

sudo systemctl status myems-aggregation.service

Xem nhật ký:

cat /myems-aggregation.log

Bước 8: myems-web

Trong bước này, bạn sẽ cài đặt dịch vụ giao diện người dùng myems-web.

Xóa các tệp mặc định

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

Thêm tệp mới vào /etc/nginx/conf.d/

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

Thêm một phần 'server' mới với các chỉ thị như bên dưới:

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'
## NOTE: replace dafault address http://127.0.0.1:8000/ with actual IP or URL
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • Cài đặt MyEMS Web UI:

Cài đặt NodeJS:

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

Chỉnh sửa tệp config.js:

Ghi chú

Lấy mapboxToken tại https://mapbox.com và sau đó đặt showOnlineMap thành true. Nếu bạn muốn tắt tính năng bản đồ trực tuyến, hãy đặt showOnlineMap thành false

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

Biên dịch và nén:

sudo npm i --unsafe-perm=true --allow-root --legacy-peer-deps
sudo npm run build
  • Cài đặt
sudo mv build  /var/www/myems-web

Khởi động lại NGINX:

sudo systemctl restart nginx

Thêm cổng vào tường lửa:

sudo ufw allow 80

Sau khi cài đặt

Chúc mừng! Bạn đã có thể đăng nhập vào giao diện quản trị MyEMS và giao diện web MyEMS.

Cổng mặc định

MyEMS Web UI: 80

MyEMS API: 8000

MyEMS Admin UI: 8001

Giả sử địa chỉ máy chủ là 192.168.1.8 (thay bằng địa chỉ thực tế) Truy cập MyEMS Web UI tại http://192.168.1.8 (có thể bỏ 80) Truy cập MyEMS Admin UI tại http://192.168.1.8:8001

Mật khẩu mặc định

MyEMS Admin UI

Tên đăng nhập:

administrator

Mật khẩu:

!MyEMS1

MyEMS Web UI

Tên đăng nhập:

administrator@myems.io

Mật khẩu:

!MyEMS1

Khắc phục sự cố