본문으로 건너뛰기

(legacy) H/W 전체 설치 — native tools/setup.sh

이 페이지는 2026.05 미만 native 배포 박스를 유지보수할 때 참고하는 legacy 절차입니다. 새 H/W, 양산 출하, 신규 현장 설치는 빠른 설치 (install.sh)를 사용하세요.

신규 설치에는 사용하지 마세요

tools/setup.sh 는 native plantpulse.service 와 host 직접 실행 구조를 전제로 합니다. 2026.05+ 컨테이너 표준은 plantpulse-edge.service 하나가 런타임을 관리합니다. 두 모드를 같은 박스에서 섞으면 포트/데이터 경로가 충돌합니다.

그래도 이 문서를 쓰는 경우

이미 native 로 운영 중인 구형 박스를 재설치/복구해야 하거나, 예전 현장 인수 문서를 대조해야 할 때만 사용합니다. 신규 박스라면 설치 — 한눈에 보기로 돌아가세요.


1. 사전 요구 (legacy native)

항목
OSFedora 38 (당시 검증 기준 — 다른 RHEL 계열 동작 가능, 동작 검증 별도)
권한root (sudo -i 또는 직접 root 로그인)
네트워크인터넷 연결 (dnf 패키지 + legacy native bundle 다운로드)
디스크/opt 에 ~3GB, /data1 (별도 파티션 권장) 데이터용 100GB+
메모리최소 8GB (Cassandra 4GB heap + Tomcat 4GB)
NIC 개수2 개 (1번 = WAN/외부, 2번 = PLC/내부) — 산업 어플라이언스 표준
시각인터넷 NTP 도달 가능 (chrony 설치됨)

1.1 권장 H/W 사양

등급CPURAMSSDNIC가격대
(≤ 1k 태그)4 코어 / 2.0GHz+8GB256GB2x 1Gbps산업용 미니 PC
(1k–10k 태그)8 코어 / 2.5GHz+16GB512GB SSD + 1TB HDD2x 1Gbps산업 어플라이언스
(10k+ 태그)16 코어 / 3.0GHz+32GB+1TB NVMe2x 10Gbps1U 서버

2. 위치

/opt/kopens/tools/setup.sh ← 메인 setup 스크립트
/opt/kopens/tools/net/ ← 네트워크 set-1.sh / set-2.sh / status.sh / ping.sh
/opt/kopens/tools/firewall/open.sh ← firewalld 포트 오픈
/opt/kopens/tools/file/run.sh ← TCP / file limit / sysctl 튜닝
/opt/kopens/tools/file/sysctl.conf ← 커널 튜닝
/opt/kopens/tools/file/limits.conf ← 프로세스 리소스 한도
/opt/kopens/tools/file/chrony.conf ← NTP
/opt/kopens/tools/docker/setup.sh ← Docker CE 설치
/opt/kopens/tools/java/setup.sh ← Amazon Corretto 17
/opt/kopens/tools/python/setup.sh ← Python 3 + pip
/opt/kopens/tools/nodejs/setup.sh ← Node.js + npm
/opt/kopens/tools/ssl/gen.sh ← 자체 서명 인증서 발급 (CA + 서버)
/opt/kopens/tools/vpn/setup.sh ← VPN 클라이언트
/opt/kopens/tools/service/plantpulse.service ← systemd unit
/opt/kopens/tools/service/service-start.sh ← systemd ExecStart → bin/start.sh
/opt/kopens/tools/service/service-stop.sh ← systemd ExecStop → bin/stop.sh

3. 실행 — legacy native 한 줄 명령

# 1) root 권한
sudo -i

# 2) 작업 디렉토리
cd /opt/kopens/tools

# 3) 실행 (대화형 — 호스트명 + 네트워크 설정을 묻습니다)
./setup.sh

전체 소요 시간: 15–30 분 (인터넷 속도 + dnf 패키지 다운로드 + tuned 부팅). 끝나면 10초 후 자동 reboot — 재부팅 후 legacy plantpulse.service 가 자동 시작합니다.


4. 단계별 입력 가이드 (대화형 prompt)

설치 중 다음 입력이 차례로 나옵니다.

4.1 호스트명

[?] INPUT THIS EDGE GATEAY HOSTNAME :
=> EDGE_00303

게이트웨이 식별용. EDGE_<숫자4자리> 또는 사이트 컨벤션에 맞춰 입력. 예: EDGE_00303.

4.2 1번 NIC (WAN / 외부망) — enp1s0

[?] ETHERNET [enp1s0] MODE [DHCP|STATIC] :
모드입력그 후
DHCP자동으로 IP 받음추가 입력 없음
STATIC고정 IP 사용IP/마스크, 게이트웨이, DNS 추가 입력

STATIC 일 때 추가 prompt:

[?] ETHERNET [enp1s0] IP/SUBNETMASK : 192.168.0.50/24
[?] ETHERNET [enp1s0] GATEWAY : 192.168.0.1
[?] ETHERNET [enp1s0] DNS : 8.8.8.8

이 NIC 는 기본 게이트웨이 (외부 인터넷 / 클라우드 / 플랫폼 API) 도달용. DNS 는 사내 DNS 또는 공인 DNS.

4.3 2번 NIC (PLC / 내부망) — enp2s0

같은 형식으로 한 번 더. PLC 망 전용이므로 보통 STATIC 으로 깔끔하게 분리:

[?] ETHERNET [enp2s0] MODE [DHCP|STATIC] : STATIC
[?] ETHERNET [enp2s0] IP/SUBNETMASK : 192.168.100.10/24
[?] ETHERNET [enp2s0] GATEWAY : 192.168.100.1
[?] ETHERNET [enp2s0] DNS : 192.168.100.1

이 NIC 는 기본 게이트웨이로 사용 안 함 (ipv4.never-default yes) — PLC 와의 사설망 통신 전용. WAN 라우팅과 분리됨.

4.4 네트워크 검증 + 시간 동기

setup.sh 가 자동으로 nmcli con upping 으로 외부 도달 검증, chronyc makestep 으로 NTP 동기. 출력에 OK 또는 IP / RTT 가 보이면 정상.


5. setup.sh 전체 22 단계 — 자세히

#단계동작예상 출력
1KOPENS_HOME 환경변수 등록/etc/bashrc 에 추가(조용)
2호스트명 설정hostnamectl set-hostname(조용)
3${PE_HOME}/conf/env.sh 생성PE_HOME / PE_DATA_DIR / JAVA_HOME / CLEAN_ON_STARTUPenv.sh 출력
4${PE_DATA_DIR} (/data1) 디렉토리 생성mkdir -p/data1
5네트워크 설정net/set-1.sh (1번 WAN), net/set-2.sh (2번 PLC), NetworkManager 재시작nmcli 출력
6net/status.sh + net/ping.sh 검증인터페이스 상태 + 외부 pingRTT 출력
7로케일 / 타임존ko_KR.utf8 + Asia/Seouldate
8OS 업데이트dnf -y updatednf 진행 표시
9필수 패키지 설치tar / htop / fping / pv / firefox / java-17-openjdk-devel / jna / jemalloc / zstd / curl-devel / chrony / tuned / net-tools / numactl / nodejs / npm / python3 / fail2ban / gcc / glibc-devel / NetworkManager-tuidnf 진행
10튜닝tuned-adm profile throughput-performance + GNOME 절전 비활성화Active profile: throughput-performance
11방화벽tools/firewall/open.sh (아래 5.1 표)firewall-cmd --list-all
12NTP (chrony)chrony.conf 적용 + 서비스 enable + hwclock -w 동기chronyc ntpdata
13TCP / file limit / sysctltools/file/run.sh (아래 5.2 표)(조용)
14CPU governor모든 CPU performance 모드(조용)
15NUMA + Hugepagesvm.zone_reclaim_mode=0 + transparent hugepage 비활성 + 9216 hugepage 예약numactl --show
16Dockertools/docker/setup.sh (Docker CE)docker version
17Java 17Amazon Correttojava -version
18Python 3 / NodeJSdnf installpython3 --version
19SSL 인증서 발급tools/ssl/gen.sh — 자체서명 CA + 서버 cert (/var/security/plantpulse/)openssl 출력
20VPNtools/vpn/setup.shVPN 클라이언트 설치
21dnf clean all캐시 정리(조용)
22systemd 등록/etc/systemd/system/plantpulse.service 복사 + systemctl enable plantpulseservice 등록
23자동 reboot10초 카운트다운 후*** NOW REBOOT AFTER 10 SEC! ***

set -e 가 켜져있어 어느 단계든 실패하면 즉시 중단 합니다.

5.1 방화벽 — 자동으로 열리는 포트 목록

tools/firewall/open.sh 가 다음 TCP 포트를 public zone 에 영구 추가합니다:

포트용도
22 (TCP/UDP)SSH
80, 443 (TCP)웹 UI (/ui/main)
123 (TCP/UDP)NTP
1880 (TCP)Node-RED (/ui/flow 의 백엔드)
3000 (TCP)Grafana (시계열 대시보드)
4000 (TCP)APM / 모니터링
7000, 7001, 9042 (TCP)Cassandra (gossip / SSL gossip / 클라이언트)
7799 (TCP)JMX (Tomcat 모니터)
7800, 7801 (TCP)timeseries-engine
9090 (TCP)Cockpit (서버 관리)
12000, 12443 (TCP)OPC-UA (TCP / TLS)
19999 (TCP)NetData

추가로 --add-masquerade 가 활성화되어 Docker 컨테이너가 호스트 망으로 NAT 됨.

5.2 sysctl 튜닝 (/etc/sysctl.conf 일부)

net.ipv4.tcp_keepalive_time = 60 # PLC TCP keepalive 빠르게
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 10
net.core.rmem_max = 16777216 # 16MB 수신 버퍼
net.core.wmem_max = 16777216 # 16MB 송신 버퍼
net.core.somaxconn = 1024
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
vm.max_map_count = 1048575 # Cassandra mmap
vm.overcommit_memory = 1 # Cassandra hint
vm.swappiness = 1 # 최소 스왑

6. 재부팅 후 — native 정상 동작 확인 (1분)

# 1) systemd 서비스 살아있는지
systemctl status plantpulse
# 예: active (running) since ...

# 2) 모든 컴포넌트 프로세스
/opt/kopens/plantpulse-edge/bin/ps.sh

# 3) 시스템 헬스 (200 OK 면 게이트웨이 정상)
curl -s http://127.0.0.1/api/v1/system/health | jq

# 4) OPC-UA 트리 (등록된 OPC 가 0 이어도 OK — 빈 배열)
curl -s http://127.0.0.1/ui/opcua/tree | jq '.data.tree | length'

# 5) 웹 UI
# 브라우저 → https://<게이트웨이>/ui/main
# 좌상단 로고 + 30개 카드가 보이면 정상

7. systemd 통합 운영 (legacy native)

설치 후 systemd 가 게이트웨이를 자동 관리:

sudo systemctl start plantpulse # 시작 (start.sh 호출)
sudo systemctl stop plantpulse # 정지 (stop.sh 호출)
sudo systemctl status plantpulse # 상태
sudo systemctl restart plantpulse # 풀스택 재시작 (60초+ 다운타임)
sudo journalctl -u plantpulse -n 100 # systemd 로그 마지막 100줄

단순 Tomcat 만 재시작 (코드 / app.properties 반영) 은 bin/restart.sh (~6초). systemd restart 는 풀스택 (stop.shstart.sh).

내부 wiring:

  • plantpulse.serviceExecStart=service-start.shbin/start.sh
  • plantpulse.serviceExecStop=service-stop.shbin/stop.sh

8. 자주 빠지는 함정

단계증상원인 / 해결
5 (네트워크)set-1.sh 후 SSH 끊김네트워크 인터페이스 / 게이트웨이 잘못 설정. 콘솔 (KVM/IPMI) 로 들어가 nmcli con modify enp1s0 ipv4.address ... 수동 복구
5 (네트워크)NIC 이름이 enp1s0 가 아님 (예: eth0, eno1)OS 의 NIC 명 확인 (nmcli dev). tools/net/set-1.shIF=enp1s0 라인을 실제 이름으로 수정 후 setup.sh 재실행
8 (dnf)dnf 업데이트가 멈춤회선 / 사내망 dnf mirror 점검. 사내망이면 /etc/yum.repos.d/ 에 사내 mirror 추가
9 (패키지)일부 패키지 missing (예: firefox 가 없음)minimal 설치 ISO. 그 패키지 빠져도 게이트웨이 자체엔 문제 없음 — 무시하고 진행
10 (tuned)tuned-adm not founddnf install tuned 누락. 수동 설치 후 setup.sh 의 11 단계부터 재개
11 (방화벽)firewall-cmd --reload 실패firewalld 안 실행. systemctl start firewalld 수동. SELinux enforcing 도 점검
15 (hugepages)부팅 후 hugepage 가 풀림/etc/sysctl.d/99-plantpulse.confvm.nr_hugepages = 9216 영구 추가
22 (systemd)재부팅 후 게이트웨이 안 뜸journalctl -u plantpulse --no-pager 로 unit 실패 원인 확인. bin/start.sh 직접 실행하면서 어디서 막히는지 파악
set -e중간 abort메시지 본문의 직전 단계 확인. 그 단계만 수동 실행 후 setup.sh 의 다음 단계 부터 재개
일반스크립트 실행 권한chmod +x /opt/kopens/tools/setup.sh (드물게 필요)

9. 설치 후 첫 권장 작업

  1. 웹 UI 접속 + 비밀번호 변경/ui/main → 우상단 사용자 메뉴 → 비밀번호 변경
  2. 사이트 / 엣지 ID 확인환경 설정site.id, edge.id
  3. Sparkplug B 연동Sparkplug B (필요시)
  4. 첫 PLC 연결 추가새 PLC 연결 추가
  5. 정기 백업 cron 등록 — 백업 (backup.sh)

10. 더 알아보기