跳到主要内容

二进制安装

当前发行版不支持二进制(原生)安装

当前发行版本是 单个 Docker Compose 堆栈 — 包含一个证书生成器、一个数据湖、六个应用和一个代理(安装后的样子)。

本页面是为了 继续运维基于二进制安装构建的现有系统的用户 而保留的。新建部署请使用 一行安装Docker 安装

另外,下面的内容是基于容器迁移前的标准编写的,可能与当前产品有所偏差。如果二进制环境出现问题,请 联系 webmaster@kopens.com

概述

本页面介绍了 直接在操作系统上安装 PlantPulse 平台的二进制(原生)安装过程。解压 tar.gz 包,通过一个设置脚本即可配置 OS 依赖、基础设施和应用程序。

数据湖/应用 2 节点分离(PP_TIER) 安装请参见 2 节点分离安装。本文档基于单机(FULL)二进制安装。

安装方式对比

项目二进制安装一行/Docker 安装
安装时间20~40 分钟10~20 分钟
环境依赖在主机 OS 上安装包全部包含在容器中
资源隔离与主机共享由容器隔离
更新tar.gz 重新分发 + configureupdate.sh 一行命令
回滚从备份手动恢复自动回滚到旧版本镜像
隔离网络setup-offline.sh 支持airgap-load.sh 支持
主机 OS直接影响基本无影响

支持的环境

操作系统版本验证
Oracle Linux8.x, 9.x
RHEL / Rocky Linux8.x, 9.x
Amazon Linux2, 2023
Ubuntu22.04+

硬件建议规格

类别最小标准大规模
CPU16 vCPU32 vCPU48+ vCPU
内存64GB128GB200GB+
数据磁盘200GB1TB4TB+
磁盘 IOPSNVMe SSD 推荐NVMe SSDNVMe SSD
网络1Gbps10Gbps10Gbps

验证环境(参考):运营验证环境运行 48 vCPU / 188GB RAM / 4.8TB NVMe SSD,RHEL 9 / Temurin OpenJDK 21 LTS。

安装流程概览

1. 前置准备

1.1 获取 root 权限

安装以 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(单节点/集群主节点)或 WORKERMASTER
HOST IP服务器内部 IP192.168.0.41
SERVICE IP外部访问 IP 或域名192.168.0.41
MASTER IP (仅 WORKER)主节点 IP192.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 中。这是二进制安装的标准做法。

区分Docker 安装二进制安装(本页)
配置文件直接修改 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 必须检查的核心变量

类别变量说明默认值
PlatformPP_HOME安装路径/opt/kopens/plantpulse-platform
PP_MODE节点模式MASTER / WORKER
NetworkPP_HOST_IP服务器内部 IP192.168.0.41
PP_SERVICE_IP外部访问 IP192.168.0.41
PP_MASTER_IP主节点 IP192.168.0.41
PP_PUBLIC_IP外部公网 IP (NAT)${PP_HOST_IP}
DataPP_DATA_DIR数据存储路径/data1/pp-data
PP_TEMP_DIR临时文件路径/data1/pp-temp
PP_BACKUP_DIR备份路径/data1/pp-backup
ResourcesPP_CLUSTER_CORES分布式分析分配的核心数30
PP_CLUSTER_MEMORY_BY_CORE每核心内存2G
LocalePP_LANG区域设置(ko / enen
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_IPPP_MASTER_IP 填相同值即可。
  • PP_SERVICE_IP = 用户用浏览器访问的 IP/域名。如果有 NAT、云环境,请在 PP_PUBLIC_IP 中另外添加外部公网 IP。

分布式分析资源规模(PP_CLUSTER_CORES / PP_CLUSTER_MEMORY_BY_CORE

这两个值是分配给 Spark 等分布式分析的资源。不要把整个主机都给,要给存储、消息、网页服务器留足够(建议占总体的 60~70%)。

服务器规格PP_CLUSTER_CORESPP_CLUSTER_MEMORY_BY_CORE分析使用的内存总计
16 核心 / 64GB102G20GB
32 核心 / 128GB203G60GB
48 核心 / 188GB304G120GB

코어 수 × 코어당 메모리 是分析占用的内存总量。请确保这个总计不超过服务器整体内存(剩余 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 环境变量注入模式。

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 / 云环境中,必须在 PP_TLS_SAN_DNS / PP_TLS_SAN_IPS 中明确指定外部 IP/域名,客户端证书验证才能通过。

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,执行以下操作。

  1. 扫描 template/ 目录中所有配置模板(*.template
  2. env.sh 变量替换占位符(${PP_HOST_IP}${PP_CASSANDRA_PASSWORD} 等)
  3. 保存到实际配置文件位置 — 网页应用服务(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 进行完整备份,保存到单独的磁盘/外部存储。

问题解决要点

症状一级处理
启动后某些模块 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.shtail -F /var/log/plantpulse-startup.log
需要强制停止./kill.sh(最后手段 — 有数据损坏风险)

详细诊断步骤请参见 问题解决 页面。

下一步

技术支持

安装过程中需要帮助请 联系 webmaster@kopens.com。请附上 ./log-viewer.sh 的屏幕截图或 /opt/kopens/plantpulse-platform/plantpulse-startup/test/ 的验证结果,可以加快分析速度。