바이너리 설치
현행 출하본은 Docker Compose 스택 하나입니다 — 인증서 원샷 하나, 데이터레이크 하나, 앱 여섯, 프록시 하나로 구성됩니다(설치되는 모양).
이 페이지는 바이너리 설치로 구축된 기존 시스템을 계속 운영하시는 분들을 위해 남겨 둔 것입니다. 신규 구축에는 원라인 설치 또는 Docker 설치를 사용해 주세요.
또한 아래 본문은 컨테이너 전환 이전 기준으로 작성되어 있어, 현행 제품과 어긋나는 부분이 있을 수 있습니다. 바이너리 환경에서 문제가 있으시면 webmaster@kopens.com 으로 문의해 주세요.
개요
이 페이지에서는 OS 위에 PlantPulse 플랫폼을 직접 설치하는 바이너리(네이티브) 설치 절차를 안내합니다. tar.gz 패키지를 풀고 한 번의 셋업 스크립트로 OS 의존성, 인프라, 애플리케이션이 모두 구성됩니다.
데이터레이크/애플리케이션 2노드 분리(
PP_TIER) 로 설치하려면 2노드 분리 설치 를 참고해 주세요. 이 문서는 단일 박스(FULL) 바이너리 설치 기준입니다.
설치 방식 비교
| 항목 | 바이너리 설치 | 원라인 / Docker 설치 |
|---|---|---|
| 설치 시간 | 20~40분 | 10~20분 |
| 환경 의존성 | 호스트 OS 에 패키지 설치 | 컨테이너에 모두 포함 |
| 자원 격리 | 호스트와 공유 | 컨테이너로 격리 |
| 업데이트 | tar.gz 재배포 + configure | update.sh 한 줄 |
| 롤백 | 백업본에서 수동 복원 | 이전 이미지로 자동 rollback |
| 폐쇄망 | setup-offline.sh 지원 | airgap-load.sh 지원 |
| 호스트 OS | 직접 영향 | 거의 영향 없음 |
지원 환경
| OS | 버전 | 검증 |
|---|---|---|
| Oracle Linux | 8.x, 9.x | ✓ |
| RHEL / Rocky Linux | 8.x, 9.x | ✓ |
| Amazon Linux | 2, 2023 | ✓ |
| Ubuntu | 22.04+ | ✓ |
하드웨어 권장 사양
| 구분 | 최소 | 표준 | 대규모 |
|---|---|---|---|
| CPU | 16 vCPU | 32 vCPU | 48+ vCPU |
| 메모리 | 64GB | 128GB | 200GB+ |
| 데이터 디스크 | 200GB | 1TB | 4TB+ |
| 디스크 IOPS | NVMe SSD 권장 | NVMe SSD | NVMe SSD |
| 네트워크 | 1Gbps | 10Gbps | 10Gbps |
검증 환경 (참고): 운영 검증 환경은 48 vCPU / 188GB RAM / 4.8TB NVMe SSD, RHEL 9 / Temurin OpenJDK 21 LTS 로 운영 중입니다.
설치 절차 개요
1. 사전 준비
1.1 root 권한 확보
설치는 root 권한으로 진행합니다. 비루트 사용자로 운영하려면 설치 완료 후 별도의 권한 분리 절차가 필요합니다 (운영팀 문의).
sudo -i
1.2 데이터 디스크 마운트
대용량 시계열 데이터를 위해 별도 디스크를 /data1 에 마운트해 주세요.
# 사용 가능한 디스크 확인
lsblk
# 예: /dev/sdb 를 ext4 로 포맷 후 /data1 에 마운트
mkfs.ext4 /dev/sdb
mkdir -p /data1
mount /dev/sdb /data1
# 부팅 시 자동 마운트
echo "/dev/sdb /data1 ext4 defaults 0 0" >> /etc/fstab
디스크 분리 권장: OS 디스크와 데이터 디스크를 분리하면 백업, 확장, 장애 격리가 쉬워집니다. 작은 환경이라도 가급적 별도 디스크 / 별도 LV 로 구성해 주세요.
1.3 시간 동기화
분산 컴포넌트 (Cassandra, Kafka 등) 는 노드 간 시간 정확도에 민감합니다. NTP 동기화가 필수입니다.
# RHEL 계열
dnf install -y chrony
systemctl enable --now chronyd
chronyc tracking
1.4 SELinux / 방화벽
setup.sh 가 자동으로 SELinux 를 permissive 로 전환하고 필요한 방화벽 포트를 엽니다. 회사 / 클라우드 상위 방화벽은 별도로 포트 구성 정보 페이지를 참고해 허용 규칙을 추가해 주세요.
2. 패키지 다운로드 및 압축 해제
KOPENS 운영팀으로부터 받은 plantpulse-platform-YYYY.MM.tgz 패키지를 /opt/kopens/ 에 배치합니다.
mkdir -p /opt/kopens
cd /opt/kopens
# scp 또는 USB / 내부 미러로 패키지 이전
# 예시: scp 로 받은 파일을 풀기
tar -xzvf plantpulse-platform-2026.05.tgz
# 결과 디렉토리 확인
ls /opt/kopens/plantpulse-platform/
압축 해제 후 다음 구조가 만들어집니다.
/opt/kopens/plantpulse-platform/
├── plantpulse-startup/ # 모든 운영 스크립트 + startup.jar
│ ├── env.sh # 전역 환경 변수 (★ 검토 필요)
│ ├── start.sh / stop.sh # 시작 / 정지
│ ├── start-daemon.sh # 데몬 모드 시작
│ ├── restart.sh # stop → clean → start-daemon
│ ├── status.sh # 포트 기반 상태 점검
│ ├── configure.sh # 템플릿 → 실제 설정 생성
│ ├── prepare-ssl.sh # TLS 인증서 생성
│ ├── restart-*.sh # 모듈별 재시작
│ ├── node-*.sh # Cassandra 운영
│ ├── log-viewer.sh # 통합 로그 뷰어
│ └── ...
├── plantpulse-server/ # 웹 콘솔 (Tomcat 기반)
├── plantpulse-batch/ # 배치 처리
├── plantpulse-cep/ # 복합 이벤트 처리
├── plantpulse-data-gateway/ # 데이터 게이트웨이
├── plantpulse-sql/ # SQL 쿼리 서비스
├── plantpulse-monitor/ # 모니터링
├── plantpulse-warehouse/ # 데이터 웨어하우스
├── plantpulse-plugin/ # OPC-UA / AAS 산업 플러그인
├── plantpulse-storage/ # Cassandra / PostgreSQL / Valkey / MinIO
├── plantpulse-messaging/ # Kafka / MQTT(HiveMQ) / STOMP(ActiveMQ)
├── plantpulse-analytics/ # Spark / Hive / Kyuubi / Gravitino / Hadoop
├── plantpulse-workflow/ # Temporal / Kestra
├── plantpulse-timeseries/ # 시계열 엔진 + UI
├── tools/ # OS 의존성 / JDK / DB 클라이언트 / 설정 템플릿
│ ├── setup.sh # 온라인 셋업
│ ├── setup-offline.sh # 폐쇄망 셋업
│ ├── java/ # OpenJDK
│ ├── postgresql/ # psql 클라이언트
│ ├── valkey/ # redis-cli
│ ├── cron/ firewall/ ssl/ swap/ ntp/ ...
│ └── ...
├── offline/ # 폐쇄망 설치 리소스 (RPM 리포 + wheels)
└── backup/ # 자체 백업 디렉토리
3. 셋업 스크립트 실행
tools/setup.sh 가 OS 패키지 설치, JDK 설치, 데이터 디렉토리 생성, 방화벽 / SELinux / NTP / limits / sysctl 까지 한 번에 처리합니다.
cd /opt/kopens/plantpulse-platform/tools
./setup.sh
셋업 대화형 입력
setup.sh 는 다음 정보를 묻습니다.
| 항목 | 설명 | 예시 |
|---|---|---|
| 노드 모드 | MASTER (단일/클러스터 마스터) 또는 WORKER | MASTER |
| HOST IP | 서버 내부 IP | 192.168.0.41 |
| SERVICE IP | 외부 접속 IP 또는 도메인 | 192.168.0.41 |
| MASTER IP (WORKER 만) | 마스터 노드 IP | 192.168.0.41 |
| 데이터 디스크명 | lsblk 출력 기준 | sdb |
| 데이터 루트 경로 | 데이터 저장 디렉토리 | /data1 |
셋업이 자동으로 수행하는 작업
실행 시간: 처음 실행 시 약 15~30분 소요됩니다 (OS 업데이트 + 패키지 설치 + 인프라 컴포넌트 설치 포함).
4. 환경 변수 설정 (env.local.sh 로 오버라이드)
/opt/kopens/plantpulse-platform/plantpulse-startup/env.sh 가 플랫폼 전체의 단일 설정 소스(기본값 정본)입니다. 모든 모듈의 템플릿 설정 파일이 이 값을 참조해 생성됩니다.
전체
PP_*변수 목록(기본값·설명)은 환경 변수 레퍼런스 에 카테고리별로 정리되어 있습니다.
⚠️
env.sh를 직접 고치지 마세요. 서버에 맞는 값(IP·자원·비밀번호 등 머신 고유값)은 같은 디렉토리의env.local.sh에 작성합니다. 바이너리 설치는 이 방식이 정석입니다.
구분 도커 설치 바이너리 설치 (이 페이지) 설정 파일 bin/env.sh의DOCKER_PP_*환경변수를 직접 수정plantpulse-startup/env.local.sh에 오버라이드 작성원본 보존 — env.sh원본은 그대로 두므로 업데이트 시 안전
왜 env.local.sh 인가요?
env.sh 는 맨 윗부분에서 env.local.sh 를 가장 먼저 읽어들입니다. env.sh 의 모든 변수는 ${PP_XXX:-기본값} 형태라, env.local.sh 에서 export PP_XXX=... 로 선언한 값이 항상 기본값을 이깁니다.
env.local.sh는 git 에 포함되지 않고, 플랫폼 업데이트(tar.gz 재배포) 시에도 덮어쓰이지 않습니다. → 한 번 작성하면 업데이트 후에도 설정이 그대로 유지됩니다.- 반대로
env.sh를 직접 고치면 업데이트 때 새env.sh로 교체되어 수정 내용이 사라집니다.
env.local.sh 작성
파일이 없으면 새로 만들면 됩니다. 바꿔야 하는 변수만 export 로 적습니다.
cd /opt/kopens/plantpulse-platform/plantpulse-startup
vi env.local.sh
#!/bin/bash
# env.local.sh — 이 서버 전용 오버라이드 (env.sh 가 먼저 source 하여 우선 적용)
# 여기에 적은 값만 기본값을 덮어씁니다. 적지 않은 변수는 env.sh 기본값을 그대로 사용합니다.
export PP_HOST_IP="192.168.0.41" # 서버 내부 IP (hostname -I)
export PP_SERVICE_IP="192.168.0.41" # 브라우저 접속 IP/도메인 (단일 서버면 HOST_IP 와 동일)
export PP_MASTER_IP="192.168.0.41" # 마스터 IP (단일 서버면 HOST_IP 와 동일)
export PP_DATA_DISK_NAME="sdb" # 데이터 디스크 이름 (lsblk)
export PP_DATA_DIR="/data1/pp-data" # 데이터 저장 경로
export PP_CLUSTER_CORES="30" # 분산 분석에 할당할 코어 (아래 4.1 사이징표 참고)
export PP_CLUSTER_MEMORY_BY_CORE="2G" # 코어당 메모리
저장 후 반드시
./configure.sh를 다시 실행해야 새 값이 각 모듈 설정에 반영됩니다(5단계). 변경할 때마다env.local.sh수정 →./configure.sh가 한 묶음입니다.
4.1 반드시 확인해야 할 핵심 변수
| 카테고리 | 변수 | 설명 | 기본값 |
|---|---|---|---|
| Platform | PP_HOME | 설치 경로 | /opt/kopens/plantpulse-platform |
PP_MODE | 노드 모드 | MASTER / WORKER | |
| Network | PP_HOST_IP | 서버 내부 IP | 192.168.0.41 |
PP_SERVICE_IP | 외부 접속 IP | 192.168.0.41 | |
PP_MASTER_IP | 마스터 IP | 192.168.0.41 | |
PP_PUBLIC_IP | 외부 공개 IP (NAT) | ${PP_HOST_IP} | |
| Data | PP_DATA_DIR | 데이터 저장 경로 | /data1/pp-data |
PP_TEMP_DIR | 임시 파일 경로 | /data1/pp-temp | |
PP_BACKUP_DIR | 백업 경로 | /data1/pp-backup | |
| Resources | PP_CLUSTER_CORES | 분산 분석에 할당할 코어 | 30 |
PP_CLUSTER_MEMORY_BY_CORE | 코어당 메모리 | 2G | |
| Locale | PP_LANG | 로케일 (ko / en) | en |
PP_TZ | 타임존 | Asia/Seoul |
위 표는 변수 이름과 기본값을 보는 레퍼런스입니다. 실제로 바꿀 값은 4단계 도입부에서 안내한 대로
env.local.sh에export로 적습니다(env.sh직접 수정 ✗). 3단계 셋업에서 입력한 HOST IP / SERVICE IP / 디스크명은 이미 반영되어 있으니, 이 단계는 그 값이 맞는지 검토하고 부족한 항목만env.local.sh에 추가하는 과정입니다.
값을 어떻게 알아내나요? (헷갈리는 항목)
# IP 확인 (PP_HOST_IP / PP_SERVICE_IP)
hostname -I | awk '{print $1}' # 서버 내부 IP
ip -4 addr | grep inet # 외부 접속용 IP를 따로 골라야 할 때
# 데이터 디스크 / 코어 / 메모리
lsblk # 데이터 디스크명 (sdb, nvme0n1 …)
nproc # 전체 CPU 코어 수
free -g | awk '/^Mem:/{print $2"G"}' # 전체 메모리
PP_HOST_IP= 같은 네트워크 안에서 서버를 가리키는 내부 IP. 단일 서버라면PP_SERVICE_IP·PP_MASTER_IP도 같은 값을 넣으면 됩니다.PP_SERVICE_IP= 사용자가 브라우저로 접속하는 IP/도메인. NAT·클라우드면 외부 공개 IP를PP_PUBLIC_IP에 추가로 적어 주세요.
분산 분석 자원 사이징 (PP_CLUSTER_CORES / PP_CLUSTER_MEMORY_BY_CORE)
이 두 값은 Spark 등 분산 분석에 할당하는 자원입니다. 호스트 전체를 다 주지 말고, 스토리지·메시징·웹서버가 쓸 몫을 남겨 두세요(전체의 60~70% 권장).
| 서버 사양 | PP_CLUSTER_CORES | PP_CLUSTER_MEMORY_BY_CORE | 분석에 쓰는 메모리 합계 |
|---|---|---|---|
| 16코어 / 64GB | 10 | 2G | 20GB |
| 32코어 / 128GB | 20 | 3G | 60GB |
| 48코어 / 188GB | 30 | 4G | 120GB |
코어 수 × 코어당 메모리가 분석이 점유하는 메모리 총량입니다. 이 합계가 서버 전체 메모리를 넘지 않도록(여유 30% 이상) 맞춰 주세요. 넘기면 기동 중 OOM이 발생합니다.
4.2 서비스 계정 비밀번호
운영 환경에서는 반드시 다음 기본 비밀번호를 변경해 주세요.
# env.local.sh 안에 추가
export PP_REDIS_PASSWORD=$(openssl rand -base64 18)
export PP_CASSANDRA_PASSWORD=$(openssl rand -base64 18)
export PP_PG_PASSWORD=$(openssl rand -base64 18)
export PP_MQ_PASSWORD=$(openssl rand -base64 18)
export PP_HIVE_PASSWORD=$(openssl rand -base64 18)
export PP_MINIO_PASSWORD=$(openssl rand -base64 18)
export PP_TEMPORAL_PASSWORD=$(openssl rand -base64 18)
export PP_TLS_KEYSTORE_PASSWORD=$(openssl rand -base64 18)
권장: 변경된 비밀번호는 운영 vault (HashiCorp Vault, AWS Secrets Manager 등) 에 보관하고,
env.local.sh에서 환경별 override 로 주입하는 패턴을 사용해 주세요.
4.3 TLS / SSL 설정
# env.local.sh 안에 추가
export PP_TLS_ENABLED=true
export PP_TLS_DOMAIN=plantpulse.io
export PP_TLS_SAN_DNS="localhost,$(hostname -f),plantpulse.io,plantpulse.kopens.com"
export PP_TLS_SAN_IPS="${PP_HOST_IP},${PP_SERVICE_IP},${PP_PUBLIC_IP},127.0.0.1,192.168.0.10"
export PP_TLS_VALID_DAYS=730
외부 노출 IP 추가: NAT / 클라우드 환경에서는 외부 IP / 도메인을
PP_TLS_SAN_DNS/PP_TLS_SAN_IPS에 명시해야 클라이언트 인증서 검증이 통과합니다.
4.4 검증 및 리셋
cd /opt/kopens/plantpulse-platform/plantpulse-startup
./env-validate.sh # env.sh + env.local.sh 최종 변수 정합성 검증
./env-reset.sh # env.local.sh 변경 후 템플릿 재생성이 필요할 때
env-validate.sh는env.local.sh오버라이드가 적용된 최종 값을 검증합니다. 따라서env.local.sh작성 후 이 스크립트로 IP·경로·비밀번호가 의도대로 들어갔는지 확인할 수 있습니다.
5. 템플릿 설정 적용 (configure.sh)
env.sh(+ env.local.sh 오버라이드)의 최종 값을 모든 모듈의 설정 파일에 일괄 적용합니다.
cd /opt/kopens/plantpulse-platform/plantpulse-startup
./configure.sh
configure.sh 는 내부적으로 startup.jar CONFIGURE 를 호출하여 다음을 수행합니다.
template/디렉토리의 모든 설정 템플릿(*.template) 을 스캔env.sh변수로 placeholder (${PP_HOST_IP},${PP_CASSANDRA_PASSWORD}등) 치환- 실제 설정 파일 위치로 저장 — 웹앱 서비스(server / batch / cep / sql / data-gateway)는 각 모듈의
config/, 인프라 모듈은conf/,etc/등
웹앱 서비스의 설정이 모듈 config/ 에 외부화되어 있으므로, 웹앱(WAR)을 재배포해도 설정이 유실되지 않습니다.
변경 후 재실행 필수:
env.local.sh를 변경할 때마다./configure.sh를 다시 실행해야 새 값이 모듈에 반영됩니다.
6. TLS 인증서 준비 (prepare-ssl.sh)
PP_TLS_ENABLED=true 인 경우 첫 기동 전에 인증서를 생성합니다.
cd /opt/kopens/plantpulse-platform/plantpulse-startup
./prepare-ssl.sh
- 자체 서명 인증서 (ECDSA secp256r1) 생성
- keystore / truststore 생성 (
/var/security/plantpulse/) - OPC-UA / Kafka / MQTT / Cassandra / Web 인증서 분리 생성
- 외부 CA 인증서를 사용하려면 보안 설정 페이지 참고
7. 플랫폼 시작
7.1 포그라운드 시작 (최초 검증)
처음 설치 후에는 시작 로그를 직접 보면서 확인하시는 것이 좋습니다.
/opt/kopens/plantpulse-platform/plantpulse-startup/start.sh
7.2 백그라운드 시작 (운영 모드)
운영 환경에서는 데몬 모드로 시작합니다. 터미널을 닫아도 플랫폼이 계속 실행됩니다.
/opt/kopens/plantpulse-platform/plantpulse-startup/start-daemon.sh
7.3 기동 순서
startup.jar 가 의존성 순서에 따라 컴포넌트를 단계별로 기동합니다.
각 단계가 완료될 때까지 자동으로 대기하므로 별도 조작은 필요 없습니다. 전체 기동에 3 ~ 5분 소요됩니다.
7.4 시작 정상 메시지
═══════════════════════════════════════════════════════════════════
____ _ _ ____ _
| _ \| | __ _ _ __ | |_| _ \ _ _| |___ ___
| |_) | |/ _` | '_ \| __| |_) | | | | / __|/ _ \
| __/| | (_| | | | | |_| __/| |_| | \__ \ __/
|_| |_|\__,_|_| |_|\__|_| \__,_|_|___/\___|
PLATFORM
═══════════════════════════════════════════════════════════════════
● Status STARTING [DAEMON]
● Host ...
● URLs https://... (web)
═══════════════════════════════════════════════════════════════════
...
플랜트펄스 플랫폼이 정상적으로 시작되었습니다.
8. 설치 확인
8.1 서비스 상태 점검
/opt/kopens/plantpulse-platform/plantpulse-startup/status.sh
각 모듈이 RUNNING 상태로 표시되며, 시스템 자원 사용량 (CPU / Memory PSS / Disk) 요약도 함께 나옵니다.
=============================================================================================================
PLANTPULSE PLATFORM - ALL SERVICE STATUS
=============================================================================================================
<SYSTEM RESOURCE OVERVIEW>
--------------------------------------------------------------------------------------------------------------
CPU LOAD (AVG) : 12.3% (48 cores)
MEMORY USAGE : 65.2% (123.1G / 188.7G)
DATA DISK USAGE : 45.8% (2.2T / 4.8T)
--------------------------------------------------------------------------------------------------------------
<SERVICE STATUS BY PORT>
SERVICE | PORT | STATUS | PID | CPU | MEMORY (PSS) | PROCESS
PP_MESSAGING[KAFKA] | 9092 | RUNNING | 12345 | 2.3% | 8.5G ( 4.51%) | java
PP_STORAGE[CASSANDRA] | 9042 | RUNNING | 12567 | 5.1% | 16.2G ( 8.59%) | java
PP_SERVER | 80 | RUNNING | 12890 | 1.2% | 4.8G ( 2.55%) | java
...
8.2 웹 콘솔 접속
브라우저에서 다음 주소로 접속합니다.
| URL | 용도 |
|---|---|
http://[SERVICE_IP]/ | 운영 콘솔 (포트 80) |
https://[SERVICE_IP]/ | 운영 콘솔 (포트 443, TLS) |
https://[SERVICE_IP]:7443/ | 관리 콘솔 (별도 포트) |
- 기본 관리자 계정: admin / admin123!
- 로그인 후 즉시 비밀번호를 변경해 주세요.
8.3 헬스 체크 엔드포인트
외부 모니터링 시스템과 연동할 때 사용합니다.
# 컨테이너 / 프로세스 헬스
curl -kfsS https://127.0.0.1:4950/api/health | jq
# 모니터 모듈
curl -fsS http://127.0.0.1:4949/health
운영 명령 요약
cd /opt/kopens/plantpulse-platform/plantpulse-startup
./start.sh # 포그라운드 시작
./start-daemon.sh # 백그라운드 시작
./stop.sh # 정지
./restart.sh # stop → clean → start-daemon
./status.sh # 전체 모듈 상태
./log-viewer.sh # 통합 로그 뷰어
./log-delete.sh # 오래된 로그 정리
./clean.sh # 임시 파일 정리 (정지 후)
./kill.sh # 강제 종료 (응답 없을 때)
# 모듈별 재시작
./restart-server.sh # 웹 서버
./restart-storage.sh # 스토리지
./restart-analytics.sh # 분석
./restart-messaging.sh # 메시징
./restart-timeseries.sh # 시계열
./restart-workflow.sh # 워크플로우
./restart-cep.sh # CEP
./restart-data-gateway.sh # 데이터 게이트웨이
./restart-monitor.sh # 모니터
./restart-batch.sh # 배치
./restart-warehouse.sh # 웨어하우스
./restart-plugin.sh # 플러그인
./restart-opcua-server.sh # OPC-UA
./restart-aasx-server.sh # AAS
# Cassandra 운영
./node-status.sh # 클러스터 상태
./node-info.sh # 노드 상세
./node-cql.sh # CQL 셸
./node-compact.sh # 수동 컴팩션
./node-cleanup.sh # 노드 정리
./node-repair.sh # 데이터 복구
상세 운영 절차는 시작 가이드 및 운영 관리 페이지를 참고해 주세요.
폐쇄망 (Airgap) 설치
인터넷이 차단된 환경에서는 다음 절차로 설치합니다.
빌드 노드 (인터넷 환경)에서 번들 생성
cd /opt/kopens/plantpulse-platform/offline
./prepare-offline.sh
# 산출물: /offline-install/kopens-offline.tar.gz
번들에는 다음이 포함됩니다.
- 전체
/opt/kopens/plantpulse-platform/디렉토리 - 필수 RPM (
offline/repos/rpm/+repodata/) - Python wheel (
offline/repos/python-wheels/) - JDK / 인프라 패키지 (
tools/하위)
폐쇄망 노드로 이전
USB / 내부 파일 서버 / scp 등으로 kopens-offline.tar.gz 전달.
폐쇄망 노드에서 설치
mkdir -p /opt/kopens
tar -xzvf /path/to/kopens-offline.tar.gz -C /opt/kopens/
cd /opt/kopens/plantpulse-platform/tools
./setup-offline.sh
# 환경 변수 작성 및 시작 (env.sh 직접수정 ✗ → env.local.sh 에 오버라이드)
cd /opt/kopens/plantpulse-platform/plantpulse-startup
vi env.local.sh
./configure.sh
./start-daemon.sh
./status.sh
setup-offline.sh 는 로컬 RPM 리포만 사용해 OS 의존성을 설치하고 인프라 컴포넌트를 배포합니다.
업데이트
마이너 업데이트 (설정 / 패치)
cd /opt/kopens/plantpulse-platform/plantpulse-startup
./stop.sh
# 패치 파일 적용 (운영팀이 안내한 절차에 따라)
cp -r /tmp/patch/* /opt/kopens/plantpulse-platform/
./configure.sh
./start-daemon.sh
./status.sh
메이저 업데이트 (전체 재배포)
# 1. 현재 데이터 / 설정 백업
./stop.sh
cp -a /opt/kopens/plantpulse-platform /opt/kopens/plantpulse-platform.bak-$(date +%Y%m%d)
tar -czf /data1/pp-backup/pre-update-$(date +%Y%m%d).tar.gz /data1/pp-data /data1/pp-backup
# 2. 새 tar.gz 풀기 (env.local.sh / 데이터는 보존)
# 설정값은 env.local.sh 에 있으므로 그 파일만 보존하면 됩니다.
# env.sh 는 새 버전으로 갱신되어도 무방합니다(기본값 정본).
cd /opt/kopens
tar -xzvf plantpulse-platform-NEW.tgz --exclude='plantpulse-platform/plantpulse-startup/env.local.sh'
# 3. 재구성 및 시작
cd /opt/kopens/plantpulse-platform/plantpulse-startup
./configure.sh
./start-daemon.sh
# 4. 문제 시 롤백
./stop.sh
rm -rf /opt/kopens/plantpulse-platform
mv /opt/kopens/plantpulse-platform.bak-YYYYMMDD /opt/kopens/plantpulse-platform
cd /opt/kopens/plantpulse-platform/plantpulse-startup
./start-daemon.sh
데이터 보호: 메이저 업데이트 전에 반드시
/data1/pp-data와/data1/pp-backup의 풀 백업을 수행하시고, 별도 디스크 / 외부 스토리지에 보관해 주세요.
문제 해결 핵심
| 증상 | 1차 조치 |
|---|---|
| 시작 후 일부 모듈 STOPPED | ./status.sh 로 어느 모듈인지 확인 후 ./restart-<module>.sh |
| 메모리 부족 / OOMKilled | env.local.sh 의 PP_CLUSTER_CORES / PP_CLUSTER_MEMORY_BY_CORE 조정 후 ./configure.sh |
| 포트 충돌 | ss -tlnp 로 점유 프로세스 확인 후 종료, 또는 env.local.sh 에서 포트 변경 후 ./configure.sh |
| 디스크 부족 | node-cleanup.sh / node-compact.sh 또는 오래된 백업 정리 |
| 시작 안 됨 | ./log-viewer.sh 또는 tail -F /var/log/plantpulse-startup.log |
| 강제 종료 필요 | ./kill.sh (최후 수단 — 데이터 손상 위험) |
자세한 진단 절차는 문제 해결 페이지를 참고해 주세요.
다음 단계
기술 지원
설치 과정에서 도움이 필요하시면 webmaster@kopens.com 으로 문의해 주세요. ./log-viewer.sh 의 화면 캡처 또는 /opt/kopens/plantpulse-platform/plantpulse-startup/test/ 의 검증 결과를 함께 보내주시면 빠른 분석이 가능합니다.