본문으로 바로 가기

Kylin OS

이 가이드에서는 Kylin V11 서버에 MyEMS를 배포합니다.

사전 요구 사항

이 가이드는 Kylin V11에 MyEMS를 설치하는 방법을 설명합니다. 하드웨어 요구 사항은 선택한 데이터베이스와 시스템에 연결된 장치 수에 따라 다릅니다. 단일 머신에서 MyEMS와 MySQL을 실행하려면 최소 8GB의 RAM이 필요합니다.

시스템을 업데이트하고 도구를 설치합니다:

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

example.env를 기반으로 .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 서비스가 다른 서버에서 실행되는 경우 기본 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로 프록시합니다
## 'server'에 또 다른 위치 /api를 추가합니다
## myems-api 서비스가 다른 서버에서 호스팅되는 경우 기본 myems-api URL http://127.0.0.1:8000/ 을 실제 URL로 바꿉니다
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 오류가 발생하는 경우 'sudo setforce 0' 명령을 사용하여 SELinux 모드를 변경하여 해결할 수 있습니다.

단계 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 서비스를 설치합니다.

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;
# 페이지 새로고침 중 404 오류를 피하기 위해 try_files 지시문을 추가합니다
try_files $uri /index.html;
}
## CORS 문제를 피하기 위해 Nginx를 사용하여 myems-api를 경로 /api로 프록시합니다
## 'server'에 또 다른 위치 /api를 추가합니다
## myems-api 서비스가 다른 서버에서 호스팅되는 경우 기본 myems-api URL http://127.0.0.1:8000/ 을 실제 URL로 바꿉니다
location /api {
proxy_pass http://127.0.0.1:8000/;
proxy_connect_timeout 75;
proxy_read_timeout 600;
send_timeout 600;
}
}
  • MyEMS Web UI를 설치합니다:

설정 파일을 편집합니다:

참고 https://mapbox.com 에서 mapboxToken을 받은 후 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 Internal Server Error' nginx 오류가 발생하는 경우 'sudo setforce 0' 명령을 사용하여 SELinux 모드를 변경하여 해결할 수 있습니다.

설치 후

축하합니다! 이제 MyEMS Admin UI와 Web UI에 로그인할 수 있습니다.

기본 포트

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

비밀번호:

!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. 공식 MySQL rpm 번들 다운로드

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

프롬프트를 따릅니다:

  1. 임시 비밀번호 입력
  2. 새 비밀번호 설정 (대문자, 소문자, 숫자, 특수 문자 포함 필수)
  3. root 비밀번호를 변경하시겠습니까? Y
  4. 익명 사용자를 제거하시겠습니까? Y
  5. root 원격 로그인을 허용하지 않겠습니까? 필요에 따라 선택
  6. 테스트 데이터베이스를 제거하시겠습니까? Y
  7. 권한 테이블을 다시 로드하시겠습니까? 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