(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)
| 항목 | 값 |
|---|---|
| OS | Fedora 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 사양
| 등급 | CPU | RAM | SSD | NIC | 가격대 |
|---|---|---|---|---|---|
| 소 (≤ 1k 태그) | 4 코어 / 2.0GHz+ | 8GB | 256GB | 2x 1Gbps | 산업용 미니 PC |
| 중 (1k–10k 태그) | 8 코어 / 2.5GHz+ | 16GB | 512GB SSD + 1TB HDD | 2x 1Gbps | 산업 어플라이언스 |
| 대 (10k+ 태그) | 16 코어 / 3.0GHz+ | 32GB+ | 1TB NVMe | 2x 10Gbps | 1U 서버 |
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 up 후 ping 으로 외부 도달 검증, chronyc makestep 으로 NTP 동기. 출력에 OK 또는 IP / RTT 가 보이면 정상.
5. setup.sh 전체 22 단계 — 자세히
| # | 단계 | 동작 | 예상 출력 |
|---|---|---|---|
| 1 | KOPENS_HOME 환경변수 등록 | /etc/bashrc 에 추가 | (조용) |
| 2 | 호스트명 설정 | hostnamectl set-hostname | (조용) |
| 3 | ${PE_HOME}/conf/env.sh 생성 | PE_HOME / PE_DATA_DIR / JAVA_HOME / CLEAN_ON_STARTUP | env.sh 출력 |
| 4 | ${PE_DATA_DIR} (/data1) 디렉토리 생성 | mkdir -p | /data1 |
| 5 | 네트워크 설정 | net/set-1.sh (1번 WAN), net/set-2.sh (2번 PLC), NetworkManager 재시작 | nmcli 출력 |
| 6 | net/status.sh + net/ping.sh 검증 | 인터페이스 상태 + 외부 ping | RTT 출력 |
| 7 | 로케일 / 타임존 | ko_KR.utf8 + Asia/Seoul | date |
| 8 | OS 업데이트 | dnf -y update | dnf 진행 표시 |
| 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-tui | dnf 진행 |
| 10 | 튜닝 | tuned-adm profile throughput-performance + GNOME 절전 비활성화 | Active profile: throughput-performance |
| 11 | 방화벽 | tools/firewall/open.sh (아래 5.1 표) | firewall-cmd --list-all |
| 12 | NTP (chrony) | chrony.conf 적용 + 서비스 enable + hwclock -w 동기 | chronyc ntpdata |
| 13 | TCP / file limit / sysctl | tools/file/run.sh (아래 5.2 표) | (조용) |
| 14 | CPU governor | 모든 CPU performance 모드 | (조용) |
| 15 | NUMA + Hugepages | vm.zone_reclaim_mode=0 + transparent hugepage 비활성 + 9216 hugepage 예약 | numactl --show |
| 16 | Docker | tools/docker/setup.sh (Docker CE) | docker version |
| 17 | Java 17 | Amazon Corretto | java -version |
| 18 | Python 3 / NodeJS | dnf install | python3 --version |
| 19 | SSL 인증서 발급 | tools/ssl/gen.sh — 자체서명 CA + 서버 cert (/var/security/plantpulse/) | openssl 출력 |
| 20 | VPN | tools/vpn/setup.sh | VPN 클라이언트 설치 |
| 21 | dnf clean all | 캐시 정리 | (조용) |
| 22 | systemd 등록 | /etc/systemd/system/plantpulse.service 복사 + systemctl enable plantpulse | service 등록 |
| 23 | 자동 reboot | 10초 카운트다운 후 | *** 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초). systemdrestart는 풀스택 (stop.sh→start.sh).
내부 wiring:
plantpulse.service→ExecStart=service-start.sh→bin/start.shplantpulse.service→ExecStop=service-stop.sh→bin/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.sh 의 IF=enp1s0 라인을 실제 이름으로 수정 후 setup.sh 재실행 |
| 8 (dnf) | dnf 업데이트가 멈춤 | 회선 / 사내망 dnf mirror 점검. 사내망이면 /etc/yum.repos.d/ 에 사내 mirror 추가 |
| 9 (패키지) | 일부 패키지 missing (예: firefox 가 없음) | minimal 설치 ISO. 그 패키지 빠져도 게이트웨이 자체엔 문제 없음 — 무시하고 진행 |
| 10 (tuned) | tuned-adm not found | dnf install tuned 누락. 수동 설치 후 setup.sh 의 11 단계부터 재개 |
| 11 (방화벽) | firewall-cmd --reload 실패 | firewalld 안 실행. systemctl start firewalld 수동. SELinux enforcing 도 점검 |
| 15 (hugepages) | 부팅 후 hugepage 가 풀림 | /etc/sysctl.d/99-plantpulse.conf 에 vm.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. 설치 후 첫 권장 작업
- 웹 UI 접속 + 비밀번호 변경 —
/ui/main→ 우상단 사용자 메뉴 → 비밀번호 변경 - 사이트 / 엣지 ID 확인 — 환경 설정 의
site.id,edge.id - Sparkplug B 연동 — Sparkplug B (필요시)
- 첫 PLC 연결 추가 — 새 PLC 연결 추가
- 정기 백업 cron 등록 — 백업 (
backup.sh)
10. 더 알아보기
- 빠른 / 원라인 설치 (이미 OS 준비된 경우): 빠른 설치 (원라인)
- 운영 스크립트 카탈로그: 운영 — 한눈에 보기
- 업그레이드 절차: 업그레이드 (
upgrade.sh) - 환경 변수 / 설정: 환경 설정 (
app.properties) - 백업으로부터 복구: 백업 (
backup.sh)